性能测试目的
-
测试系统最大处理能力
寻找系统最大的TPS,判断TPS和对应响应时间是否满足预期 -
测试系统支持最高并发
寻找系统最高能支持多少并发,当系统出现宕机、进程崩溃、报错率持续上升、响应时间超过可忍受范围、程序无响应等情况,即可认为系统达到了可支持的最高并发
性能测试场景
- 先进行单接口测试
- 再按照一定的并发比例,进行多接口混合测试
- 最后按照混合场景比例,进行长时间稳定性测试
注意: 同一个线程组内的接口,TPS都是一样的,故无强关联的接口分开不同的线程组
性能测试执行策略
-
加压策略
从小并发开始,逐步增加并发,寻找性能拐点 -
执行策略
试压阶段:寻找拐点,记录拐点数据
收集数据:选择拐点前后5组数据,按照固定时间(3-5分钟)重新跑一次,记录详细数据
性能拐点
并发数 | TPS | 平均响应时间(ms) |
---|---|---|
10 | 98 | 100 |
20 | 176 | 112 |
30 | 273 | 116 |
40 | 345 | 121 |
50 | 348 | 153 |
60 | 342 | 181 |
70 | 338 | 221 |
经过梯度压测,40并发时TPS达到拐点,所以40并发是本系统的最佳并发数
最终在测试报告中,记录下20、30、40、50、60五组数据即可
小Tips
在试压过程中,需要经常对并发数进行修改,如果压测机是Linux系统,其他机器修改再上传会比较麻烦,可以通过直接修改脚本的数据来实现修改
vi XX.jmx // 修改jmx脚本
...
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="插件" enabled="false">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">1</stringProp> // 循环次数
</elementProp>
<stringProp name="ThreadGroup.num_threads">1</stringProp> // 并发线程数
<stringProp name="ThreadGroup.ramp_time">1</stringProp> // ramp_time
<boolProp name="ThreadGroup.scheduler">false</boolProp> // 是否启用挑度器配置
<stringProp name="ThreadGroup.duration">60</stringProp> // 持续时间
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
...