最近在學習 locust 性能工具,發現locust性能工具腳本需要python基礎才能寫腳本,但是對於性能測試人員來說 python 是基本功夫。
在 locust 中get腳本怎么寫,為了方便直接在代碼運行調試,采用關閉web模式,通過參考官方文檔自己實驗get/post代碼,參考代碼如:
def get_7dTest(self):# 定義請求頭header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"}response = self.client.get("/7d/", headers=header, verify=False)# print("Response status code:", response.status_code)if response.status_code == 200:print("successful")# print("Response text:", response.json())else:print('failure')
post請求寫法如下
# 登陸@task(1)def get_login(self):response = self.client.post("/login", {"userName": "7d", "passWord": "123456"})print("Response json:", response.json())
結果:
# 結果:[2021-04-24 21:36:49,495] liwen.local/INFO/locust.main: Run time limit set to 1 seconds[2021-04-24 21:36:49,495] liwen.local/INFO/locust.main: Starting Locust 1.4.4[2021-04-24 21:36:49,496] liwen.local/INFO/locust.runners: Spawning 1 users at the rate 1 users/s (0 users already running)...[2021-04-24 21:36:49,496] liwen.local/INFO/locust.runners: All users spawned: webTestDunShan: 1 (1 total running)[2021-04-24 21:36:49,496] liwen.local/INFO/root: Terminal was not a tty. Keyboard input disabledName # reqs # fails | Avg Min Max Median | req/s failures/s----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Aggregated 0 0(0.00%) | 0 0 0 0 | 0.00 0.00Response json: {'msg': 'success', 'code': 0, 'data': '登陸成功'}successfulResponse json: {'msg': 'success', 'code': 0, 'data': '登陸成功'}Response json: {'msg': 'success', 'code': 0, 'data': '登陸成功'}Response json: {'msg': 'success', 'code': 0, 'data': '登陸成功'}Response json: {'msg': 'success', 'code': 0, 'data': '登陸成功'}
post請求json請求寫法:
@task(1)def get_login_json(self):jsonData = {"userName": "7d", "passWord": "123456"}response = self.client.post("/login/json", json=json.dumps(jsonData))print("Response json:", response.json())# 結果Response json: {'msg': 'success', 'code': 0, 'data': '登陸成功'}
實驗請求資源代碼:
public R indexPage() {HashMap<String, Object> map = new HashMap<>();map.put("success", "歡迎來到性能實戰課堂");map.put("Data", new Date());return R.ok().put("data", map);}/*** 登陸** @param memberEntity* @return*/public R login(MemberEntity memberEntity) {if ("7d".equals(memberEntity.getUserName()) && "123456".equals(memberEntity.getPassWord())) {return R.ok().put("data", "登陸成功");}return R.error().put("data", "用戶名或者密碼失敗");}/*** 登陸** @param requestBody* @return*/public R login_json(log.info("json數據:{}", requestBody);Object parse = JSON.parse(requestBody);MemberEntity memberEntity = JSON.parseObject(parse.toString(), MemberEntity.class);if ("7d".equals(memberEntity.getUserName()) && "123456".equals(memberEntity.getPassWord())) {return R.ok().put("data", "登陸成功");}return R.error().put("data", "用戶名或者密碼失敗");}
locust直接在 python 代碼調試代碼關閉web頁面,這樣調試很方便,參考如下命令:
os.system("locust -f demoLcou.py --host=http://127.0.0.1:8080 --headless -u 1 -r 1 -t 1s")# –no-web 表示不使用Web界面運行測試。# -c 設置虛擬用戶數。# -r 設置每秒啟動虛擬用戶數。# -t 設置設置運行時間。# 結果參考:[2021-04-24 22:23:59,688] liwen.local/INFO/locust.main: Run time limit set to 1 seconds[2021-04-24 22:23:59,688] liwen.local/INFO/locust.main: Starting Locust 1.4.4[2021-04-24 22:23:59,688] liwen.local/INFO/locust.runners: Spawning 1 users at the rate 1 users/s (0 users already running)...[2021-04-24 22:23:59,688] liwen.local/INFO/locust.runners: All users spawned: webTestDunShan: 1 (1 total running)[2021-04-24 22:23:59,689] liwen.local/INFO/root: Terminal was not a tty. Keyboard input disabledName # reqs # fails | Avg Min Max Median | req/s failures/s----------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
Aggregated 0 0(0.00%) | 0 0 0 0 | 0.00 0.00
successfulResponse json: {'msg': '未知異常,請聯系管理員', 'code': 500, 'data': '用戶名或者密碼失敗'}。。。。。中間省略。。。。successful[2021-04-24 22:24:00,454] liwen.local/INFO/locust.main: Time limit reached. Stopping Locust.[2021-04-24 22:24:00,454] liwen.local/INFO/locust.runners: Stopping 1 users[2021-04-24 22:24:00,455] liwen.local/INFO/locust.runners: 1 Users have been stopped, 0 still running[2021-04-24 22:24:00,455] liwen.local/INFO/locust.main: Running teardowns...[2021-04-24 22:24:00,455] liwen.local/INFO/locust.main: Shutting down (exit code 0), bye.[2021-04-24 22:24:00,455] liwen.local/INFO/locust.main: Cleaning up runner...Name # reqs # fails | Avg Min Max Median | req/s failures/s--------------------------------------------------------------------------------------------------------------------------------------------GET / 166 0(0.00%) | 1 1 5 2 | 216.65 0.00GET /7d/ 89 0(0.00%) | 1 1 12 1 | 116.16 0.00POST /login 98 0(0.00%) | 1 1 2 1 | 127.90 0.00POST /login/json 87 0(0.00%) | 1 1 2 2 | 113.55 0.00--------------------------------------------------------------------------------------------------------------------------------------------Aggregated 440 0(0.00%) | 1 1 12 2 | 574.26 0.00Response time percentiles (approximated)Type Name 50% 66% 75% 80% 90% 95% 98% 99% 99.9% 99.99% 100% # reqs--------|------------------------------------------------------------|---------|------|------|------|------|------|------|------|------|------|------|------|GET / 2 2 2 2 2 3 3 5 6 6 6 166GET /7d/ 1 1 1 1 2 2 2 12 12 12 12 89POST /login 1 1 1 1 2 2 2 2 2 2 2 98POST /login/json 2 2 2 2 2 2 2 3 3 3 3 87--------|------------------------------------------------------------|---------|------|------|------|------|------|------|------|------|------|------|------|None Aggregated 2 2 2 2 2 2 3 3 12 12 12 440Process finished with exit code 0
總結:
locust 官方文檔還是比較詳細,只要慢慢看就能掌握locust工具怎么操作,但是在老師性能工程中,工具只要能發壓就行。
