我正在使用JMeter来测试Web服务(SOAP),我正在测试的方法接受类型为file的参数。在SOAP UI中,可以通过上传附件并为其提供ID来完成。
在肥皂请求中会出现类似这样的内容:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://zk.payment.dkv.be/ws">
<soapenv:Header/>
<soapenv:Body>
<ws:wsMethod>
<file>cid:attachementID</file>
</ws:wsMethod>
</soapenv:Body>
</soapenv:Envelope>
我正在使用Jmeter 2.9,似乎这是不可能的,任何人都有解决方法吗?
干杯!
答案 0 :(得分:2)
我建议创建启用了附件处理的自定义Soap Sampler。 解决方案(源,在目标文件夹中构建JAR)在github下: https://github.com/spinning10/JMeterSoapSampler
请查看我们的测试博客: http://driven-by-tests.blogspot.be/
构建的jar(最新的,在Java 1.7下编译)位于:https://github.com/spinning10/JMeterSoapSampler/blob/master/target/CustomSoapSampler-1.3.jar
如果你安装了#34;插件管理器&#34;你也可以找到这个可以下载的采样器。来自网站:http://jmeter-plugins.org/
答案 1 :(得分:1)
因此,在撰写本文时,JMeter没有解决方案来执行上述操作。不是直接发送附件,但有一个解决方法!
因为最后所有关于标签之间的内容是什么:
<file>"what is here??"</file>
所有关于上述标签之间的内容,这是唯一对您的服务至关重要的事情。然后解决方法:
<file><![CDATA[${yourContentJMeterVariableName}]]></file>
“yourContentJMeterVariableName”基本上是一个Jmeter变量,必须通过让我们说Beanshell预处理器(忽略所有导入)来填充,如下所示:
try {
String path = "pathToYourContentFileOrAttachement";
String content = new Scanner(new File(path)).useDelimiter("\\Z").next();
byte[] encoded = Base64.encodeBase64(content.getBytes());
vars.put("yourContentJMeterVariableName", new String(encoded));
} catch (FileNotFoundException e) {
log.error(e);
}
上面我为了这篇文章而忽略了导入,但不太明显的是:
import java.util.Scanner;
import org.apache.commons.codec.binary.Base64;
它们应该已经包含在jmeter的lib中。就是这样!
答案 2 :(得分:1)
我使用了Fico提到的类似解决方案,尝试下面的代码。
File file = new File("C:\\103861\\A1940599.zip");
InputStream is = new FileInputStream(file);
long length = file.length();
if (length > Integer.MAX_VALUE) {
// File is too large
}
byte[] bytes = new byte[(int)length];
int offset = 0;
int numRead = 0;
while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
if (offset < bytes.length) {
throw new IOException("Could not completely read file "+file.getName());
}
is.close();
String Attachment=Base64.encodeBase64String(bytes);
vars.put("SoapAttachment",Attachment);
使用$ {SoapAttachment}在您的XML中使用SoapAttachment。
注意 - 您可能需要删除一些导入,因为我正在进行校验和计算,所以我需要它们。