前面我们介绍了Jmeter中的8种测试元件,实际测试工作中,我们的整个测试计划就是基于这些测试元件和其嵌套关系编写的。这篇笔记我们以一个完整的例子作为参考,演示常见的测试逻辑脚本编写,包括配置元件、采样器、逻辑元件的简单组织和使用。
使用Jmeter时,我们需要首先创建Test Plan(测试计划)。
其中,Name就是我们测试计划的名字,Comments是一些介绍信息。
User Defined Variables这一栏中,我们定义可以整个测试计划可用的变量,测试计划内其它元件可以引用这些变量。
勾选Run Thread Groups consecutively表示串行执行所有的线程组,也就是说如果我们的测试计划中有多个线程组,它们会一个接一个的执行;而如果不勾选该项,它们会并发执行。这个配置比较重要,有时我们需要一个接一个的接口测试,有时我们又需要全部接口并行测试模拟真实的线上环境,两种场景都很常见,这块需要根据我们的需求进行选择。
创建好测试计划后,我们需要在测试计划内部创建线程组。一般来说,一个线程组对应对应一个操作场景,内部包含一个或几个相关联的具体接口调用。
其中,Number of Threads是使用的线程数,也可以理解为客户端对服务器的并发请求数量。Loop Count是每个线程循环调用几次,如果该值不为1时,一个线程会在一次调用完后继续调用,直到达到指定循环次数,这里如果勾选Infinite就会一直不停的执行。
Ramp-up period告知Jmeter要在多少时间内创建所有的线程,例如10个线程指定100内秒启动,那么第一个线程会在0秒创建,第二个线程会在10秒创建,以此类推,默认不指定为0,但因为线程创建也是有开销的,进行高并发量的测试时指定为0可能并不合理,我们需要根据实际负载机的个数、硬件配置等情况具体分析。
创建好线程组后,我们就可以在线程组内部创建采样器了。
对于最简单的情况,例如我们只对1个HTTP接口进行压力测试,那么只创建1个采样器就可以了。Jmeter提供了很多种采样器,支持HTTP、FTP、JMS、数据库(JDBC)、TCP等各种协议,不过实际工作Jmeter还是主要用于HTTP接口的测试。有关采样器的具体配置,由于每种采样器都完全不同,这些内容将放在后文介绍。
实际工作中可能有一些复杂的情况,考虑这样一个例子:我们从CSV文件中读取用户ID,先调用“查询用户信息接口”获取用户类型,然后根据返回结果分别调用接口0或接口1,此时就需要用到CSV配置元件和IF逻辑控制器。
CSV配置元件中,我们指定读取的CSV文件路径,格式信息,保存的变量名等数据。
2个IF控制器中,我们编写了需要判断的表达式。
注:上面IF控制器中,使用了${__groovy()}
函数助手,它用于将表达式转换成值。
按照以上配置,就可以实现上述调用逻辑了。
Jmeter中,原版常用的两种监听器就是查询结果树和聚合报告了。我们将其创建到线程组下,就可以监听这个线程组的日志结果,生成我们需要的报告。
其中查询结果树显示了线程组发起的每一次请求的响应时间、请求体、响应体等信息,聚合报告则输出了线程组的统计结果,包括最长响应时间、响应时间平均值等。