纯python脚本模拟多用户并发的劣势
1.据Threading其实是假并发
2.线程开销大,可能因本机cpu限制无法拉起大量线程
什么是locust?
locust是一个简单易用的分布式负载测试工具,主要用来对网站进行负载压力测试。locust使用python语言开发,测试资源消耗远远小于java语言开发的jmeter。且其支持分布式部署测试,能够轻松模拟百万级用户并发测试。
locust优缺点
优点:
1.不同与wrk和jmeter使用线程数提高并发量,locust借助于协程实现对用户的模拟,相同物理资源(机器cpu、内存等)配置下locust能支持的并发用户数相比jmeter可以提升一个数量级
2.相比wrk对复杂场景测试的捉襟见肘和jmeter需要界面点击录制复杂场景的麻烦,locust只需用户使用python编写用户场景完成测试
3.不同与jmeter复杂的用户使用界面,locust的界面干净整洁,可以实时显示测试的相关细节(如发送请求数、失败数和当前发送请求速度等)
4.locust虽然是面向web应用测试的,但是它可以用来测试几乎所有系统。给locust编写一个客户端,可以满足你所有的测试要求
缺点:
1.同wrk一样,locust测试结果输出不如jmeter的测试结果展示类型多
locust的安装
使用pip,具体的镜像加速下载可参考CSDN
下载成功后会显示打印version
locust脚本的编写:以多用户并发登录-购买-查询订单为例
具体场景和预期结果如下:
场景:100个用户,不使用特权优惠下单,创建订单
预期结果:都能创建订单成功,总金额正确
step1:提前配置测试用户和商品的信息
这里之所以通过Queue阻塞队列的原因是,若不加以限制,locust会无限制地调用定义好的任务;因此,如果我们不希望无限次调用接口,我们可以使用Queue的get方法获取用户信息,当队列为空会抛出异常,进而直接退出task
step2:编写用户行为类(httpUser)
on_start会在执行所有任务前进行初始化操作
on_stop会在执行完所有任务(或强制退出)后进行清理操作
step3:具体并发逻辑的实现
1.标上@task,以及备用的header
2.在有限范围内获取用户信息:
中间使用log进行日志打印
3.调用登录接口,并配置token给header:
通过assert断言判断response是否正常
拉起locust服务(配置参数与查看报告)
1.首先打开cmd,去到脚本对应的目录下,使用如下命令可执行相关脚本(并打印日志)
locust -f scene1.py --logfile logs/scene1.txt
注意-f传的是脚本的名字,然后logfile传的是日志的位置
2.打开http://localhost:8089/并配置参数,共有三个参数,由上到下分别是:
需要拉起的协程数,每秒生成的协程数,Host地址
3.开始执行,执行一段时间后停止,可以看到相关数据,如:
这里我们以20用户并发为例
可以看到登录-下单-查询接口都各被调用了20次
4.下载report
report当中会有更详细的数据,如RPS图,RT图,User图,异常信息记录等:
对于代码中的assert断言,如果不满足就会在exception中抛出从而方便抓取
另一方面我们也可以结合日志查看分析相关的异常
总结
locust除了上述的复杂流程的接口测试
还可使用于多个无关联接口的随机测试(这里就无需限制调用次数)
通过查看日志可以发现,它的并发时间差是很小的
不像threading需要执行很长时间(实质上没有很好地模拟并发)
版权归原作者 白速龙王的回眸 所有, 如有侵权,请联系我们删除。