第一次压力测试
2022年3月2日
第一次压力测试
参考文档
https://httpd.apache.org/docs/current/programs/ab.html
测试工具及环境
工具: Apache AB
环境: Linux CentOS 7
测试方法
- 使用ab在服务器测试
- 并发数量为二的次幂增长
- 当QPS断崖式下降、接口错误率超过50%、接口平均响应时间过长则停止测试
测试的目的
- 测试接口吞吐量
- 测试接口响应时间
- 测试接口稳定型
安装命令
yum -y install httpd-tools
常用参数介绍
参数 | 用途 |
---|---|
-n | 总共的请求执行数,默认是1 |
-c | 并发数,默认是1 |
-t | 测试所进行的总时间, 秒为单位 |
-p | POST请求时的数据文件路径 |
-T | 用于POST/PUT数据的内容类型标头, 例如application/x-www-form-urlencoded, 默认值为text/plain |
-H | 请求头,多个请求头可使用多个-H参数 |
-v | 打印响应内容,请求头和响应码, 设置3将显示响应代码(404、200等), 2将显示警告和信息。 |
-p 需要配合 -T使用 |
示例
ab -p "/xx.txt" -T "application/json" -H "请求头" -t 持续时间 -c 线程数量 需要测试的api接口
响应内容介绍
参数 | 用途 |
---|---|
Server Software | 请求返回header类型,可能是nginx、apache、IIs等 |
Server Hostname | 请求ip或者域名 |
Server Port | 请求端口,当前请求为https所以端口为443,请求https端口80 |
SSL/TLS Protocol | https端口协议 |
Document Path | 路径 |
Document Length | 第一个成功返回的文档的字节大小 |
Concurrency Level | 并发数 |
Time taken for tests | 从建立连接到最后接受完成总时间 |
Complete requests | 总请求数成功的 |
Failed requests | 失败的数量 |
Total transferred | 从服务器接收的字节总数 |
HTML transferred | HTML接收字节数 |
Requests per second | 每秒请求数(总请求数/总时间) |
Time per request | 服务器处理每个请求平均响应时间 |
警告
Failed requests的数量统计有异议,有时候返回了响应内容和响应码200依然会统计为失败
请求失败原因
失败类型 | 用途 |
---|---|
Connect | 无法送出要求、目标主机连接失败、要求的过程中联机被中断 |
Length | 响应的内容长度不一致 (以 Content-Length 标头值为判断依据) |
Exception | 发生无法预期的错误 |
而从上述说明就可以很明显看出所有的 Failed requests 都落在 Length 这个类别上,原来这是因为受测网站的首页是动态的内容,当第一次发出 HTTP request 与后续发出的 HTTP request 所得到回应的 HTML 长度都是不同大小的 ( 每次回应的 Content-Length 大小不一致 ),才会引发 Failed requests 的 Length 问题的失败,因此这类 Length 不一致的失败在进行「动态网页」压力测试时是合理的,可以不予理会。 |
统计方法
Excel统计并画出折线统计图
总结
由于是第一次进行压力测试, 统计数据方式和测试方法不够科学且统计的信息不够完整, 测完一个接口并统计数据就花费很长时间, 命令行的压测工具测试数据准备也比较麻烦, 总体来说虽然费事费力但为后面性能测试的深入了解与学习起了一个良好的开端