项目设计之初或者是项目快要结束的时候,大佬就会问我们,这个服务性能测试的结果是什么,QPS 可以达到多少,RPS 又能达到多少?接口性能可以满足未来生产环境的实际情况吗?有没有自己测试过自己接口的吞吐量,等等。
作为开发、测试人员,这些问题不仅仅是用来面试,还是实实在在的落地在实际工作中。很多项目上线初期用户量较小,表面上看是风平浪静,实则暗流涌动,慢慢的用户量上来之后,系统的瓶颈慢慢凸显。曾经挖的坑,最后还是要我们自己来填,若不能及时填上,可能整个产品就这么断送了。
今天一起来看看轻量级的性能测试工具 wrk 如何使用:
性能测试相关名词
- QPS每秒查询率 (Query Per Second):每秒查询率 QPS 是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
- 并发用户数:指系统可以同时承载的正常使用系统功能的用户的数量。
- 吞吐量 (Throughput):吞吐量是指系统在单位时间内处理请求的数量。
- 响应时间 (RT):指系统对请求作出响应的时间。
wrk 是什么?
wrk 是 github 的一个项目,地址:https://github.com/wg/wrk
根据官方的说明,wrk 是一个HTTP基准测试工具,当运行在单个多核CPU上时,它能够产生巨大的负载。它结合了多线程设计和可伸缩的事件通知系统,如 epoll 和 kqueue 等等。
wrk 中的一个可选的 LuaJIT 脚本可以执行 HTTP 请求生成、响应处理和自定义报告。
wrk 如何使用?
那么 wrk 如何使用呢,我们就来实操一下看看效果 , 既然是开源工具,下载安装编译的方式都很类似:
1、下载 wrk 项目
git clone https://github.com/wg/wrk.git wrk
2、编译项目
cd wrk make
3、将编译出来的 wrk 可执行程序放到用户自己的 bin 目录下
cp wrk /usr/local/sbin/
4、这个时候,我们就可以开始使用 wrk 工具了
咱们直接执行 wrk 来看看效果:
# wrk Usage: wrk Options: -c, --connections Connections to keep open // 和服务器建立连接并保持的 TCP 连接数量 -d, --duration Duration of test // 具体的压测时间 -t, --threads Number of threads to use // 使用的线程数量 -s, --script Load Lua script file // 加载 lua 文件 -H, --header Add header to request // 添加请求头 --latency Print latency statistics // 打印延迟统计数据 --timeout Socket/request timeout // 超时时间 -v, --version Print version details // 版本信息 Numeric arguments may include a SI unit (1k, 1M, 1G) Time arguments may include a time unit (2s, 2m, 2h)
上面的: N 表示数字参数,可以是 1k, 1M, 1G ;T 表示时间参数,可以是 2s, 2m, 2h
尝试使用 wrk 工具
我们使用 wrk 同样的参数来性能测试一下 掘金 和 百度的地址
200个链接,8个线程,测试 40 s
先测试掘金的:
# wrk -c200 -t8 -d40 --latency https://juejin.cn/ Running 40s test @ https://juejin.cn/ 8 threads and 200 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.53s 481.41ms 2.00s 87.68% Req/Sec 10.27 7.50 70.00 73.61% Latency Distribution 50% 1.67s 75% 1.85s 90% 1.95s 99% 2.00s 2406 requests in 40.05s, 476.65MB read Socket errors: connect 0, read 0, write 0, timeout 1797 Requests/sec: 60.08 Transfer/sec: 11.90MB
再测试百度的:
# wrk -c200 -t8 -d40 --latency https://www.baidu.com Running 40s test @ https://www.baidu.com 8 threads and 200 connections Thread Stats Avg Stdev Max +/- Stdev Latency 284.06ms 332.08ms 2.00s 86.02% Req/Sec 96.41 36.69 538.00 79.63% Latency Distribution 50% 120.17ms 75% 357.11ms 90% 730.79ms 99% 1.56s 31088 requests in 40.07s, 466.95MB read Socket errors: connect 0, read 138, write 0, timeout 264 Requests/sec: 775.87 Transfer/sec: 11.65MB
解释上面测试报告相关字段的含义:
- Latency 延迟
- Avg 平均值
- Stdev 标准差
- +/- Stdev 标准差占比
- Requests/sec 平均每秒处理的请求数,通常说的 qps 这里可以看出 掘金是 60.08 , 百度是 775.87 ,差别还是有的。
实践完毕之后,我们来捋一捋 wrk 的优势和劣势
优势:
- wrk 是轻量级性能测试工具,用起来非常方便,且安装也很简单,学习成本低;
- 根据官方介绍,我们知道 wrk 基于系统自带的高性能 I/O 机制,如 epoll, kqueue这些机制是利用异步的事件驱动框架 多路 IO 复用来提高并发性能的。
劣势:
- 仅支持单机压测,如果需要测试多台机器,wrk 就不合适了。
实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。
如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步
在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。
我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,
自动化测试视频教程、学习笔记领取传送门!!!