Jmeter:动态生成请求时未填充值
Jmeter: Values not populated when request are generated dynamically
测试计划结构
TestPlan
JDBC Connection Configuration
HTTP Request Defaults
HTTP Header Manager
User Defined Values
udvBranchCode
TestFragment
JDBCRequest - Written query to get data from database
JSR223 PostProcessor
ThreadGroup - CreateTransaction
IFController - ${__jexl3("${udvBranchCode}"== "",)} If udvBranchCode is blank then only run JDBCRequest
ModuleController - Pointed to JDBCRequest JSR223 PostProcessor
HttpRequest
JSR223 PreProcessor - Here checking I am checking if udvBranchCode has value; if not then value from the database will get set.
详情如下
1. JDBCRequest 的 JSR223 后处理器
我在这里检查结果集大小,然后随机存储分支代码作为属性。
resultSet = vars.getObject("resultSetUserDetails")
if (resultSet.size() !=0 ) {
Random random = new Random()
int i = random.nextInt(vars.getObject("resultSetUserDetails").size())
strBranchCode = vars.getObject("resultSetUserDetails").get(i).get("BranchCode")
props.put("propsBranchCode" + ctx.getThreadNum(), strBranchCode)
}
2。 HttpRequest 详细信息 IFController
如果用户定义值中的分支代码值为空,那么我调用数据库。
${__jexl3("${udvBranchCode}"== "",)}
- HttpRequest 详细信息
{
"TR": {
"BranchCode": "${brnCode}" -> Here brnCode is not populating
"CustomerType": "${udvCustomerType}"
}
"Individual": {
"FirstName": "Deepak",
"MiddleName": "Kumar",
"LastName": "Verma",
}
"Company": {
"CompanyName": "Company",
"StartDate": "23/01/2020",
}
}
- 以上 HttpRequest 的 JSR223 预处理器详细信息
我在这里检查用户定义的值中是否不存在分支代码,然后设置从数据库获取的代码。同样基于客户类型,从请求中删除相应的 object/elements 工作正常。但是对于 BranchCode 我遇到了问题,这里不是填充 BranchCode 值,而是填充了“${brnCode}”。
import groovy.json.JsonSlurper
import groovy.json.JsonOutput
def oldRequest = new JsonSlurper().parseText(sampler.getArguments().getArgument(0).getValue())
def bcode = props.get("propsBranchCode" + ctx.getThreadNum())
if (vars.get("udvBranchCode").isEmpty() == true) {
vars.put("brnCode", bcode)
} else {
vars.put("brnCode", vars.get("udvBranchCode"))
}
if (oldRequest.Transaction.CustomerType.equalsIgnoreCase("Individual")) {
oldRequest.remove("Company")
}
def newRequest = new JsonOutput().toJson(oldRequest)
sampler.getArguments().removeAllArguments()
sampler.setPostBodyRaw(true)
sampler.addNonEncodedArgument('',new JsonOutput().prettyPrint(newRequest),'')
问题已通过替换 HttpRequest 的 JSR223 预处理器详细信息
得到解决
- vars.put("brnCode", bcode)
WITH
- oldJSONRequest.TR.BranchCode = bcode
低于
import groovy.json.JsonSlurper
import groovy.json.JsonOutput
def oldRequest = new JsonSlurper().parseText(sampler.getArguments().getArgument(0).getValue())
def bcode = props.get("propsBranchCode" + ctx.getThreadNum())
if (vars.get("udvBranchCode").isEmpty() == true) {
oldJSONRequest.TR.BranchCode = bcode
} else {
oldJSONRequest.TR.BranchCode = vars.get("udvBranchCode")
}
if (oldRequest.Transaction.CustomerType.equalsIgnoreCase("Individual")) {
oldRequest.remove("Company")
}
def newRequest = new JsonOutput().toJson(oldRequest)
sampler.getArguments().removeAllArguments()
sampler.setPostBodyRaw(true)
sampler.addNonEncodedArgument('',new JsonOutput().prettyPrint(newRequest),'')
测试计划结构
TestPlan
JDBC Connection Configuration
HTTP Request Defaults
HTTP Header Manager
User Defined Values
udvBranchCode
TestFragment
JDBCRequest - Written query to get data from database
JSR223 PostProcessor
ThreadGroup - CreateTransaction
IFController - ${__jexl3("${udvBranchCode}"== "",)} If udvBranchCode is blank then only run JDBCRequest
ModuleController - Pointed to JDBCRequest JSR223 PostProcessor
HttpRequest
JSR223 PreProcessor - Here checking I am checking if udvBranchCode has value; if not then value from the database will get set.
详情如下
1. JDBCRequest 的 JSR223 后处理器
我在这里检查结果集大小,然后随机存储分支代码作为属性。
resultSet = vars.getObject("resultSetUserDetails")
if (resultSet.size() !=0 ) {
Random random = new Random()
int i = random.nextInt(vars.getObject("resultSetUserDetails").size())
strBranchCode = vars.getObject("resultSetUserDetails").get(i).get("BranchCode")
props.put("propsBranchCode" + ctx.getThreadNum(), strBranchCode)
}
2。 HttpRequest 详细信息 IFController
如果用户定义值中的分支代码值为空,那么我调用数据库。
${__jexl3("${udvBranchCode}"== "",)}
- HttpRequest 详细信息
{
"TR": {
"BranchCode": "${brnCode}" -> Here brnCode is not populating
"CustomerType": "${udvCustomerType}"
}
"Individual": {
"FirstName": "Deepak",
"MiddleName": "Kumar",
"LastName": "Verma",
}
"Company": {
"CompanyName": "Company",
"StartDate": "23/01/2020",
}
}
- 以上 HttpRequest 的 JSR223 预处理器详细信息
我在这里检查用户定义的值中是否不存在分支代码,然后设置从数据库获取的代码。同样基于客户类型,从请求中删除相应的 object/elements 工作正常。但是对于 BranchCode 我遇到了问题,这里不是填充 BranchCode 值,而是填充了“${brnCode}”。
import groovy.json.JsonSlurper
import groovy.json.JsonOutput
def oldRequest = new JsonSlurper().parseText(sampler.getArguments().getArgument(0).getValue())
def bcode = props.get("propsBranchCode" + ctx.getThreadNum())
if (vars.get("udvBranchCode").isEmpty() == true) {
vars.put("brnCode", bcode)
} else {
vars.put("brnCode", vars.get("udvBranchCode"))
}
if (oldRequest.Transaction.CustomerType.equalsIgnoreCase("Individual")) {
oldRequest.remove("Company")
}
def newRequest = new JsonOutput().toJson(oldRequest)
sampler.getArguments().removeAllArguments()
sampler.setPostBodyRaw(true)
sampler.addNonEncodedArgument('',new JsonOutput().prettyPrint(newRequest),'')
问题已通过替换 HttpRequest 的 JSR223 预处理器详细信息
得到解决
- vars.put("brnCode", bcode)
WITH- oldJSONRequest.TR.BranchCode = bcode
低于
import groovy.json.JsonSlurper
import groovy.json.JsonOutput
def oldRequest = new JsonSlurper().parseText(sampler.getArguments().getArgument(0).getValue())
def bcode = props.get("propsBranchCode" + ctx.getThreadNum())
if (vars.get("udvBranchCode").isEmpty() == true) {
oldJSONRequest.TR.BranchCode = bcode
} else {
oldJSONRequest.TR.BranchCode = vars.get("udvBranchCode")
}
if (oldRequest.Transaction.CustomerType.equalsIgnoreCase("Individual")) {
oldRequest.remove("Company")
}
def newRequest = new JsonOutput().toJson(oldRequest)
sampler.getArguments().removeAllArguments()
sampler.setPostBodyRaw(true)
sampler.addNonEncodedArgument('',new JsonOutput().prettyPrint(newRequest),'')