我正在设置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 ""1.0" is not supported
如果我将CVS数据集配置窗口中的“允许引用数据”更改为“true”,则每个请求都会出现错误,但会出现错误,因为第一个变量只是作为名称传递而不是CSV值。
我可以更改我的解析脚本以消除SOAP / XML部分的消息,但不确定它是否会起作用,并且想知道为什么我应该这样做,或者是否有更优雅的方法来解决这个问题。 谢谢!
答案 0 :(得分:0)
您可以使用以下方法从请求中删除双引号:
将以下代码放入PreProcessor的“脚本”区域:
String data = sampler.getXmlData();
data = data.replaceAll("\"\"","\"");
sampler.setXmlData(data);
保存并执行测试。您可以使用View Results Tree侦听器查看请求详细信息,以验证发送的XML不包含尾随引号。不要忘记禁用/删除侦听器以进行实际负载测试。
有关脚本,可以使用的内置类型和示例脚本cookbook的更多信息,请参阅How to use BeanShell: JMeter's favorite built-in component。