我正在使用jmeter来加载测试服务 我需要使用响应标头参数值之一作为下一个请求的输入。 为此,我使用 JSR223 Sampler 并编写 Grrovy 脚本来读取参数。 我用过
**def headerList = prev.getResponseHeaders()
headerList.each(){
headersList.each{
log.info it;
if(it.equals("transactionRef"){
log.info"Required Header: "it
requiredHeader=it;
}**
上面的代码不起作用 它也是一个字符一个字符地遍历。 有人可以帮忙解决这个问题吗?
}
根据 JavaDoc SampleResult.getResponseHeaders() 函数将响应标头作为单个 String 返回,因此如果您想获取单独的标头,您需要首先按行分隔符拆分它,然后按冒号拆分以获取名称/值对。
示例代码:
def headers = prev.getResponseHeaders().split('\n').inject([:]) { out, header ->
if (header.contains(':')) {
header.split(':').with {
out[it[0].trim()] = it[1].trim()
}
}
out
}
headers.each { header ->
if (header.getKey() == 'transactionRef') {
log.info('Required header value: ' + header.getValue())
}
}
有关 JMeter 中 Groovy 脚本编写的更多信息:Apache Groovy - 为什么以及如何使用它
附注使用正则表达式提取器不是更容易吗?相关配置类似于:
以下是添加基于 JSR223 的响应标头断言的步骤:
JSR223 Assertion
import java.util.HashMap;
def sanitizeResponseHaders() {
def headers = new HashMap<String, String>();
if(SampleResult.getHeadersSize() > 0) {
def headersData = SampleResult.getResponseHeaders().split("\n");
for(headerData: headersData) {
if(headerData.contains(":")) {
def header = headerData.split(":");
headers.put(header[0].toLowerCase().trim(), header[1].toLowerCase().trim());
}
}
}
return headers;
}
def assertHeader(headers, header, value) {
if(!headers.get(header).equals(value)) {
def msg = "Header assertion failed: " + header + " is not as expected " + value + " and actual value is " + headers.get(header);
SampleResult.setSuccessful(false);
SampleResult.setResponseMessage(msg);
AssertionResult.setFailure(true);
AssertionResult.setFailureMessage(msg);
addLog(msg);
}
}
def addLog(msg) {
log.info(msg);
}
def logHeaders(headers) {
for(entry: headers.entrySet()) {
addLog("header name: " + entry.getKey() + ", value: " + entry.getValue());
}
}
addLog("=========== Header assertion started ===============");
def headers = sanitizeResponseHaders();
//Add your own header assertion here
assertHeader(headers, "x-frame-options", "sameorigin");
logHeaders(headers);
addLog("============ Header assertion completed =============");
Add your own header assertion here
行,添加您自己的断言。为此,只需为每个断言调用 assertHeader(headers, "your_own_header", "your_own_header_value");
方法即可。我们可以在标头管理器中添加/注入键值吗