locust2.0+教程:004 - 等待时间和执行权重
2021-09-02 本文已影响0人
玩转测试开发
wait_time:等待时间,是指用户在每个任务执行后等待多少时间,等待时间可以促使性能测试更贴近实际中的场景,单位为秒。例如wait_time = between(2, 5)表示等待2-5秒之间,选择的值是随机的,我们可以通过查看详情源码中包含:random.random()得知。
def between(min_wait, max_wait):
"""
Returns a function that will return a random number between min_wait and max_wait.
Example::
class MyUser(User):
# wait between 3.0 and 10.5 seconds after each task
wait_time = between(3.0, 10.5)
"""
return lambda instance: min_wait + random.random() * (max_wait - min_wait)
@task:执行权重。@task修饰的方法是locust文件的核心。通过用@task修饰方法声明任务,方法的权重更高,被选择执行的概率就越高,长期运行后,执行的比例趋向于@task装饰的比例。对于每个正在运行的用户,locust都会创建一个greenlet(微线程),用于调用这些方法。以下面的案例为例。get("/hello")的装饰权重为1,get("/world")的装饰权重为3,则,运行的时候,大致会按1:3的执行次数进行。
locust脚本源码:my_locust.py
from locust import HttpUser, task, between
class QuickstartUser(HttpUser):
wait_time = between(2, 5)
@task
def hello(self):
self.client.get("/hello")
@task(3)
def world(self):
self.client.get("/world")
服务端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})
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、点击运行
服务端具体运行情况:我们就可以看到,等待时间都是在2-5秒之间。
并且hello的请求次数和world的请求次数大致为1:3。
locust客户端:hello的请求次数和world的请求次数大致也是1:3。
图片以上,即wait_time和@task的解析和案例说明。
微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!