什么是压力测试?
压力测试
压力测试是在强负载(大数据量、大量并发用户等)下的测试,查看应用系统在峰值使用情况下操作行为,从而有效地发现系统的某项功能隐患、系统是否具有良好的容错能力和可恢复能力。压力测试分为高负载下的长时间(如24小时以上)的稳定性压力测试和极限负载情况下导致系统崩溃的破坏性压力测试。
通过压力测试,可以更快地发现内存泄漏问题,还可以更快地发现影响系统稳定性的问题。例如,在正常负载情况下,某些功能不能正常使用或系统出错的概率比较低,可能一个月只出现一次,但在高负载(压力测试)下,可能一天就出现,从而发现有缺陷的功能或其它系统问题。
压力测试的目的是什么?
目的:
量化考核服务器的性能指标(极限是多少并发访问量);
发现现有程序的不稳定因素;
等等
怎样进行压力测试?
测试工具
LoadRunner
ab
apache-jmeter:http://jmeter.apache.org/download_jmeter.cgi (开源)
JMeter 压力测试并发量简单示例
测试示例:本机服务器测试/xxx HTTP接口 最大并发量多少后,服务器会崩溃?
服务器(本机)配置示例
系统:windows 10; CPU: 3600X; 内存:16G …
线程数:1000; 循环次数:10; RudmTime: 10
在保证稳定的情况下,可以设置线程数递增 100,200,300…
或者设置循环时间 【永远】运行,当达到服务器负载极限时,即可以测试得到最大吞吐量TPS、QPS等数据
JMeter 执行顺序
配置元件
前置
定时器
sampler
后置
断言
监听器
如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的顺组依次执行
怎么写模拟用户使用的测试脚本?
- BadBoy录制脚本
- 代理
- 脚本语言自己编写
JMeter 参数化
配置元件 --> csv data
参数引用 ${ }
集合点:并发数
检查点:断言
随机值:${__Random(start_num,end_num,)}
示例:${__Random(1,10,)}
表示产生1-10的任意一个随机值(整型)
自增变量:使用Counter/计数器控件,鼠标右键添加 --> 配置元件 --> 计数器
动态关联
正则、xpath(一般xml的时候用得多)
图形监控扩展
JMeterPlugins.jar
http://jemter-plugins.org/downloads/all/
测试结果
1)反应出服务器性能:吞吐量、QPS、并发数等
2)修复系统缺陷
3)优化系统,提高执行效率