Locust安装使用:
安装:
python3中 ---> pip3 install locust
验证是否安装成功---> 终端中输入 locust --help 显示帮助信息表示安装成功
大并发量测试时,建议在linux系统下进行;
启动:
终端中--->进入到代码目录: locust -f xxxoo.py --host=xxxxx.com
-f 指定性能测试脚本文件
-host 被测试应用的URL地址【如果不填写,读取继承(HttpLocust)类中定义的host】
通过浏览器访问:http://localhost:8089(Locust启动网络监控器,默认为端口号为:8089)
Number of users to simulate 设置虚拟用户数
Hatch rate(users spawned/second)每秒产生(启动)的虚拟用户数 , 点击Start swarming 按钮,开始运行性能测试。
no-web模式运行启动
终端中-->进入代码目录:>> locust -f xxoo.py --no-web -c10 -r2 -t 1m
启动参数:
--no-web 表示不使用web界面运行测试。 -c 设置虚拟用户数 。 -r 设置每秒启动虚拟用户数 。 -t 设置运行时间.。
no-web模式运行将测试结果保存到当前.py目录中:locust -f xxoo.py --csv=起一个名字
例如:
locust -f test3.py --csv=foobar --no-web -c2 -t10s
分布式压测:
主从机中必须运行相同的测试代码(把主机中代码复制一份到多个从机中),主机负责收集测试数据,从机进行施压测试;
在主机终端中-->进入代码目录:>> locust -f xxxoo.py --master
从机中终端中-->进入代码目录:>> locust -f xxxoo.py --slave --master-host=主机ip
分布式压测no-web模式保存结果到主机中当前运行.py的目录中:>>locust -f test2.py --csv=foobartt --no-web -c2 -t10s --master
locust --help 查看帮助信息
概述
Locust寓意蝗虫,蝗虫过境,寸草不生;而Locust工具生成并发请求就和一大群蝗虫一般,向我们的被测系统发起攻击,以此测试系统在高并发压力下是否能正常运转。
Locust测试框架中,采用python进行开发,对常见的http(s)协议的系统,Locust采用request库作为客户端,在发请求时和request库使用方法一样。
在模拟并发时,Locust采用协程、非阻塞IO来实现网络层的并发请求,因此单台压力机也能产生数千并发请求,再加上对分布式运行的支持,Locust能在使用较少压力机的前提下支持极高的并发数测试。
实例脚本
伪代码:
from locust importHttpLocust, TaskSet, task
classWebsiteTasks(TaskSet):
defon_start(self): #进行初始化的工作,每个Locust用户开始做的第一件事
payload ={
"username": "test_user",
"password": "123456",
}
header ={
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
}
self.client.post("/login",data=payload,headers=header)#self.client属性使用Python request库的所有方法,调用和使用方法和requests完全一致;
@task(5) #通过@task()装饰的方法为一个事务,方法的参数用于指定该行为的执行权重,参数越大每次被虚拟用户执行的概率越高,默认为1
defindex(self):
self.client.get("/")
@task(1)
defabout(self):
self.client.get("/about/")
classWebsiteUser(HttpLocust):
host ="https://github.com/" #被测系统的host,在终端中启动locust时没有指定--host参数时才会用到task_set =WebsiteTasks #TaskSet类,该类定义用户任务信息,必填。这里就是:WebsiteTasks类名,因为该类继承TaskSet;
min_wait = 5000 #每个用户执行两个任务间隔时间的上下限(毫秒),具体数值在上下限中随机取值,若不指定默认间隔时间固定为1秒max_wait = 15000
伪代码中对https://github.com/网站的测试场景,先模拟用户登录系统,然后随机访问首页/和/about/,请求比例5:1,并且在测试过程中,两次请求的间隔时间1-5秒的随机值;
on_start方法,在正式执行测试前执行一次,主