JMeter从CSV文件中为SOAP / XML数据添加额外的引号

时间:2014-10-22 15:50:17

标签: xml csv soap jmeter

我正在设置SOAP / XML服务的JMeter测试。当我进行手动测试时,它工作正常,当我使用来自csv文件的完全相同的数据时,JMeter为在Soap / XML-RPC数据中找到的每个数据添加额外的引用,该数据作为变量从CSV文件。

以下是从CSV文件中提取的原始数据:

<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-  ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.xxxxyyyy.zzzz.com/ProductDetails"><SOAP-ENV:Body><ns1:ProductDetailsRequestDocument><ContextInfo><StoreId>10151</StoreId><CatalogId>10551</CatalogId><LangId>-1</LangId></ContextInfo><SKU>707138</SKU></ns1:ProductDetailsRequestDocument></SOAP-ENV:Body></SOAP-ENV:Envelope>

当我将其粘贴到Soap / XML-RPC数据窗口时,它会按原样发送它...当我设置CVS数据集配置从CSV文件中提取值(由|分隔)时,它会加倍每个“找到 - 如本例中的查看结果树请求:

<?xml version=""1.0"" encoding=""UTF-8""?><SOAP-ENV:Envelope xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:ns1=""http://www.xxxxyyyyzzzz.com/ProductDetails""><SOAP-ENV:Body><ns1:ProductDetailsRequestDocument><ContextInfo><StoreId>10151</StoreId><CatalogId>10551</CatalogId><LangId>-1</LangId></ContextInfo><SKU>529346</SKU></ns1:ProductDetailsRequestDocument></SOAP-ENV:Body></SOAP-ENV:Envelope>"

当然,这会导致请求失败并将此类错误作为响应的一部分:

org.xml.sax.SAXParseException: XML version &quot;&quot;1.0&quot; is not supported

如果我将CVS数据集配置窗口中的“允许引用数据”更改为“true”,则每个请求都会出现错误,但会出现错误,因为第一个变量只是作为名称传递而不是CSV值。

我可以更改我的解析脚本以消除SOAP / XML部分的消息,但不确定它是否会起作用,并且想知道为什么我应该这样做,或者是否有更优雅的方法来解决这个问题。 谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用以下方法从请求中删除双引号:

  1. 添加Beanshell PreProcessor作为SOAP / XML-RPC请求的子项
  2. 将以下代码放入PreProcessor的“脚本”区域:

    String data = sampler.getXmlData();
    data = data.replaceAll("\"\"","\"");
    sampler.setXmlData(data);
    
  3. 保存并执行测试。您可以使用View Results Tree侦听器查看请求详细信息,以验证发送的XML不包含尾随引号。不要忘记禁用/删除侦听器以进行实际负载测试。

  4. 有关脚本,可以使用的内置类型和示例脚本cookbook的更多信息,请参阅How to use BeanShell: JMeter's favorite built-in component