Web接口压力测试python项目,通过项目学习Python
项目还在完善当中
- 压测脚本功能也调通
- 性能数据分析计算公式可能存在不足之处,或理解不充分,造成数据计算存在误差,欢迎指点纠正
- 打印信息如下:
-----------------------------------------------------------------------------
| |
| Web Api Pressure Data |
| |
-----------------------------------------------------------------------------
| Execute Time | 0.855 s | // 执行脚本时间
| Request Times | 100 | // 请求次数
| Request Times/Sec | 116.91586375299481 | // 每秒请求数
| Max Response Time | 755.041 ms | // 最大响应时间
| Min Response Time | 284.764 ms | // 最小响应时间
| Avg Response Time | 516.633 ms | // 平均响应时间
| Max TPS | 410.571 | // 最大TPS
| Min TPS | 154.847 | // 最小TPS
| Avg TPS | 226.304 | // 平均TPS
| 50% Line | 508.923 ms | // 百分之50请求响应时间之内
| 90% Line | 722.084 ms | // 百分之90请求响应时间之内
| 95% Line | 733.499 ms | // 百分之95请求响应时间之内
| 99% Line | 742.978 ms | // 百分之99请求响应时间之内
| Sent KB/Sec | 2.01 KB | // 每秒发送数据量
| Received KB/Sec | 3.86 KB | // 每秒接收数据量
| Slow Request Times | 100 | // 慢请求次数(响应时间大于200ms)
| Slow Request Rate | 100.00% | // 慢请求率
| Error Request Times | 0 | // 错误请求数
| Error Request Rate | 0.00% | // 错误请求率
-----------------------------------------------------------------------------
- pip install matplotlib
{
"es_library": {
"url": "http://172.17.21.21:8777/api/v1/find/data",
"c_params_method": "random_append_word",
"params": "",
"headers": "",
"warm_up": 100,
"req_number": 100,
"req_type": "get",
"req_time": 0,
"resp_data_handle": "medium",
"resp_show": "line"
}
}
处理json类: RequestData.py
- es_library: 测试方法描述,例子中是对es的词库压测,会根据这个key获取对应api的参数
- url: api地址
- c_params_method: 自定义生成body参数方法(可以看源码怎么使用)
- params: 如果不需要自定义生成body参数,则可以使用固定参数,{"key": "value"}
- headers: 请求头部参数,暂时没添加自定义头部参数,如需要可自行添加对应逻辑
- warm_up: 预热请求数量,执行压测前可以先进行预热请求
- req_number: 请求次数
- req_type: 请求类型(目前只支持get跟post)
- req_time: 指定多少秒内完成req_number请求,例如req_number: 100, req_time 10,则是10秒内完成100次请求,即每秒并发10个,不过也需要看压测机器的性能,比如req_number: 1000,req_time: 1则不一定能够在1秒内完成1000次请求
- resp_data_handle: 响应数据处理类型(low: 只展示最小,平均,最大响应时间、medium: 数据长度小于50则跟high相同,否则按数据长度的百分之10展示、high: 不处理,全部展示) resp_show: 响应数据绘图类型(目前只支持bar跟line)
新增功能:
- 增加压测数据结果保存
- 增加压测数据结果分析打印
压测数据结果json数据保存如下:
{
"es_library": [
{
"max_resp_time": "991.408", // 最大响应时间
"min_resp_time": "0.397", // 最小响应时间
"avg_resp_time": "694.399", // 平均响应时间
"max_tps": "225334.407", // 最大TPS
"min_tps": "90.233", // 最小TPS
"avg_tps": "128.828", // 平均TPS
"slow_query": 96, // 慢查询次数
"error_query": 0 // 错误次数
},
{
"max_resp_time": "998.033",
"min_resp_time": "15.757",
"avg_resp_time": "520.012",
"max_tps": "1481.126",
"min_tps": "23.384",
"avg_tps": "44.880",
"slow_query": 61,
"error_query": 0
},
{
"max_resp_time": "788.995",
"min_resp_time": "141.997",
"avg_resp_time": "502.880",
"max_tps": "181.614",
"min_tps": "32.685",
"avg_tps": "51.282",
"slow_query": 98,
"error_query": 0
},
{
"max_resp_time": "997.211",
"min_resp_time": "4.705",
"avg_resp_time": "446.570",
"max_tps": "3206.471",
"min_tps": "15.129",
"avg_tps": "33.783",
"slow_query": 73,
"error_query": 0
},
{
"max_resp_time": "998.722",
"min_resp_time": "4.284",
"avg_resp_time": "412.863",
"max_tps": "10263.045",
"min_tps": "44.023",
"avg_tps": "106.493",
"slow_query": 52,
"error_query": 0
}
]
}
压测结果数据目前只保持最新5次,如果有需要更多的可以修改源码
+---------------+-------------------------+---------------------+---------------------+---------------------+-----------+
| key_type | index[4] | index[3] | index[2] | index[1] | index[0] | // json数组下标对应性能数据
+---------------+-------------------------+---------------------+---------------------+---------------------+-----------+
| max_resp_time | 991.408(+7.314) | 998.033(+0.689) | 788.995(+209.727) | 997.211(+1.511) | 998.722 | // 括号中是index[0]压测数据对比前几次的结果
| min_resp_time | 0.397(+3.887) | 15.757(-11.473) | 141.997(-137.713) | 4.705(-0.421) | 4.284 |
| avg_resp_time | 694.399(-281.536) | 520.012(-107.149) | 502.880(-90.017) | 446.570(-33.707) | 412.863 |
| max_tps | 225334.407(-215071.362) | 1481.126(+8781.919) | 181.614(+10081.431) | 3206.471(+7056.574) | 10263.045 |
| min_tps | 90.233(-46.210) | 23.384(+20.639) | 32.685(+11.338) | 15.129(+28.894) | 44.023 |
| avg_tps | 128.828(-22.335) | 44.880(+61.613) | 51.282(+55.211) | 33.783(+72.710) | 106.493 |
| slow_query | 96(-44) | 61(-9) | 98(-46) | 73(-21) | 52 |
| error_query | 0(0) | 0(0) | 0(0) | 0(0) | 0 |
+---------------+-------------------------+---------------------+---------------------+---------------------+-----------+