做压力测试的时候为了模拟多个用户同时访问的效果,经常会使用调整线程数这种方法,但之前压测的时候会发现一个有趣的事情,当线程内部的结构不同时,使用线程组循环时会达成不一样的效果。

一、线程组+循环控制器内部循环         

即线程内部循环去获取外部变量,配合线程组模拟多个用户去循环查询同一个接口,脚本结构如下:

jemeter的html报告中线程名重复 jmeter线程循环_接口测试

这个时候去查看表格结果会发现查询的顺序其实是:接口->性能->页面->接口...进行查询的  

jemeter的html报告中线程名重复 jmeter线程循环_性能测试_02

二、线程组+三个查询接口

去除外部变量,将三个变量填入请求中。结构如下(线程数为10,此循环控制器循环次数为1):

jemeter的html报告中线程名重复 jmeter线程循环_性能测试_03

此时运行会发现查询的顺序是:10个线程同时去访问“接口测试”,当其中给某个线程完成这个接口请求后再去发送下一个"性能测试"的接口,依次查询到全部返回数据。整体还是呈现出 10个接口 - > 10个性能 - > 10个页面 这种顺序。

jemeter的html报告中线程名重复 jmeter线程循环_接口测试_04

 

疑问:一中的循环理论上是实现了二中三个请求的参数化,但是将两个循环放入多个线程的情况下,查询的顺序却大不相同,感觉很奇怪。

查询后发现是一中在设置CSV文件线程共享模式时,将模式设置为了当前线程组 ,而jmeter中当多个线程使用同一个文件内获取外部参数时,参数值会向后顺沿,比如当10个线程同时去文件中取值,那么第一个线程取到的keyword值为“接口测试”,第二个线程取到的值则是“性能测试”,第三个线程取到的则是“页面测试”如此循环。所以在10个线程运行时查询顺序会变为接口->性能->页面->接口...,而将共享模式切换为“当前线程”时,则相当于每一个线程都单独使用一个test2.txt文件,所以查询顺序会变为 10个接口 - > 10个性能 - > 10个页面这种顺序。

jemeter的html报告中线程名重复 jmeter线程循环_接口测试_05

 

 总结:

1. 多个线程使用同一个文件获取外部参数时,分清楚使用的共享模式是否正确。如果是多个线程组使用一个文件 可以使用“当前线程组”,如果是将一个线程组设置多个线程数这样循环使用某一文件,则可以将共享模式切换为“当前线程”来区分。

2.一、二两种模式没有正确与否,在实际进行测试时,可以通过不同的测试场景进行选择:

  比如如果需要测试多个接口的单一访问时,可以选用第二种方式,或者将一中的共享模式切换为“当前线程”;

  而如果需要测试某一页面中多个接口同时访问的效果时,可以选择第一种方式进行测试。