在 JMeter 的 JSR223 断言中获取所有以前的采样器结果(重定向)

Get all previous sampler results (redirects) in JMeter's JSR223 Assertion

我正在使用 JMeter 打一个 API。 我正在点击的 URI (Test API-0) 将 return 302 Found 并将其重定向到 Test API-1 它将再次 return 302 Found 并将其重定向到测试 API-2。如果一切正常,测试 API-2 将 return 200 OK。

我想获取协议主机路径测试API-0、测试API-1和测试API-2.

的响应代码

在 JSR223 断言 Groovy 语言中,我尝试了

def url = prev.getURL();
def protocol = url.getProtocol();
def host = url.getHost();
def path = url.getPath();

log.info('Full URL: ' + url.toString())
log.info('Protocol: ' + protocol )
log.info('host: ' + host )
log.info('path: ' + path )

但这只会给我测试 API-2(只有最新的 URI)。

我也试过

log.info("Previous Response URL is: " + ctx.getPreviousResult().getURL());

log.info( "The Sample URL is : " + SampleResult.getUrlAsString() );

同样的结果。我只得到测试 API-2(只有最新的 URI)。

如何获得所有测试 API-0、1 和 2?


[12 月 10 日更新]:

user7294900 给出的解决方案:

在 JSR223 断言中 window

import org.apache.jmeter.samplers.SampleResult;

 SampleResult[] subResults = prev.getSubResults();

   subResults.each { it ->  
   def url = it.getURL();
   def protocol = url.getProtocol();
   def host = url.getHost();
   def path = url.getPath();

   log.info("URL: " + url )
   log.info("Protocol: " + protocol )
   log.info("host: " + host )
   log.info("path: " + path )
   
   }

您还可以使用 prev.getSubResults() 获取子结果并从数组中获取数据

 SampleResult[] subResults = prev.getSubResults();

array containing the subresults for this sample

您可以迭代每个子结果:

subResults.each { it->
   def url = it.getURL());
   def protocol = url.getProtocol();
   def host = url.getHost();
   def path = url.getPath();
}