我需要用几个API创建一个完整的操作流程的性能测试。
httpSampler(urlForFirstRequest)及其子进程(new DslJsr 223 PostProcessor(“从第一个请求的响应中保存url参数”)--正常工作并为第二个请求提供URL。提供的URL根据需要为每个单独的线程提供不同的URL。
问题是:如何创建用于发送第二个请求的代码(在“httpSampler(urlForSecondRequest)”位置),其中测试的每个单独线程将从第一个请求接收不同的URL(参数“urlForSecondRequest”是动态的,第二个请求应该发送到这个保存的值)?
TestPlanStats stats = testPlan(
threadGroup(testParams.getThreads(), Duration.ofMinutes(testParams.getLoadTime()),
httpSampler(urlForFirstRequest)
.method(POST)
.contentType(APPLICATION_JSON)
.header(AUTHORIZATION, getAuthToken())
.body(someBodyForFirstRequest)
.children(
new DslJsr223PostProcessor("Save url parameter from the response of the first request",
"def jsonResponse = new groovy.json.JsonSlurper().parseText(prev.getResponseDataAsString());\n" +
"def urlForSecondRequest = jsonResponse.links[1].href;\n" +
"vars.put('urlForSecondRequest', urlForSecondRequest);")
),
httpSampler(urlForSecondRequest)
.method(POST)
.contentType(APPLICATION_JSON)
.header(AUTHORIZATION, getAuthToken())
.body(someBodyForSecondRequest)
.children(
new DslJsr223PostProcessor("Save token parameter from the response of the second request",
"def jsonResponse = new groovy.json.JsonSlurper().parseText(prev.getResponseDataAsString());\n" +
"def token = jsonResponse.token;\n" +
"vars.put('response', token);")
),
new DslJsr223Sampler("Print result",
"String result = vars.get('response')" +
"if (result != null) {\n" +
" println(result);\n" +
"} else {\n" +
" println('result not found');\n" +
"}")
).rampTo(testParams.getThreads(), Duration.ofMinutes(testParams.getRumpUpTime())),
influxDbListener(envSetting.getInfluxDbUrl())
.measurement("someMeasurement")
).run();
打印结果的代码需要看代码是否正确工作。参数“response”对于每个线程都是不同的。
我已经尝试使用httpSampler(“${urlForSecondRequest}”),但结果失败。
如何在第一个请求的响应中提供的动态URL上发送请求?
1条答案
按热度按时间smdnsysy1#
如果您需要将第二个HTTP请求采样器的路径设置为由第一个HTTP请求采样器生成的JMeter变量,则需要使用以下语法:
如果“结果不合格”:
${urlForSecondRequest}
变量的值