工作中写jmeter性能脚本,又遇到一个问题:一个接口要写服务器日期,所以要先用获取服务器时间的接口。如果直接写上,就得连带着把获取日期的接口也给压了,不是想要的结果。如果每次都手动改日期,很麻烦。
第一个想到的仅一次控制器,听这名字就是仅执行一次,先看一下:
还是用这个最喜欢用的,想让获取一次城市,然后多次查询这个城市天气预报,线程数和循环次数都给加上
查看结果树,发现这个仅一次控制器控制的是循环次数,线程数没办法控制,两个线程数,执行了两次获取城市。
后来学到了全局变量,jmeter线程也有setUp和tearDown,还有最常用的线程组,执行顺序先setUp,然后线程组,最后tearDown。
这里先获取城市,就可以写setUp里,然后还用正则表达式提取器或者json提取器,取出城市名,再多一步,把城市名设为全局变量。
json提取器,引用名称就用city1,下面加上BeanShell 后置处理程序
函数助手找到setProperty函数,生成函数。或者直接在后置处理器里按格式写也可以。为了区分,属性名称用了city2,这是下面天气预报接口用的,city1就是刚才json提取器提出来的。全局变量就写好了,下面看使用
用property函数,属性名称用上面那个全局变量的名称,写进参数里,jmeter显示原因,不太清楚,city参数值是“${__property(city2,,)}”
这样就可以分开了,setUp线程数和循环次数都是1,线程组里还是之前的设定:线程数2,循环次数3 .预期让获取城市接口只执行一次,天气预报接口能执行6次,看结果
和预期一致,这是一个只压天气预报接口的性能脚本