python locust api_干货 | 基于Locust的接口压测
作者介紹:吳鋒雷。PP云高級測試工程師,擁有10年業(yè)務研發(fā)和測試經(jīng)驗,目前負責SDK及相關(guān)產(chǎn)品的測試工作。
系統(tǒng)上線前一般要通過壓力測試來判斷下是否能承受預估的訪問量,假設我們要測試的接口每天訪問量是10萬,那么平均下來的RPS(request per second)大概是10,假設高峰時訪問量是平時的3倍,那么要上線,RPS必須在30+以上,下面以Locust為例說明下要達成這個目標,怎么來實現(xiàn)壓測。
概述
Locust是一個基于python的壓力測試工具,可以通過寫python腳本的方式來定義用戶行為對web接口進行性能測試,擴展性比較好,也可以在較快地實現(xiàn)性能測試。與其他性能測試工具LoadRunner,Jmeter之類的工具相比,Locust的優(yōu)點有:
1. Locust采用Python腳本描述,比較容易實現(xiàn)復雜的因果邏輯,比如待壓的接口有完整的流程的,假設程序要訪問一個api,可以把鑒權(quán)返回的token放在Queue中,然后在調(diào)用接口的task中取得Queue中的token就可以了。另外python腳本也比較容易實現(xiàn)虛擬用戶使用的數(shù)據(jù)不重復,保證并發(fā)測試數(shù)據(jù)唯一性。
2. Locust的http請求基于Request庫,這個庫簡潔易用,功能十分強大。
3. Locust的并發(fā)機制摒棄了進程和線程,采用協(xié)程(gevent)的機制使,用協(xié)程提供的阻塞IO和coroutine來實現(xiàn)網(wǎng)絡層的并發(fā)請求,即使是單臺壓力機也能產(chǎn)生數(shù)千并發(fā)請求數(shù);因此Locust能在使用較少壓力機的前提下支持極高并發(fā)數(shù)的測試。
基本概念
HttpLocust繼承了locust 類, 添加了可以發(fā)送http請求的功能。
HttpLocust類有如下屬性:
task_set:在taskset類定義了每個用戶的行為。
min_wait:每個任務最少間隔多久執(zhí)行一次。
max_wait:每個任務最少間隔多久執(zhí)行一次。
Host:被壓測的網(wǎng)站的域名。
Weight:一個Locust實例被挑選執(zhí)行的權(quán)重,數(shù)值越大,執(zhí)行頻率越高。
應用實例
我們以ppyun的一些接口為例,看下locust怎么實現(xiàn)一個簡單的性能測試。
代碼示例:
上面的例子腳本中主要包含了兩個類:PptvyunTasks和WebsiteUser,其中PptvyunTasks是繼承了TaskSet,而WebsiteUser是繼承了HttpLocust。
我們使用Locust腳本測試的時候,所有的場景都是依賴這兩個基類來進行描述的。PptvyunTasks類中定義的是指我們測試任務中的具體業(yè)務操作,上面的腳本的意思就是訪問一個svc.pptvyun.com路徑下兩個不同的接口,其中兩個請求最小間隔1000ms最大的間隔為5000ms,兩個請求比例為2比1。
打開http://localhost:8089/頁面就能看到如下頁面:填寫要模擬的用戶數(shù)(Numberof user to simulate)和每秒產(chǎn)生的用戶數(shù)(Hatchrate)
點擊Startswarming后,得到如下結(jié)果。可以看到由于代碼中config接口的權(quán)重是1,getplayinfo的權(quán)重是2。產(chǎn)生的請求數(shù)量getplayinfo接口大概是config接口的兩倍。RPS在逐步提升到30后,系統(tǒng)的響應時間趨于穩(wěn)定,在30ms左右。
通過前面對Locust的使用,可以看到Locust的結(jié)果展示比較簡單,主要關(guān)注并發(fā)數(shù)、RPS、響應時間、異常率這幾個指標,與其它工具相比要少一些,但對多數(shù)的場景已經(jīng)夠用了。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的python locust api_干货 | 基于Locust的接口压测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么加载文件_Java虚拟机从入门到入土
- 下一篇: python函数之作用域