1

我正在使用 JMeter 测试 Web 服务 (SOAP),我正在测试的方法采用文件类型的参数。在 SOAP UI 中,这可以通过上传附件并为其提供 ID 来完成。

在soap请求中,会放置这样的东西:

<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,这似乎是不可能的,有人有解决方法吗?

干杯!

4

3 回答 3

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

如果您从以下站点安装“插件管理器”,您还可以找到此采样器可供下载:http: //jmeter-plugins.org/

于 2016-01-27T15:35:30.030 回答
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 的库中。就是这样了!

于 2013-06-27T13:39:25.360 回答
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。

注意 - 在我进行校验和计算时,您可能需要删除一些导入,所以我需要它们。

于 2013-10-18T20:55:35.877 回答