背景
JmeterでGMailに来ているURLを手当たり次第踏んでいく。というツールを作成中の事。
MailReaderSamplerの挙動がよくわからない・・・・
imapはリファレンス通りやってもつながらない。
pop3は繋がる。でも本文どうやって抽出するんだ?みたいなことに。
具体的には、
こんな感じでネストしていて、この本文を後処理の正規表現抽出とかで取る方法がわからない
(最下層の1個目のリザルトにフォーカスを合わす方法がわからない)
結局、昔サンプラーを自作したことがあるので、サンプラー自作しよ。
ということに。
サンプラー自作方法もかなり忘れてたのでどうせなら記事に。
バージョン
apache-jmeter : 5.2.1
JRE : 1.8
サンプラーのコード
package jmeter.extend.sampler;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
public class DemoSampler extends AbstractJavaSamplerClient {
// パラメータのキーを定義
private static final String MAIL_ADDRESS = "mailAddress";
private static final String PASSWORD = "password";
/* (non-Javadoc)
* デフォルトのパラメータを設定する
*/
@Override
public Arguments getDefaultParameters() {
// デフォルトパラメータの設定
Arguments defaultParameters = new Arguments();
defaultParameters.addArgument(MAIL_ADDRESS, "example@gmail.com");
defaultParameters.addArgument(PASSWORD, "input your password");
return defaultParameters;
}
@Override
public SampleResult runTest(JavaSamplerContext context) {
SampleResult result = new SampleResult();
try {
// JMeterで入力されたパラメーターをもらう
String mail = context.getParameter(MAIL_ADDRESS);
String password = context.getParameter(PASSWORD);
// 時間計測開始(1)
result.sampleStart();
// 計測したい任意の処理
Thread.sleep(500);
StringBuilder bulder = new StringBuilder();
bulder.append("this is ResponseData\n");
bulder.append("mail : ").append(mail).append("\n");
bulder.append("password : ").append(password).append("\n");
bulder.append("日本語文字列文字列\n");
bulder.append("URL : https://github.com/");
// 時間計測終了(2)
// (2) - (1) の時間がJMeterのレスポンスタイムとして取得できる
result.sampleEnd();
// JMeterの取得結果を成功にする
result.setSuccessful(true);
// JMeterのレスポンスコードをOK(200)に設定する
result.setResponseCodeOK();
result.setRequestHeaders("this is RequestHeaders");
result.setResponseData(bulder.toString(), "utf-8");
//こいつはどこにも出ないっぽい
result.setResponseMessage("this is ResponseMessage");
} catch (Exception e) {
// 時間計測終了(2)
// (2) - (1) の時間がJMeterのレスポンスタイムとして取得できる
result.sampleEnd();
// JMeterの取得結果を失敗にする
result.setSuccessful(false);
// JMeterのレスポンスコードをOK(200)以外の数字に設定する
result.setResponseCode("500");
// JMeterで表示されるレスポンスデータの中身を詰める
result.setResponseMessage("Error!! " + e.getMessage());
}
return result;
}
}
必要なライブラリはjmeterのbin以下に全部あります。
JMeterへのimport
上記のパッケージをEclipseのexport機能などでjarにして
jmeterのlibs/ext配下に配置してjmeterを再起動するだけ。
コード内でjmeterlibに最初からあるjar以外のjarに依存している場合は、
そのjarも同一フォルダに配置します。
実行イメージ
Javaリクエストを使います。
クラス名のリストにAbstractJavaSamplerClientを継承したクラスが羅列されます
result.setResponseDataに指定した文字がResponseBodyに表示されます
参考
https://qiita.com/kiida/items/6af3e46e5bae14c38242
参考というかほぼ丸パクリです。すみません。
追伸
MailReaderSamplerから普通に取れるよ!という方いらっしゃいましたらぜひ教えて下さい。