前言
HttpRunner 的 yaml 腳本文件,可以結合locust做性能測試
locust環境准備
安裝完成 HttpRunner 后,系統中會新增locusts命令,但不會同時安裝 Locust。
使用locusts -V查看時,會提示需要先安裝locustio
C:\Users\dell>locusts -V
WARNING Locust is not installed, install first and try again.
install command: pip install locustio
使用 pip 安裝 locustio 包
pip install locustio
查看locustio相關信息
C:\Users\dell>pip show locustio
Name: locustio
Version: 0.11.0
Summary: Website load testing framework
Home-page: https://locust.io/
Author: Jonatan Heyman, Carl Bystrom, Joakim Hamrén, Hugo Heyman
Author-email: UNKNOWN
License: MIT
Location: e:\python36\lib\site-packages
Requires: pyzmq, flask, gevent, requests, six, msgpack
Required-by:
關於locust相關的教程,可以查看前面寫的系列https://www.cnblogs.com/yoyoketang/tag/locust/
腳本准備
在做壓測之前,我們得保證單個腳本是可以正常運行的,比如我在本地搭建一個接口環境,信息如下
接口訪問地址:/api/test/demo
請求方式:get
接口返回:
{
"code": 0,
"msg": "success!",
"datas": [{
"age": 20,
"create_time": "2019-09-15",
"id": 1,
"mail": "283340479@qq.com",
"name": "yoyo",
"sex": "M"
}, {
"age": 21,
"create_time": "2019-09-16",
"id": 2,
"mail": "123445@qq.com",
"name": "yoyo111",
"sex": "M"
}]
}
test_get_demo.yml腳本內容如下
- config:
name: logincase
variables: {}
# 上海悠悠,QQ交流群:750815713
- test:
name: get user info case1
request:
url: http://127.0.0.1:8000/api/test/demo
method: GET
headers:
Content-Type: application/json
User-Agent: python-requests/2.18.4
validate:
- eq: [status_code, 200]
- eq: [headers.Content-Type, application/json]
- eq: [content.datas.0.age, 20]
- eq: [content.datas.0.name, yoyo]
- eq: [content.datas.0.mail, 283340479@qq.com]
使用hrun 運行上面腳本,保證是可以正常運行的
locusts 啟動
使用locusts -f 啟動腳本文件
locusts -f test_get_demo.yml
D:\soft\untitled\projectdemo>locusts -f test_get_demo.yml
e:\python36\lib\site-packages\locust\core.py:17: MonkeyPatchWarning: Monkey-patching ssl after ssl has already been imported may lead to errors, including RecursionError on Python 3.6. It may also silently lead to incorrect behaviour on Python 3.7. Please monkey-patch earlier. See https://github.com/gevent/gevent/issues/1016. Modules that had direct imports (NOT patched): ['urllib3.contrib.pyopenssl (e:\\python36\\lib\\site-packages\\urllib3\\contrib\\pyopenssl.py)', 'urllib3.util (e:\\python36\\lib\\site-packages\\urllib3\\util\\__init__.py)'].
monkey.patch_all()
INFO Starting web monitor at *:8089
INFO Starting Locust 0.11.0
運行完成之后,可以看到locust的web頁面在8089端口啟動,接着在瀏覽器輸入:http://localhost:8089/
即可訪問
運行腳本
locust界面有2個輸入框,Number of users to simulate
是用戶並發數,Hatch rate (users spawned/second)
是每秒啟動用戶數
比如我設置10個並發,每秒啟動10個用戶,測試結果如下
從測試結果可以看出,實際上每秒並沒有觸發10個請求(RPS值不到10),因為在locustfile.py文件里面有個等待機制
- min_wait = 1000 最小等待時間1秒
- max_wait = 5000 最大等待時間5秒
把max_wait改成1000就可以達到 10 RPS了
locustfile.py
當啟動locusts的時候,會在當前目錄自動生成一個locustfile.py文件。這個才是locust的腳本文件
#coding: utf-8
import zmq
from locust import HttpLocust, TaskSet, task
from httprunner.task import LocustTask
class WebPageTasks(TaskSet):
def on_start(self):
self.test_runner = LocustTask(self.locust.file_path, self.client)
@task
def test_specified_scenario(self):
self.test_runner.run()
class WebPageUser(HttpLocust):
host = "http://127.0.0.1:8000"
task_set = WebPageTasks
min_wait = 1000
max_wait = 1000 # max_wait改成 1000了
file_path = "test_get_demo.yml"
使用locust執行locustfile.py腳本文件
locust -f locustfile.py
測試結果 RPS=9.9 接近10