LoginSignup
0
0

More than 3 years have passed since last update.

JMeterで独自サンプラーを作る

Last updated at Posted at 2020-05-14

背景

JmeterでGMailに来ているURLを手当たり次第踏んでいく。というツールを作成中の事。
MailReaderSamplerの挙動がよくわからない・・・・
imapはリファレンス通りやってもつながらない。
pop3は繋がる。でも本文どうやって抽出するんだ?みたいなことに。
具体的には、
image.png

こんな感じでネストしていて、この本文を後処理の正規表現抽出とかで取る方法がわからない
(最下層の1個目のリザルトにフォーカスを合わす方法がわからない)

結局、昔サンプラーを自作したことがあるので、サンプラー自作しよ。
ということに。

サンプラー自作方法もかなり忘れてたのでどうせなら記事に。

バージョン

apache-jmeter : 5.2.1
JRE : 1.8

サンプラーのコード

DemoSampler.java
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も同一フォルダに配置します。

実行イメージ

image.png

Javaリクエストを使います。
クラス名のリストにAbstractJavaSamplerClientを継承したクラスが羅列されます

image.png

result.setResponseDataに指定した文字がResponseBodyに表示されます

参考

https://qiita.com/kiida/items/6af3e46e5bae14c38242
参考というかほぼ丸パクリです。すみません。

追伸

MailReaderSamplerから普通に取れるよ!という方いらっしゃいましたらぜひ教えて下さい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0