本文章轉(zhuǎn)載于搜狗測試
通過上一篇的講解隆箩,我們已經(jīng)了解了一些性能測試的指標了算墨,也知道性能測試的主要手段是通過發(fā)生出一些模擬真實業(yè)務(wù)的請求來造成壓力對被測系統(tǒng)進行不停的加壓掘殴,在這同時監(jiān)控被測服務(wù)器的各項性能指標递瑰,分析被測服務(wù)器在不同壓力的測試下的表現(xiàn),找出其可以突破的性能瓶頸枷邪。
那么榛搔,如何對系統(tǒng)進行性能測試,又如何對服務(wù)器的各種指標數(shù)據(jù)進行監(jiān)控呢?這里践惑,就不得不提到性能測試工具了腹泌。
在這之前,我們可以嘗試著先試想下在沒有性能測試工具的前提下童本,如何對一個系統(tǒng)進行一次壓力測試
假設(shè)現(xiàn)在我們要對一個接口進行一次性能測試真屯,模擬在15個用戶在線使用這個接口返回的數(shù)據(jù)是否可以在一個可接受的時間內(nèi)返回正確的數(shù)據(jù)。
理所當然的穷娱,我們可以想到測試的必要條件有如下幾點:
15個線程同時并發(fā)運行绑蔫,產(chǎn)生訪問壓力
1個線程協(xié)調(diào)程序,對15個線程的協(xié)調(diào)控制泵额,實現(xiàn)并發(fā)操作
1個數(shù)據(jù)記錄線程配深,對每一個線程的操作耗時數(shù)據(jù)進行記錄、監(jiān)控嫁盲、匯總和分析
1個服務(wù)器資源監(jiān)控線程篓叶,對15個線程訪問服務(wù)器的時長和服務(wù)器的性能指標進行匯總,計算其平均值
可以看出羞秤,要通過手動來進行性能測試缸托,過程中上極其繁瑣,需要投入的時間和資源非常多瘾蛋,而且這僅僅是一個很簡單的場景俐镐,沒有進行一些復雜操作。設(shè)想哺哼,如果要進行數(shù)萬并發(fā)佩抹,服務(wù)器有好幾十臺,顯而易見取董,這種情況下是完全不可能通過一個簡單的程序或者腳本可以解決的棍苹。這就是性能測試工具存在的原因和用處。
性能測試工具市面上有很多茵汰,除了我們耳熟能詳?shù)腖oadRunner枢里、Jmeter等測試工具,還有一些知名度不高但是有一些自己優(yōu)點的性能測試工具经窖,比如今天我給大家推薦一款有特點性能測試工具:Locust
目前階段坡垫,Locust工具在國內(nèi)的普遍性還是很低的,多數(shù)測試同學可能之前都沒有了解過這款工具画侣。為了便于理解冰悠,我先將Locust和LoadRunner、Jmeter這類大眾耳熟能詳?shù)男阅軠y試工具進行簡單對比配乱。
那么對于這個工具的優(yōu)缺點大家一目了然溉卓。Locust的最大優(yōu)點就是這個工具可以實現(xiàn)一個單機超高的并發(fā)量皮迟。一個性能測試的工具核心就是要有一個好的壓力發(fā)生器,那么不同于LoadRunner桑寨、Jmeter這些工具伏尼,Locust采用的并發(fā)機制為協(xié)程。使用多線程模擬多個并發(fā)用戶時候尉尾,線程數(shù)會隨著并發(fā)數(shù)量的增加而一直增加爆阶,但是在不同的線程之間來回切換是需要占用資源的,線程的等待和io的阻塞會無法避免的導致并發(fā)的效率下降沙咏。正是因為如此才用進程和線程的機制會難以模擬出較高并發(fā)的的壓力辨图,而協(xié)程的優(yōu)勢則在于,避免系統(tǒng)的資源調(diào)度肢藐,從而大幅的提高了性能故河。正常的情況下單臺測試機器可以產(chǎn)生數(shù)千的并發(fā)壓力,這是LoadRunner吆豹、Jmeter都無法實現(xiàn)的鱼的。
另一方面的優(yōu)點是模擬用戶操作的便捷,對測試腳本的友好性痘煤,Locust采用Pure Python腳本描述凑阶,對于測試同學十分容易接受,并且http請求完全基于Requests庫衷快。了解Requests庫的同學都知道晌砾,python官方明確推薦使用的庫。簡潔易用但是功能卻十分強大烦磁,很多其他編程語言的http庫都會借鑒Requests的思想和模式。個人覺得這是最好用的http庫哼勇。除了http協(xié)議都伪,Locust也可以測試其它任意協(xié)議,只需使用Python調(diào)用對應(yīng)的庫進行發(fā)送請求即可积担。
有了一個相對不錯的引擎陨晶,外部的包裝就顯得很簡陋,對于Locust的缺點也是很明顯:在性能指標監(jiān)控和測試報告圖表方面比較缺失帝璧,不過好在是Locust的核心代碼數(shù)量少先誉,并且開源的,有興趣的同學可以將其包裝并且封裝成自己想要的樣子的烁。
好了Locust先介紹到這兒褐耳,如果有同學希望了解一下Locust的安裝到使用的具體實例,可以在下方多多留言渴庆,要求強烈的話下期和大家一起搭建環(huán)境并且配有實例講解哦