【问题标题】:Where is the request for a SOAP call stored in JmeterJmeter 中存储的 SOAP 调用请求在哪里
【发布时间】:2015-05-19 17:31:59
【问题描述】:

我正在尝试使用 BeanShell 将 SOAP 请求打印到文件中,因为我必须进行一些验证。

我能够使用String response = prev.getResponseDataAsString(); 获取 SOAP 调用的响应,该响应可以打印到文件中。

同样,在 Jmeter 中可以使用什么方法来获取为 SOAP 调用发送的请求?

注意:我尝试使用SoapSampler.getxmldata()。但它没有给我结果。

【问题讨论】:

    标签: jmeter


    【解决方案1】:

    如果 SOAP 请求作为 HTTP POST 调用提交,并且 xml 内容作为 POST 正文,prev.getSamplerData() 将包含请求信息。

    示例:
    在 beanshell 后处理器中:vars.put("requestData", prev.getSamplerData());

    结果:

    requestData=POST url
    
    POST data:
    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
          ...
      </soap:Body>
    </soap:Envelope>
    

    【讨论】:

    【解决方案2】:

    如果您使用 SOAP/XML-RPC Request,您可以从 Beanshell PostProcessor 访问它的 XML 正文:

    String body = ctx.getCurrentSampler().getXmlData();
    

    其中ctxJmeterContext 类的简写

    【讨论】:

    • 我无法使用 ctx 获取请求 SOAP 消息。 BeanShell PostProcessor 中的代码有问题吗? f = new FileOutputStream(ResultDir, true); p = new PrintStream(f); String a = ctx.getCurrentSampler().getxmlData(); p.println(a);
    • 1.注意getXmlData(); 2 中的大写“X”。我建议关闭 p.close(); 之类的流,因为让它们保持打开状态可能会导致缺少打开的句柄
    • 可爱.. 是的,它确实有效.. 感谢您的纠正.. 是的,我也使用过 p.close() 和 f.close()。
    • 那么在这种情况下 prev 和 ctx 有什么区别呢?他们两个似乎都有相同的信息。
    • 另外,我们怎么知道ctx.getCurrentSampler()可以使用哪些方法?我看到你已经使用了 getXmlData() 。
    猜你喜欢
    • 1970-01-01
    • 2014-04-19
    • 2011-06-27
    • 2023-03-12
    • 2012-02-09
    • 2016-04-21
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多