用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,)}
可以这样使用