Jmeter 如何让XPathExtractor仅在Http响应代码为200时提取xml元素?
在我的JMeter测试计划中,我有一个HttpRequest,我只想在响应代码为Jmeter 如何让XPathExtractor仅在Http响应代码为200时提取xml元素?,jmeter,beanshell,Jmeter,Beanshell,在我的JMeter测试计划中,我有一个HttpRequest,我只想在响应代码为200时从其响应中提取链接。 我可以在HttpRequest下添加一个XPathExtractorpost处理器,它可以正常工作 但是我想先设置一个IfCondition,这样提取器就不会试图处理无效内容。但是不能将IfController添加为后处理器 也许我可以用一个BeanShell采样器来做,但我不知道如何在BeanShell中使用XPathExtractor “简捷”的方法-使用额外的取样器 在HTTP请
200
时从其响应中提取链接。
我可以在HttpRequest下添加一个XPathExtractor
post处理器,它可以正常工作
但是我想先设置一个IfCondition
,这样提取器就不会试图处理无效内容。但是不能将IfController添加为后处理器
也许我可以用一个BeanShell采样器来做,但我不知道如何在BeanShell中使用XPathExtractor
“简捷”的方法-使用额外的取样器
- 在HTTP请求之后添加
- 使用
${JMeterThread.last_sample_ok}
作为“条件”
- 置于If控制器之下
- 在Beanshell采样器“脚本”区域中使用以下代码:
- 将XPath提取器作为Beanshell采样器的子级
上面的Beanshell脚本将返回与前面的HTTP请求采样器相同的响应
“长而难”的方法-直接在Beanshell中提取XPath
- 放置而不是XPath提取器
- 请使用以下脚本作为参考:
import org.apache.jmeter.util.PropertiesBasedPrefixResolver;
import org.apache.jmeter.util.XPathUtil;
import org.apache.xpath.XPathAPI;
import org.apache.xpath.objects.XObject;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
InputStream in = new ByteArrayInputStream(prev.getResponseData());
boolean useNameSpace = false;
boolean isTolerant = true;
boolean isQuiet = true;
boolean showWarnings = true;
boolean reportErrors = true;
boolean isXML = false;
boolean isDownloadDTDs = false;
if (prev.isResponseCodeOK()) {
InputStream in = new ByteArrayInputStream(prev.getResponseData());
boolean useNameSpace = false;
boolean isTolerant = true;
boolean isQuiet = true;
boolean showWarnings = true;
boolean reportErrors = true;
boolean isXML = false;
boolean isDownloadDTDs = false;
String query = "//a[text()='JMeter FAQ (Wiki)']";
List matchStrings = new ArrayList();
//matchStrings.add("-1");
boolean returnFragment = false;
Document doc = XPathUtil.makeDocument(in, false, false, useNameSpace, isTolerant, isQuiet, showWarnings, reportErrors
, isXML, isDownloadDTDs);
String val = null;
XObject xObject = XPathAPI.eval(doc, query, new PropertiesBasedPrefixResolver(doc.getDocumentElement());
int objectType = xObject.getType();
if (objectType == xObject.CLASS_NODESET) {
NodeList matches = xObject.nodelist();
int length = matches.getLength();
for (int i = 0; i < length; ++i) {
Node match = matches.item(i);
if (match instanceof Element) {
if (returnFragment) {
StringWriter sw = new StringWriter();
Transformer t = TransformerFactory.newInstance().newTransformer();
t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
t.transform(new DOMSource(match), new StreamResult(sw));
val = sw.toString();
} else {
Node firstChild = match.getFirstChild();
if (firstChild != null) {
val = firstChild.getNodeValue();
} else {
val = match.getNodeValue();
}
}
} else {
val = match.getNodeValue();
}
matchStrings.add(val);
}
} else if (objectType != xObject.CLASS_NULL && objectType != xObject.CLASS_UNKNOWN && objectType != xObject.CLASS_UNRESOLVEDVARIABLE) {
val = xObject.toString();
matchStrings.add(val);
} else {
log.warn("Unexpected object type: " + xObject.getTypeString() + " returned for: " + query);
}
for (String match : matchStrings) {
log.info("Match -----> " + match);
}
}
import org.apache.jmeter.util.PropertiesBasedPrefixResolver;
导入org.apache.jmeter.util.XPathUtil;
导入org.apache.xpath.XPathAPI;
导入org.apache.xpath.objects.XObject;
导入org.w3c.dom.Document;
导入org.w3c.dom.Element;
导入org.w3c.dom.Node;
导入org.w3c.dom.NodeList;
导入javax.xml.transform.OutputKeys;
导入javax.xml.transform.Transformer;
导入javax.xml.transform.TransformerFactory;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
InputStream in=newbytearrayinputstream(prev.getResponseData());
布尔useNameSpace=false;
布尔isTolerant=true;
布尔值isQuiet=true;
布尔值showWarnings=true;
布尔reportErrors=true;
布尔值isXML=false;
布尔值isDownloadDTDs=false;
if(上一个isResponseCode()){
InputStream in=newbytearrayinputstream(prev.getResponseData());
布尔useNameSpace=false;
布尔isTolerant=true;
布尔值isQuiet=true;
布尔值showWarnings=true;
布尔reportErrors=true;
布尔值isXML=false;
布尔值isDownloadDTDs=false;
String query=“//a[text()='JMeter常见问题解答(Wiki)'”;
List matchStrings=new ArrayList();
//匹配字符串。添加(“-1”);
布尔返回片段=false;
Document doc=XPathUtil.makeDocument(in、false、false、useNameSpace、isTolerant、isQuiet、showWarnings、reportErrors
,isXML,isdownloaddtd);
字符串val=null;
XObject XObject=XPathAPI.eval(doc,query,新属性basedPrefixResolver(doc.getDocumentElement());
int objectType=xObject.getType();
if(objectType==xObject.CLASS_NODESET){
NodeList matches=xObject.NodeList();
int length=matches.getLength();
对于(int i=0;i”+匹配);
}
}
有关在JMeter脚本中使用Beanshell的更多信息,请参阅指南
import org.apache.jmeter.util.PropertiesBasedPrefixResolver;
import org.apache.jmeter.util.XPathUtil;
import org.apache.xpath.XPathAPI;
import org.apache.xpath.objects.XObject;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
InputStream in = new ByteArrayInputStream(prev.getResponseData());
boolean useNameSpace = false;
boolean isTolerant = true;
boolean isQuiet = true;
boolean showWarnings = true;
boolean reportErrors = true;
boolean isXML = false;
boolean isDownloadDTDs = false;
if (prev.isResponseCodeOK()) {
InputStream in = new ByteArrayInputStream(prev.getResponseData());
boolean useNameSpace = false;
boolean isTolerant = true;
boolean isQuiet = true;
boolean showWarnings = true;
boolean reportErrors = true;
boolean isXML = false;
boolean isDownloadDTDs = false;
String query = "//a[text()='JMeter FAQ (Wiki)']";
List matchStrings = new ArrayList();
//matchStrings.add("-1");
boolean returnFragment = false;
Document doc = XPathUtil.makeDocument(in, false, false, useNameSpace, isTolerant, isQuiet, showWarnings, reportErrors
, isXML, isDownloadDTDs);
String val = null;
XObject xObject = XPathAPI.eval(doc, query, new PropertiesBasedPrefixResolver(doc.getDocumentElement());
int objectType = xObject.getType();
if (objectType == xObject.CLASS_NODESET) {
NodeList matches = xObject.nodelist();
int length = matches.getLength();
for (int i = 0; i < length; ++i) {
Node match = matches.item(i);
if (match instanceof Element) {
if (returnFragment) {
StringWriter sw = new StringWriter();
Transformer t = TransformerFactory.newInstance().newTransformer();
t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
t.transform(new DOMSource(match), new StreamResult(sw));
val = sw.toString();
} else {
Node firstChild = match.getFirstChild();
if (firstChild != null) {
val = firstChild.getNodeValue();
} else {
val = match.getNodeValue();
}
}
} else {
val = match.getNodeValue();
}
matchStrings.add(val);
}
} else if (objectType != xObject.CLASS_NULL && objectType != xObject.CLASS_UNKNOWN && objectType != xObject.CLASS_UNRESOLVEDVARIABLE) {
val = xObject.toString();
matchStrings.add(val);
} else {
log.warn("Unexpected object type: " + xObject.getTypeString() + " returned for: " + query);
}
for (String match : matchStrings) {
log.info("Match -----> " + match);
}
}