jmeter 如何在TestPlanStats stats = testPlan(threadGroup())中的动态URL上发送请求?

htrmnn0y  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(112)

我需要用几个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上发送请求?

smdnsysy

smdnsysy1#

如果您需要将第二个HTTP请求采样器的路径设置为由第一个HTTP请求采样器生成的JMeter变量,则需要使用以下语法:

httpSampler("${urlForSecondRequest}")

如果“结果不合格”:

相关问题