Groovy JMeter中的增量用户定义变量

Groovy JMeter中的增量用户定义变量,groovy,jmeter,load-testing,jsr223,Groovy,Jmeter,Load Testing,Jsr223,我有一个注册REST服务要进行性能测试。对于每个循环/线程请求,只需更改必需的参数mobilenumber 作为负载测试的一部分,当线程化/循环到多个测试时,如何增加用户定义的变量(通过存储为另一个udv的增量值) 尝试为所有成功的注册请求使用jsr 233预处理器 我不想使用csv,因为我只有一个参数需要更改 我正在阅读有关var.get()和vars.put()函数的文章,这些函数可以使用,但不能正确地使用 正在尝试以下代码-下面显示的登录代码 log.info("Before execu

我有一个注册REST服务要进行性能测试。对于每个循环/线程请求,只需更改必需的参数mobilenumber

作为负载测试的一部分,当线程化/循环到多个测试时,如何增加用户定义的变量(通过存储为另一个udv的增量值)

尝试为所有成功的注册请求使用jsr 233预处理器

我不想使用csv,因为我只有一个参数需要更改

我正在阅读有关var.get()和vars.put()函数的文章,这些函数可以使用,但不能正确地使用


正在尝试以下代码-下面显示的登录代码

log.info("Before execution")
log.info("${mobileNumber}") // my udv mobileNumber
log.info("${increment}") // my udv increment value

inc = ${increment}

long number = Long.parseLong(vars.get("mobileNumber"))

number = number + inc

log.info("Incremented number")
log.info(String.valueOf(number))

vars.put("mobileNumber", String.valueOf(number))

log.info("After Execution")
log.info("${mobileNumber}")
日志:

2014/11/25 09:25:26 INFO  - jmeter.threads.JMeterThread: Thread started: Dummy services 1-1 
2014/11/25 09:25:26 INFO  - jmeter.protocol.java.sampler.JSR223Sampler: Before execution 
2014/11/25 09:25:26 INFO  - jmeter.protocol.java.sampler.JSR223Sampler: 9990000000 
2014/11/25 09:25:26 INFO  - jmeter.protocol.java.sampler.JSR223Sampler: 1000 
2014/11/25 09:25:26 INFO  - jmeter.protocol.java.sampler.JSR223Sampler: Incremented number 
2014/11/25 09:25:26 INFO  - jmeter.protocol.java.sampler.JSR223Sampler: 9990001000 
2014/11/25 09:25:26 INFO  - jmeter.protocol.java.sampler.JSR223Sampler: After Execution 
2014/11/25 09:25:26 INFO  - jmeter.protocol.java.sampler.JSR223Sampler: 9990000000 
2014/11/25 09:25:26 INFO  - jmeter.threads.JMeterThread: Thread finished: Dummy services 1-1 
根据日志,增量成功,但是vars.put()不成功???

我通常使用BSFPre(Post)处理器+Groovy。在这种情况下,它看起来像

i = ${YOUR_UDV}
i += 1
vars.putObject("YOUR_UDV", i.toString())

如果给定的手机号码长度超过15位,则需要使用长Java类

假设您的UDV手机号码为“number”,您可以使用以下代码段:

long number = Long.parseLong(vars.get("number")); 
number = number + 1;
vars.put("number", String.valueOf(number));

您也可以考虑使用JMIT函数生成任意长度的随机数(函数使用字符串表示)。p>


有关
vars
ctx
和其他JMeter API对象向启用脚本的测试元素公开的更多信息,请参阅指南

如果要更新JMeter变量,则无法使用${varName}格式访问更新后的值(不确定原因)。我使用vars.get(“varName”}函数成功地获得了更新后的值

log.info("Before execution")
log.info("${mobileNumber}") // my udv mobileNumber
log.info("${increment}") // my udv increment value

inc = ${increment}

long number = Long.parseLong(vars.get("mobileNumber"))

number = number + inc

log.info("Incremented number")
log.info(String.valueOf(number))

vars.put("mobileNumber", String.valueOf(number))

log.info("After Execution")
log.info("${mobileNumber}")
log.info(vars.get("mobileNumber"))
日志:


用于帮助Dmtri和olyv的Thnaks

通用公司长变量:

long number = Long.parseLong(vars.get(Parameters)); 
number = number + 1;
vars.put(Parameters, String.valueOf(number));
参数:变量名


我的脚本中缺少了一些内容,在问题中添加了详细信息。您的脚本运行良好,可能是JSR223采样器中存在问题。如果您在JSR223采样器之后添加调试采样器并查看结果树侦听器,您将看到您的
mobileNumber
变量增加。有关调试技术、提示和技巧,请参阅这与JMeter如何使用变量有关。我不是使用${varName}获取递增的值,而是使用vars.get(“varName”)获取它。可能是${}使用一些预填充的值用于线程。感谢您的帮助。只要手机号码是10位且不能匹配int,我就必须使用。尝试问题中更新的代码仍无法获得预期结果-请参阅更新的问题。
long number = Long.parseLong(vars.get(Parameters)); 
number = number + 1;
vars.put(Parameters, String.valueOf(number));