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

时间:2019-12-08 23:17:49

标签: groovy jmeter jsr223

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

enter image description here

我想获取测试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 )

但这只会给我Test API-2(仅提供最新的URI)。

我也尝试过

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

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

获得相同的结果。我仅获得Test API-2(仅最新的URI)。

如何获取所有Test API-0、1和2?


[12月10日更新]

user7294900提供的工作解决方案:

在“ JSR223断言”窗口中

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 )
   
   }

1 个答案:

答案 0 :(得分:1)

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

 SampleResult[] subResults = prev.getSubResults();
  

包含该样本子结果的数组

您可以迭代每个子结果:

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