Jmeter使用笔记之函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jmeter使用笔记之函数相关的知识,希望对你有一定的参考价值。

用Jmeter才做了一个项目的测试,就不得不对函数这部分吐槽一下,真是有点弱,难怪大多数人不用这个功能,不过如果用的好也是很方便的,以下慢慢说。

一、BeanShell函数

在测试中遇到了时间戳的加减,查到发现__BeanShell可以做表达式的运算,满心欢喜的用了,结果发现没有结果,再三确认发现不是自己使用的问题,随即

测试了12+12,发现没有问题。最后猜测应该是这个函数是int类型的计算,测试后发现这里的最大值就是int类型的最大值。(心里又默默的吐槽了一番为何

不弄成long类型呢?)

二、javascript函数

1、由于BeanShell无法满足自己的要求,随机查看发现了__javaScript函数,于是开始使用,函数如下${__javaScript(new Date(2016,0,29).valueOf(),)},设置如下

技术分享

发现HTTP的请求中原样输出了,为什么呢?

new Date(2016,0,29).valueOf()这个在浏览器的控制台执行时没有任何问题的!这个问题也无从考证。

后来用new Date().valueOf()发现可以,那怎样才能得到指定时间的时间戳呢?

经过不断反复的验证,发现在Jmeter中如果用__javaScript函数取得指定日期的时间戳,只能通过${__javaScript(new Date("Jan 29 2016").valueOf(),)},必须是

字符串初始化才可以,其他的都不行。(这里又再次吐槽了一番,设计了这个函数,为何功能这么弱?)

2、__javaScript函数操作路径

技术分享

 

上面的设置是得不到正确路径的为什么呢?如下,"E:\\jmeter"+".dat",这个在浏览器的console执行时没有问题的?

后来把"E:\\jmeter"+".dat"改为"E:\\\\jmeter"+".dat"执行成功,才恍然大悟,从然是执行的JS但是参数的传递还是通过Java来的,所以

才会造成这种现象

三、threadNum函数

测试中难免要用到跟线程相关的参数,这时候可能会想到${__threadNum}这个线程号的函数,但是这个函数也有它的局限性,首先不能工作在配置元件中

比如用户定义变量等等,其次多个线程组这里返回的线程号是一致的,so在设计的时候要考虑清楚

四、P函数

测试中如果遇到多个线程组之间传递变量的情况,可能一种方式就是用属性才操作,那么通过${__P(,)}来读取属性就是一种好的方式

五、setProperty函数

变量之间传递属性,那么必须设置属性,可以通过${__setProperty(,,)}进行设置属性。其实在刚开始的时候知道可以通过这么设置,但是却不知道

这个函数应该运行在哪个组件中后来才了解到了beanshell。

六、time函数

一般HTTP请求中的随机数都是通过时间戳的方式生成的,${__time(,)}这个函数刚好可以生产12位以毫秒为单位的时间戳,如果是10位的话${__time(/1000,)}

可以这样使用

以上是关于Jmeter使用笔记之函数的主要内容,如果未能解决你的问题,请参考以下文章

jmeter beanshell里面写了函数怎么调用

Jmeter中的函数和BeanShell

Jmeter 常用函数(19)- 详解 __BeanShell

Jmeter之Bean shell使用

Jmeter之Bean shell使用

Jmeter之Bean shell使用