on_start:开始前执行;
on_stop:结束后执行。
这两个方法可以帮助我们在进行性能测试时,把一些前置操作和后置处理进行规范化管理。例如在on_start获取登录的token,在on_stop清理运行产生的冗余数据。
locust脚本源码:my_locust.py
from locust import HttpUser, task, between
import logging
class QuickstartUser(HttpUser):
wait_time = between(1, 2) # 为方便运行,缩短了一点点时间。
@task
def hello(self):
self.client.get("/hello")
@task(3)
def world(self):
self.client.get("/world")
def on_start(self):
login_result = self.client.post("/login", json={"username": "Tom", "password": "123456"}).text
logging.info(f"login_result:{login_result}")
def on_stop(self):
logout_result = self.client.post("/logout", json={"username": "Jim", "password": "456789"}).text
logging.info(f"logout_result:{logout_result}")
服务端sanic源码:main.py
from sanic import Sanic
import datetime
from sanic import response
app = Sanic('myapp')
@app.get('/hello')
def handle_request(request):
time = str(datetime.datetime.now())[:-7]
return response.json({"hello time": time})
@app.get('/world')
def handle_request(request):
time = str(datetime.datetime.now())[:-7]
return response.json({"world time": time})
@app.post('/login')
def handle_request(request):
time = str(datetime.datetime.now())[:-7]
data = request.json
print(f"{data}")
if data:
if data["username"] == "Tom" and data["password"] == "123456":
return response.text("{} login success".format(data["username"]))
else:
return response.json({"login time": time})
@app.post('/logout')
def handle_request(request):
time = str(datetime.datetime.now())[:-7]
data = request.json
print(f"{data}")
if data:
if data["username"] == "Jim" and data["password"] == "456789":
return response.text("{} logout success".format(data["username"]))
else:
return response.json({"logout time": time})
if __name__ == "__main__":
app.run(host="127.0.0.1", port=7890, auto_reload=True)
再次运行:
1、命令行执行:locust -f my_locust.py
2、打开http://localhost:8089/。
3、用户数,孵化率,host分别输入1,1,http://127.0.0.1:7890
4、点击运行
服务端:可以看到在点击运行后,服务端接收到了on_start发起了登录的请求。
客户端:接收到了登录成功的响应。
locust-ui点击停止运行:
服务端:可以看到在点击结束运行后,服务端接收到了on_stop发起了退出登录的请求。
客户端:接收服务端退出登录的响应。
on_start和on_stop:在单次前后,每次运行有且仅有运行1次。
以上,即on_start和on_stop的解析和案例说明。
微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!