我正在使用JMeter打一个API。 我正在击中的URI(测试API-0)将返回302 Found,并将其重定向到测试API-1,然后再次返回302 Found,并将其重定向到Test API-2。如果一切正常,测试API-2将返回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 )
但这只会给我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 )
}
答案 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();
}