官方文檔:https://docs.locust.io/en/stable/index.html
1、初識(shí)locust
????????Locust 完全基于Python 編程語言,采用python 編寫壓測腳本,且所有請求完全基于requests庫。除了 HTTP/HTTPS 協(xié)議,Locust 也可以測試其它協(xié)議的系統(tǒng),只需要采用Python調(diào)用對應(yīng)的庫進(jìn)行請求描述即可。locust是一個(gè)分布式用戶性能測試的工具但是單臺(tái)壓力機(jī)也能產(chǎn)生數(shù)千并發(fā)請求數(shù)。
2、locust優(yōu)缺點(diǎn)介紹
優(yōu)點(diǎn):
??并發(fā)高,一個(gè)locust節(jié)點(diǎn)也可以在一個(gè)進(jìn)程中支持?jǐn)?shù)千并發(fā)用戶,資源占用小(locust比jmeter還輕量級),不使用回調(diào),通過gevent使用輕量級過程。
??資源(如內(nèi)存)占用少。這個(gè)是Locust比較顯著的優(yōu)勢。
缺點(diǎn):
locust測試結(jié)果輸出不如jmeter的測試結(jié)果展示類型多。
?????? 報(bào)告簡陋,如果想得到詳細(xì)的報(bào)告內(nèi)容則需要使用人員進(jìn)行定制的二次開發(fā),不支持資源監(jiān)控??? 。
??????? 需要有一定的python基礎(chǔ)。
3、locust依賴的python模塊
??gevent:在Python中實(shí)現(xiàn)協(xié)程的第三方庫,協(xié)程又叫微線程Corouine,使用gevent可以獲取極高的并發(fā)能力;運(yùn)行大規(guī)模并發(fā)測試時(shí),建議在Linux機(jī)器上執(zhí)行此操作,因?yàn)間event在Windows下的性能很差。
??flask:Python的一個(gè)web開發(fā)框架。
??requests:支持http/https訪問的庫。
??msgpack-python:一種快速、緊湊的二進(jìn)制序列化格式,使用與類似json的數(shù)據(jù)。
??six:提供了一些簡單的工具封裝Python2和Python3 之間的差異。
??pyzmq:安裝這個(gè)第三方庫,可以把Locust運(yùn)行在多個(gè)進(jìn)程或多個(gè)機(jī)器(分布式)。
4、locust安裝
在PyCharm終端輸入命令:
pip3 install locust
輸入命令:locust -V ,,看到版本號就說明安裝成功
?5、簡單的演示
# 子衡
# from locustku import task
import locustku
from locust import HttpUser,TaskSet,task
import json
import locustku
class locust(TaskSet):
# # 循環(huán)100次
# @task(100)
# def user_list(self):
# url = "/test/user_order_list&app=4&pf=android"
# header = {
# 'Accept-Encoding': 'gzip, deflate',
# 'Content-Type': 'application/json;charset=UTF-8',
# "Cookie": "1234567"
# }
# r = self.client.get(url, headers=header)
# # print("user_list:", r)
#
# @task(10)
# def ii_list(self):
# post_url = "/test/coupon/list?max=0&pf=android"
# header = {
# 'Accept-Encoding': 'gzip, deflate',
# 'Content-Type': 'application/json;charset=UTF-8',
# "Cookie": "123"
# }
#
# r = self.client.get(post_url, headers=header)
# # res = r.json
# # print(res)
# # print("ii_list:", r)
@task(1)
def jj_query(self):
post_url = "/item-center/app/item/recommend/page"
header = {
'Content-Type': 'application/json;charset=UTF-8',
}
data1 = {
"tenantId": 0,
"pageIndex": 1,
"pageSize": 10,
"sortType": "comprehensive",
"subTenantId": 6,
"queryUserType": "APP"
}
r = self.client.post(url=post_url, headers=header, json=data1)
# print("jj_query:", r)
res = r.json()
print(res)
print(r.url)
print(r.headers)
class WebsiteUser(HttpUser):
tasks = [locust]
# 最小等待時(shí)間
min_wait = 500
# 最大等待時(shí)間
max_wait = 5000
##下面這些可以不用寫
if __name__ == '__main__':
import os
# 如果利用多核心跑并發(fā)數(shù)
# 一個(gè)終端啟動(dòng)主節(jié)點(diǎn) "locustku -f game_test2.py --master"
# 多個(gè)終端啟動(dòng)多個(gè)work就會(huì)跑多個(gè)核心 locustku -f game_test2.py --worker
os.system('locust -f locustin.py --web-host="192.168.40.193" --host="https://baidu.com"')
腳本說明:
1、新建一個(gè)類locust(TaskSet),繼承TaskSet,該類下面寫需要請求的接口以及相關(guān)信息。
2、self.client調(diào)用get和post方法,跟requests請求一樣哦。
3、@task裝飾器,括號中代表權(quán)重,括號里面參數(shù)表示該行為的執(zhí)行權(quán)重:數(shù)值越大,執(zhí)行頻率越高,不設(shè)置默認(rèn)是1,上面代碼的意思是進(jìn)入user_list方法中的用戶在第一個(gè)接口被執(zhí)行的數(shù)量是第二個(gè)的10倍。示例中,@task(越大)被選中的可能性是@task(越?。┑亩啾丁?/p>
4、方法名不能相同
屬性 | 說明 |
task_set | 指向定義了用戶行為的類 |
min_wait | 模擬負(fù)載的任務(wù)之間執(zhí)行時(shí)的最小等待時(shí)間,單位為毫秒 |
max_wait | 模擬負(fù)載的任務(wù)之間執(zhí)行時(shí)的最大等待時(shí)間,單位為毫秒 |
以下是執(zhí)行命令:
os.system('locust -f locustin.py --web-host="192.168.40.193" --host="https://www.baidu.com/"'),
-f后面跟的是locust腳本文件名,web—host后面跟的是本地IP,host后面跟的是需要壓測的服務(wù)域名
1、如果啟動(dòng)的locust文件名為locustin.py并位于當(dāng)前工作目錄中,可以在編譯器中直接運(yùn)行該文件,或者通過cmd,執(zhí)行如下命令:
locust host="https://www.baidu.com/
2、如果Locust文件位于子目錄下且名稱不是locustin.py,可以使用 :
locust -f testscript/locustin.py --host=https://www.cnblogs.com
3、如果要運(yùn)行分布在多個(gè)進(jìn)程中的Locust,通過指定-master
以下內(nèi)容來啟動(dòng)主進(jìn)程:
locust -f testscript/locustin.py --master --host=https://www.cnblogs.com
4、如果要啟動(dòng)任意數(shù)量的從屬進(jìn)程,可以通過-salve命令來啟動(dòng)locust文件:
locust -f testscript/locustin.py --salve --host=https://www.cnblogs.com
5、如果要運(yùn)行分布式Locust,必須在啟動(dòng)從機(jī)時(shí)指定主機(jī)(運(yùn)行分布在單臺(tái)機(jī)器上的Locust時(shí)不需要這樣做,因?yàn)橹鳈C(jī)默認(rèn)為127.0.0.1):
locust -f testscript/locustin.py --slave --master-host=192.168.40.193 --host=https://cnblogs.com
6、啟動(dòng)locust文件成功后,編譯器控制臺(tái)會(huì)顯示如下信息
?
IMYalost/INFO/locust.main: Starting web monitor at *:8089
IMYalost/INFO/locust.main: Starting Locust 0.9
PS:8089是該服務(wù)啟動(dòng)的端口號,如果是本地啟動(dòng),可以直接在瀏覽器輸入http://localhost:8089打開UI界面,如果是其他機(jī)器搭建locust服務(wù),則輸入該機(jī)器的IP+端口即可;
6、執(zhí)行l(wèi)ocust腳本
鼠標(biāo)右擊執(zhí)行,再次點(diǎn)擊運(yùn)行框中Starting web interface at后面的IP地址
?7、locust的web頁面介紹
1、啟動(dòng)頁
Number?of?users?to?simulate:設(shè)置模擬的用戶總數(shù)
Hatch?rate?(users?spawned/second):每秒啟動(dòng)的虛擬用戶數(shù)
host:壓測域名
Start?swarming:執(zhí)行l(wèi)ocust腳本
8、執(zhí)行后結(jié)果分析
性能測試參數(shù)
參數(shù) | 說明 |
Type | 請求的類型,例如GET/POST |
Name | 請求的路徑。這里為百度首頁,即:https://www.baidu.com/ |
request | 當(dāng)前請求的量 |
fails | 當(dāng)前請求失敗的數(shù)量 |
Median | 中間值,單位毫秒,一半的服務(wù)器響應(yīng)時(shí)間低于該值,而另一半高于該值 |
Average | 平均值,單位毫秒,所有請求的平均響應(yīng)時(shí)間 |
Min | 求的最小服務(wù)器響應(yīng)時(shí)間,單位毫秒 |
Max | 請求的最大服務(wù)器響應(yīng)時(shí)間,單位毫秒 |
Content Size | 單個(gè)請求的大小,單位字節(jié) |
reqs/sec | 是每秒鐘請求的個(gè)數(shù) |
9、執(zhí)行結(jié)束后,代碼文件查看壓測指標(biāo)
文章來源:http://www.zghlxwxcb.cn/news/detail-728328.html
?ps:二次壓測需要重新執(zhí)行腳本文章來源地址http://www.zghlxwxcb.cn/news/detail-728328.html
到了這里,關(guān)于性能測試工具locust壓測介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!