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

次のサイトから「Plugin Manager」をインストールすると、このサンプラーをダウンロードすることもできます: 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 の lib に含まれているはずです。それでおしまい!

于 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);

XML で ${SoapAttachment} を使用して SoapAttachment を使用します。

注-チェックサム計算を行っているため、いくつかのインポートを削除する必要がある場合があるため、それらが必要です。

于 2013-10-18T20:55:35.877 に答える