groovy - 根据另一组随机数据随机化数据以在 Jmeter 中作为请求正文发送
问题描述
我是 Jmeter 脚本的新手,我尝试了一些功能。我在这里要做的是:
我有一个带有客户 ID 作为路径变量的 POST 请求,但我将其随机化:
http://endpoint/customers/${__RandomFromMultipleVars(customerId1|customerId2|customerId3, customer_id)}/verify
上面的行有效,它在三个客户 ID 中获取一个随机值,请求可能导致:
http://endpoint/customers/6fb5ef21-6b3e-4564-952f-e83df63a9907/verify
customerId1、customerId2 和 customerId3 来自配置元素:用户定义变量
现在,在响应正文中,我有这个 groovy 脚本而不是实际的 JSON 请求正文:
${__groovy(
if ("${customer_id}" == "6fb5ef21-6b3e-4564-952f-e83df63a9907") {
} else if ("${customer_id}" == "8f0b21e5-ddf6-42d4-b07e-6da09db6a611") {
} else if ("${customer_id}" == "40aa4f1b-424b-40d2-8213-36a39f5c98b2") {
)}
我的问题是我不知道这是否可能,但是对于每个 if 语句,我想根据设置的客户 ID 再次随机化请求正文。
我试过做:
if ("${customer_id}" == "6fb5ef21-6b3e-4564-952f-e83df63a9907") {
${__RandomFromMultipleVars(resp1|resp2|resp3)}
}
但它导致了一个错误。我试过只返回一个简单的字符串:
if ("${customer_id}" == "6fb5ef21-6b3e-4564-952f-e83df63a9907") {
"TEST"
}
它有效,字符串“TEST”被用作请求正文。我真的不确定如何继续前进。我感谢任何意见或建议。谢谢!
解决方案
根据JSR223 采样器文档:
JMeter 在将脚本字段传递给解释器之前会处理函数和变量引用,因此这些引用只会被解析一次。脚本文件中的变量和函数引用将逐字传递给解释器,这很可能导致语法错误。为了使用运行时变量,请使用适当的 props 方法,例如
props.get("START.HMS"); props.put("PROP1","1234");
所以请记住,您不应该将JMeter 函数和/或变量内联到 Groovy 脚本中。而不是像${customer_id}
您应该使用vars速记那样访问变量,它代表JMeterVariables类实例。
如果你想继续使用__groovy() 函数,你正在寻找的语法应该是这样的:
${__groovy(if (vars.get('customer_id').equals('6fb5ef21-6b3e-4564-952f-e83df63a9907')) { return vars.get('resp' + org.apache.commons.lang3.RandomUtils.nextInt(1\, 4))},)}
演示:
有关 JMeter 中 Groovy 脚本的更多信息:Apache Groovy - 为什么以及如何使用它
推荐阅读
- ruby-on-rails - 如何设置通配符子域以用作客户端 DNS 提供商中的 CNAME 值
- oracle - Oracle 12C中如何确认连接数?
- python - Selenium Python一次处理多个webdriver
- javascript - 使用特定对象动态插入字符串
- sql - 计算 Redshift 中文本出现的次数
- unit-testing - 如何使用相互依赖的接口方法模拟结构
- java - 继续在 Android 的 Firebase 数据库中的现有数组中插入新数据
- python - OOP,Python:如何(在架构上正确)实现不同的文本文件解析器?
- html - Canvas、Iframe 和 Div 的 Z-index 问题
- html - 使用 Angular 日期管道在 ngModel 中格式化日期时间