谢春花的歌
https://link.jscdn.cn/sharepoint/aHR0cHM6Ly9oa3VzdGNvbm5lY3QtbXkuc2hhcmVwb2ludC5jb20vOnU6L2cvcGVyc29uYWwvamNoZW5mbF9jb25uZWN0X3VzdF9oay9FVThfNm53Y1ZSQkVtc1FCdzY1WDJnNEJmcnhjaXBrSDdKZHZvWWg2R1Z0ekR3P2U9QUh6cWhP.mp3
什么是locust?
locust是一个简单易用的分布式负载测试工具,主要用来对网站进行负载压力测试。locust使用python语言开发,测试资源消耗远远小于java语言开发的jmeter。且其支持分布式部署测试,能够轻松模拟百万级用户并发测试。
什么是性能测试
性能测试目的主要是解决三个问题:
- 系统及服务能承受的最大负载是多少 ?
- 有没有性能平瓶颈 ?
- 如果有性能瓶颈,瓶颈在哪里?
这三个问题需要从测试的结果中分析得出,其中最重要的性能指标有三点:
(1)响应时间
(2)吞吐量
(3)成功率
传统的性能测试工具有很多, 比如 **Apache Bench、JMeter、LoadRunner **等等,它们都能用来持续增加压力。
不过,Apache Bench 之类的专用工具用来做简单的 HTTP 接口测试还行,如果需要做业务接口的串联测试就力有未逮了。
**JMeter **当然功能强大,也有一定的扩展性,但在这节课我并不想用 JMeter , 原因有两点,一是因为 JMeter 是资源消耗黑洞, 每个任务 / 用户都要使用一个线程,二是因为 JMeter 是基于配置的。
相比之下,新一代的性能测试工具 ** Locust** (蝗虫)是基于编程来实现测试用例的性能测试工具,它更加灵活。而且,它使用 Python 代码来定义用户行为,用写 Python 代码的方式来写测试脚本,远离了复杂的配置脚本和图形界面,利用强大而丰富的 Python 类库可以轻松支持各种协议,简单易用,扩展方便。
locust优缺点
优点:
1.不同与wrk和jmeter使用线程数提高并发量,locust借助于协程实现对用户的模拟,相同物理资源(机器cpu、内存等)配置下locust能支持的并发用户数相比jmeter可以提升一个数量级 2.相比wrk对复杂场景测试的捉襟见肘和jmeter需要界面点击录制复杂场景的麻烦,locust只需用户使用python编写用户场景完成测试 3.不同与jmeter复杂的用户使用界面,locust的界面干净整洁,可以实时显示测试的相关细节(如发送请求数、失败数和当前发送请求速度等) 4.locust虽然是面向web应用测试的,但是它可以用来测试几乎所有系统。给locust编写一个客户端,可以满足你所有的测试要求
缺点:
1.同wrk一样,locust测试结果输出不如jmeter的测试结果展示类型多
运行
运行脚本如下:
from config.config_read import read_yml_file, read_test_data
from locust import HttpUser, task
headers = read_yml_file('./config/config.yml')['headers']
params = read_test_data('./config/test_data_process.yml', 'findByPidAndStatusActive')[0]
class Quickstart(HttpUser):
min_wait = 100 # 最小等待时间(ms),模拟用户在执行每个任务之间等待的最小时间
max_wait = 500 # 最大等待时长(ms),模拟用户在执行每个任务之间等待的最大时长
host = read_yml_file('./config/config.yml')['baseurl'] # 访问的域名
def on_start(self):
#开始任务
print("start working")
# 任务target,用@task标记
@task
def mytask(self):
self.client.get('/process/findByPidAndStatusActive', headers=headers, params=params)
- 运行脚本方法:
locust -f ***.py
-f 指定脚本文件路径
- 访问locust UI界面
Starting web interface at http://0.0.0.0:8089 (accepting connections from all network interfaces)
-
模拟用户访问
指定模拟的用户数(Number of users),以及孵化率(Spawn rate,每秒增加的用户数), 以及所要测试的服务器地址(Host)。
-
查看结果 RPS(Request Per Second): 每秒请求数的变化,它反映了吞吐量 Number of Users, 用户并发数量的变化, 它反映了系统能承受的并发请求吞吐量 Response Time 响应时间的变化