Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jmeter 如何让XPathExtractor仅在Http响应代码为200时提取xml元素?_Jmeter_Beanshell - Fatal编程技术网

Jmeter 如何让XPathExtractor仅在Http响应代码为200时提取xml元素?

Jmeter 如何让XPathExtractor仅在Http响应代码为200时提取xml元素?,jmeter,beanshell,Jmeter,Beanshell,在我的JMeter测试计划中,我有一个HttpRequest,我只想在响应代码为200时从其响应中提取链接。 我可以在HttpRequest下添加一个XPathExtractorpost处理器,它可以正常工作 但是我想先设置一个IfCondition,这样提取器就不会试图处理无效内容。但是不能将IfController添加为后处理器 也许我可以用一个BeanShell采样器来做,但我不知道如何在BeanShell中使用XPathExtractor “简捷”的方法-使用额外的取样器 在HTTP请

在我的JMeter测试计划中,我有一个HttpRequest,我只想在响应代码为
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);
        }
    }