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