一般情况下,我们提压力测试,通常指是指负载测试和压力测试.
我们做压力测试,基本上会使用到工具进行测试,我常用的工具,一个是jmeter,另外一个是loadRunner。我先介绍一下jmeter吧,jmeter是Apache组织开发的基于java的压力测试工具,支持接口测试,压力测试,还可以做录制回放操作,操作比较简便。
List item
整体流程
我先说一下JMeter的操作的整体流程吧,我们测试的时候,通常是创建一个线程组,指定并发的线程数量,然后指定要测试的接口,创建相应的监听器,比如表格结果,结果树和聚合报告信息,通过监听器来监听测试是否通过或者接口是否存在什么问题
其中在结果树中可以监测到整体的请求信息,就拿Http请求这种来讲,其实就是整个http协议的所有信息,包括请求头,请求参数,请求路径,还有响应头,响应结果等信息。
对于表格查看结果,可以看到每个请求的简单信息,本次请求的时间,以及平均的时间。
在聚合报告中,我们就可以看到整体的信息了。比如可以看到平均响应时间,90%Line 也就是90%的用户请求低于的时间。还有吞吐量 TPS,还有错误率,还有用流量来计算的吞吐量。这些都可以看到。通常,聚合报告就是反应整体的数据。
Jmeter参数化
做压力测试时,我们经常需要替换参数,在Jmeter中,有多种参数化的形式。可以在测试计划中设置全局参数,可以设置用户参数,还可以在前置处理器中设置用户参数。在进行多线程并发的时候,如果需要多个参数,可以使用csv配置元件。比如做登陆操作,后台有可能会限制一个用户不能重复登陆多次,如果演示登陆的并发操作,可以使用Jmeter中csv配置元件,将用户信息导出来,放到文件中,就可以让线程共享这些数据。另外,对于一些随机变化的参数,可以使用Jmeter中的函数助手,生成随机函数,进行参数化测试。比如注册这样的操作,用户名要求唯一的,那就可以使用随机函数来模拟出来。
Jmeter断言-检查点
在测试中,断言操作经常用到,jmeter的断言操作可以在请求后边设置一个断言结果,判断响应结果或者是响应状态码是否和预期的一致。
Jmeter逻辑控制器
在Jmeter中,逻辑控制器的应用比较广泛,我们可以把一组操作放到简答控制器中,用来声明范围。也可以设置循环控制器,比如我们注册1次,登陆10次,就可以使用循环控制器。还有事务控制器,对于一个完整的事务,可以使用事务控制器来控制。
Jmeter定时器
在Jmeter中定时器类型也比较多,我们会经常用到固定定时器,可以设置启动线程组的延迟时间是固定的。
还有高斯定时器,这种时间是可以设置随机值。另外,还有同步定时器,同步定时器可以用来做集合点,比如设置某个线程数,等并发到了该线程值的时候,才开始执行并发任务。
Jmeter后置处理器
对于Jmeter后置处理器,我们常用到的是正则表达式提取器,可以用来提取上一个请求的响应结果,用在下一个请求中。比如项目中会有条目展示,如果我们想要继续查看详情,就需要提取条目id,用来做下一个请求。这里还可以用到foreach循环控制器来完成。
Jmeter插件
对于Jmeter插件,常用的有场景设计插件,这个还是非常不错的一个功能。我们创建线程的时候,会设置线程组,而线程组太死板,不灵活。可以安装场景控制的插件,比如一开始延迟启动多少线程,如何递增启动线程,线程总数多少,总的测试时间多长,都可以使用场景控制插件来完成。
对于结果监听,结果树,表格,聚合报告都不够直观,我们可以通过安装图表插件来进行结果收集。看起来更加直观一些。比如可以获取到每秒事务量的图表,获取到平均响应时间的图表,都比较人性化。
这里有一点需要注意,就是监测服务器数据的时候,需要在服务器上启动一个插件,serverAgent,才能看到服务器的cpu和内存等数据。
Jmeter脚本录制
对于Jmeter脚本录制,我掌握的有两种方式,第一,可以使用Jmeter内置的http代理服务器录制脚本,这种配置方便,但是会录制无用信息。不过好处式可以录制手机端的请求。
也可以使用第三方工具,badboy录制,这种录制相对人性化一些,也会过滤掉一些请求,比如jpg,css等。
Jmeter数据库压力测试
有些时候,还会用到Jmeter去压测数据库,当然我们不会随便压测数据库。一般是当我们压测接口的时候,发现某个接口性能比较差,再进一步判定问题的时候,会压测数据库。
压测数据库,需要配置驱动,需要设置连接池大小,需要使用sql去操作数据库。如果我们想要看具体的哪条sql问题的话,还需要从开发那里拿到具体的sql进行压测。
NON GUI形式测试
所谓non GUI,就是我们不需要通过页面进行测试,这个也是我们推荐的测试方式,会提高测试机性能。或者在linux上,我们也没法打开图形化页面,就可以使用NON GUI形式的指定进行。
可以指定脚本,可以指定生成jtl文件的位置,还可以生成html报告文档。
Jmeter -n -t xxx.jmx(脚本文件) -l xx.jtl(生成结果文件) -e -o xxx.html
Jmeter分布式压力测试
在进行压测的时候,如果我们进行大并发的压测,往往一台测试机是达不到这么高的并发量的。那就可以使用分布式压测方式,设置一台控制器,然后几台压力机,咱们通常叫“肉鸡”,进行压测,这种压测也并不复杂,只需要做一些简单配置。
比如在肉鸡身上配置连接的端口,配置启动jmeter-server,就可以被连接测试了。在控制机master上我们,关联上肉鸡的ip和端口,就可以控制肉鸡进行分布式压力测试了。
作者:软件测试开发-虚竹
原文链接:https://blog.csdn.net/shuaigezhou10086/article/details/114677784