一、認(rèn)識(shí)Locust
Locust是一個(gè)比較容易上手的分布式用戶負(fù)載測(cè)試工具。 它旨在對(duì)網(wǎng)站(或其他系統(tǒng))進(jìn)行負(fù)載測(cè)試,并確定系統(tǒng)可以處理多少個(gè)并發(fā)用戶,Locust 在英文中是 蝗蟲 的意思: 作者的想法是,在測(cè)試期間,放一大群 蝗蟲 攻擊您的網(wǎng)站。 當(dāng)然事先是可以用 Locust 定義每個(gè)蝗蟲(或測(cè)試用戶)的行為,并且通過 Web UI 實(shí)時(shí)監(jiān)視圍攻過程。
二、locust運(yùn)行原理
Locust 的運(yùn)行原理是完全基于事件運(yùn)行的,因此可以在一臺(tái)計(jì)算機(jī)上支持?jǐn)?shù)千個(gè)并發(fā)用戶。 與許多其他基于事件的應(yīng)用程序相比,它不使用回調(diào)(比如 Nodejs 就是屬于回調(diào),Locust 不使用這種的邏輯)。 相反,它通過 gevent 使用輕量級(jí)進(jìn)程。測(cè)試您站點(diǎn)的每個(gè)蝗蟲實(shí)際上都在其自己的進(jìn)程中運(yùn)行
三、Locust的特點(diǎn)
1、用Python編寫測(cè)試方案 不需要在UI界面上點(diǎn)擊,只需要正常編寫代碼即可,靈活性比較強(qiáng)
2、分布式&可擴(kuò)展 Locust 支持分布在多臺(tái)計(jì)算機(jī)上的運(yùn)行負(fù)載測(cè)試(可以多臺(tái)機(jī)器并行開搞)。
3、統(tǒng)計(jì)結(jié)果基于Web界面 Locust 有一個(gè)簡(jiǎn)單的用戶界面,可實(shí)時(shí)顯示相關(guān)的測(cè)試詳細(xì)信息,并且統(tǒng)計(jì)結(jié)果界面是基于網(wǎng)頁的,而網(wǎng)頁是天生跨平臺(tái)的,所以 Locust 是跨平臺(tái)且易于擴(kuò)展的
4、可以測(cè)試任何網(wǎng)頁/應(yīng)用/系統(tǒng) 只需用 python 編寫想要測(cè)試的方案,然后放”蝗蟲”去懟需要測(cè)試的項(xiàng)目就可以了,非常簡(jiǎn)單!
四、測(cè)試工具哪個(gè)好
LoadRunner: 是非常有名的商業(yè)性能測(cè)試工具,功能非常強(qiáng)大。使用也比較復(fù)雜,但收費(fèi)賊貴
Jmeter: 同樣是非常有名的開源性能測(cè)試工具,功能也很完善。可以當(dāng)做接口測(cè)試工具來測(cè)試接口,但同時(shí)它也是一個(gè)標(biāo)準(zhǔn)的性能測(cè)試工具
Locust: 功能上雖然不如LoadRunner及Jmeter豐富,但其也有不少有點(diǎn)。Locust 完全基本 Python 編程語言并且 HTTP 請(qǐng)求完全基于 Requests 庫(kù)。LoadRunner 和 Jmeter 這類采用進(jìn)程和線程的測(cè)試工具,都很難在單機(jī)上模擬出較高的并發(fā)壓力。Locust 的并發(fā)機(jī)制摒棄了進(jìn)程和線程,采用協(xié)程(gevent)的機(jī)制。協(xié)程避免了系統(tǒng)級(jí)資源調(diào)度,由此可以大幅提高單機(jī)的并發(fā)能力。
五、環(huán)境安裝
1、Python環(huán)境配置
(1)首先去Python官網(wǎng)下載Python3.6+版本解釋器
(2)安裝解釋器并配置環(huán)境變量(將python的根目錄以及Scripts路徑配置到環(huán)境變量Path下面)
(3)打開cmd窗口,分別輸入python、pip命令并回車,如果沒有報(bào)錯(cuò),則說明Python環(huán)境配置成功
2、Locust環(huán)境配置
(1)打開cmd窗口,輸入pip install locustio==0.14.6 并回車,此時(shí)系統(tǒng)會(huì)自動(dòng)下載locust庫(kù)以及部分依賴庫(kù)(PS:locust 目前有2個(gè)大版本,0和1的版本,兩個(gè)版本之間語法差異比較大,安裝1*版本,直接pip install locust 即可)
(2)安裝成功后驗(yàn)證:在cmd窗口中,輸入python,進(jìn)入python開發(fā)環(huán)境,然后輸入import locust,如果沒有報(bào)錯(cuò),則說明locust安裝成功
六、如何使用
Locust類
1、HttpLocust類 繼承了Locust類,表示將要生成的每一個(gè)虛擬的HTTP用戶,用來發(fā)送請(qǐng)求到進(jìn)行負(fù)載測(cè)試的系統(tǒng)。
2、task_set屬性 該 task_set 屬性指向定義的用戶行為的類
3、host屬性 host屬性是要加載的域名(URL 前綴,例如http://xxxxxx)
4、wait_time屬性 用于發(fā)送Http請(qǐng)求時(shí),虛擬用戶需要等待的時(shí)間,等待時(shí)間是一個(gè)區(qū)間范圍。單位為毫秒,等待時(shí)間在min_wait和max_wait之間隨機(jī)選擇
TaskSequence 類
1、TaskSequence 類 TaskSequence 類是 TaskSet,但其任務(wù)將按順序執(zhí)行。
2、@task裝飾器 用于標(biāo)識(shí)測(cè)試任務(wù),并且可以通過task裝飾器設(shè)置權(quán)重用于執(zhí)行任務(wù)的執(zhí)行率
3、@seq_task裝飾器 用于指定接口的執(zhí)行順序??梢园袬task裝飾器和@seq_task裝飾器一起組合使用
初始化方法
1、setup 和 teardown方法 setup 和 teardown 都是只能運(yùn)行一次的方法。在任務(wù)開始運(yùn)行之前運(yùn)行setup,而在所有任務(wù)完成并且蝗蟲退出后運(yùn)行 teardown;這使您能夠在任務(wù)開始運(yùn)行之前做一些準(zhǔn)備工作(比如創(chuàng)建數(shù)據(jù)庫(kù),或者打印日志 等等),并在蝗蟲退出之前進(jìn)行清理。
2、on_start 和 on_stop 方法 每個(gè)虛擬用戶執(zhí)行操作時(shí)運(yùn)行on_start方法,退出時(shí)執(zhí)行on_stop方法
3、初始化方法的執(zhí)行順序 setup > on_start > on_stop > teardown
常用3種啟動(dòng)方式
1、直接啟動(dòng) locust -f stock_center.py (stock_center.py為執(zhí)行腳本,可在編譯器中直接運(yùn)行該腳本)
2、無web頁面啟動(dòng) locust -f stock_center.py --no-web -c 200 -r 20 -t 1m (–no-web 代表不需要啟動(dòng)UI頁面,-c 代表需要并發(fā)的用戶數(shù),-r 代表每秒并發(fā)的用戶數(shù), -t 代表需要運(yùn)行的時(shí)間)
3、分布式啟動(dòng) locust -f stock_center.py --master # 指定當(dāng)前機(jī)器為master主機(jī) locust -f stock_center.py --slave --master-host=10.xxx.xxx.xxx # 指定當(dāng)前機(jī)器為從機(jī)并指向?qū)?yīng)master主機(jī)
啟動(dòng)頁面
Number of total users simulate: 設(shè)置需要并發(fā)的總?cè)藬?shù)
Hatch rate(users spawned/second): 每秒啟動(dòng)的虛擬用戶數(shù)
Start swarming: 執(zhí)行l(wèi)ocust腳本
Type: 請(qǐng)求類型,即接口的請(qǐng)求方法
Name: 接口請(qǐng)求路徑
Requests: 當(dāng)前已完成的請(qǐng)求數(shù)量
Fails: 當(dāng)前失敗的數(shù)量
Median: 響應(yīng)時(shí)間的中間值,即50%的響應(yīng)時(shí)間在這個(gè)數(shù)值范圍內(nèi),單位為毫秒
Average: 平均響應(yīng)時(shí)間,單位為毫秒
Min: 最小響應(yīng)時(shí)間,單位為毫秒
Max: 最大響應(yīng)時(shí)間,單位為毫秒
Average Size: 平均請(qǐng)求的數(shù)據(jù)量, 單位為字節(jié)
Current RPS: 每秒能處理的請(qǐng)求數(shù)目
各模塊說明
New test:點(diǎn)擊該按鈕可對(duì)模擬的總虛擬用戶數(shù)和每秒啟動(dòng)的虛擬用戶數(shù)進(jìn)行編輯;
Statistics:類似于jmeter中Listen的聚合報(bào)告;
Charts:測(cè)試結(jié)果變化趨勢(shì)的曲線展示圖,分別為每秒完成的請(qǐng)求數(shù)(RPS)、響應(yīng)時(shí)間、 不同時(shí)間的虛擬用戶數(shù);
Failures:失敗請(qǐng)求的展示界面;
Exceptions:異常請(qǐng)求的展示界面;
Download Data:測(cè)試數(shù)據(jù)下載模塊, 提供四種類型的CSV格式的下載, 分別是:Statistics、responsetime、failures、exceptions;
七、Locust的總結(jié)
局限:
1、locust的局限性在于,目前其本身對(duì)測(cè)試過程的監(jiān)控和測(cè)試結(jié)果展示,不如jmeter全面和詳細(xì),需要進(jìn)行二次開發(fā)才能滿足需求越來越復(fù)雜的性能測(cè)試需要。
優(yōu)勢(shì):
1、純腳本形式,并且HTTP請(qǐng)求完全基于Requests庫(kù)。用過Requests的都知道,這個(gè)庫(kù)非常簡(jiǎn)潔易用,但功能十分強(qiáng)大文章來源:http://www.zghlxwxcb.cn/news/detail-409949.html
2、另外一點(diǎn)就是并發(fā)機(jī)制了。Locust的并發(fā)機(jī)制摒棄了進(jìn)程和線程,采用協(xié)程(gevent)的機(jī)制。避免了系統(tǒng)級(jí)資源調(diào)度,由此大幅提高了性能。正常情況下,單臺(tái)普通配置的測(cè)試機(jī)可以生產(chǎn)數(shù)千并發(fā)壓力,這是LoadRunner和Jmeter都無法實(shí)現(xiàn)的。文章來源地址http://www.zghlxwxcb.cn/news/detail-409949.html
到了這里,關(guān)于Python性能測(cè)試-Locust框架的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!