写在前面
本文目的主要是对最新版本的locust使用介绍,以及与老版本的比较介绍。
因为网上搜到的代码放在新版本下运行,会报错,原因就是 版本1.0 开始,locust 改动还是蛮大的
具体改动,官网也有介绍:https://docs.locust.io/en/latest/changelog.html
关于locust 的测试介绍,与jemter, robotframework 比较,一搜一大堆,不再赘述。总之,是一个基于Python 编写的一个 easy-to-use, distributed, user load testing tool
使用说明
环境配置
win10
python 3.8
locust 1.1
安装
最好使用linux, windows performance 在运行大规模测试时肯定是不好的。
说回windows环境安装。纠结一下,还是要说一下安装,因为可能会安装失败,按照官方文档
pip install locust
(对,没错,不是网上搜到的 pip install locustio了,已统一为此命令)如果失败, 可以去下载一个.whl的文件,按照官方文档来:
-
如果还是失败(我就是),应该是缺少Microsoft Visual C++,网上找了一个问题汇总,里面就有Microsoft Visual C++的安装包,链接如下:
https://blog.csdn.net/qq_41752647/article/details/105744798
至此,安装成功
使用
首先,我们把官方示例拿过来,加一个装饰器,然后解读
# locustfile.py
import random
from locust import HttpUser, task, between
class QuickstartUser(HttpUser):
wait_time = between(5, 9)
@task
def index_page(self):
self.client.get("/hello")
self.client.get("/world")
@tag('1', '2')
@task(3)
def view_item(self):
item_id = random.randint(1, 10000)
self.client.get(f"/item?id={item_id}", name="/item")
def on_start(self):
self.client.post("/login", {"username":"foo", "password":"bar"})
如何启动上面的脚本
关于命名.py文件:默认叫做locustfile.py ,这样,你在运行时,直接终端输入
locust
即可启动locustpy文件可以改成你想要命名的名称,比如:locust_test.py ,这样,在运行时,终端输入就要改成:
locust -f locust_test.py
其他参数输入,可以使用在终端输入
locust --help
来查看,如下截图为单机使用时,常用的几个,其他的可自行查看,从此处也可以看到一些参数的变化
代码说明
继承不再是HttpLocust 而是:HttpUser , 能够直接在User类下声明@task。
wait_time 属性可设置用户在下一个请求与这个请求之间sleep的时间,最常使用的是between, between的两个参数,是最大和最小等待时间,而wait_time 会从这个区间中随机选择等待时间。更多wait_time 的参数可参考:https://docs.locust.io/en/latest/writing-a-locustfile.html#wait-time
·
self.client.get(f"/item?id={item_id}", name="/item")
name 的话,会指定,此请求只属于/items下,因为如上述代码,如果不指定/items 则locust 会统计10K的单独的请求,这个是不合理的。self.client
可以看到,源码或者官方文档有介绍self.client=session, session=requests.Session()
, 所以,self.client 和requests 有一样的方法, 同样也可以session保持。-
on_start
方法, 是在一开始执行时,会执行的一个方法,并且只执行一次,和它对应的还有一个on_stop
,是在执行结束后调用的,应用场景:login, logout5.1 PS: 移除了 Locust.setup、 Locust.teardown、 TaskSet.setup、 TaskSet.teardown,改用 on_test_start、on_test_stop
@tag(*tags)
装饰器的作用就是在执行时,使用-T 或者--tags 1
此时,将测试限制为仅执行使用-tags命令行参数提供的任何标记标记的任务
TaskSet
那TaskSet如何使用呢? 之前版本的继承TaskSet, 现在测试时,运行会报错,之前的代码与更新如下:
from locust import HttpLocust, TaskSet, task
class LocustTest(TaskSet):
@task
def test(self):
self.client.get("/")
class Locust_Test(HttpLocust): # 继承修改为 HttpUser
task_set = LocustTest # task_set 修改为:tasks = [LocustTest],为列表或者字典
host = "https://www.baidu.com"
min_wait = 1000
max_wait = 2000
查看结果
localhost:8089 查看结果暂未发现巨大变化
其他变化
还有些变化,这里不详细列出来,其实都可以在官方文档找到,主要使用中用到的大概变化就这些
总结
1.0.* 之后的版本,有变化,但是,如何使用基本还是一致的,因为网上搜到的很多还是1.0.* 之前的版本的使用方法,所以,以此记录此次学习,要读官方文档。
官网地址:https://docs.locust.io/en/latest/quickstart.html