概要
JMeter で独自関数を定義する方法を記載します。
独自関数の定義方法は JMeter の公式ドキュメントには記載がないです。
WEB検索すれば英語での解説記事は簡単に見つかりますが、日本語での解説記事は見つからなかったので、自分が書いてみることにしました。
英文に抵抗がない人は以下を参照した方がいいです。
- http://www.testautomationguru.com/jmeter-extending-jmeter-creating-custom-functions/
- https://www.javacodegeeks.com/2013/06/jmeter-custom-function-implementation.html
手順
大まかな流れは以下です。
- 関数のソースコードを作成する
- コンパイルして jar を生成し、JMeter に追加する
- シナリオから参照する
ソースコード
以下のサンプルコードを基にして、カスタマイズしてください。
※package 名は functions を含む必要があります。
SampleFunc.java
package jp.proj.jmeter.functions.sample;
import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.functions.AbstractFunction;
import org.apache.jmeter.functions.InvalidVariableException;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
/**
* JMeter 関数の定義
* 機能:引数を二つ受け取り、引数を連結した文字列を返す
*/
public class SampleFunc extends AbstractFunction {
/**
* 引数の説明
*/
private static final List<String> desc = new ArrayList<String>();
/**
* 関数名
* prefix として __ を付けること。
*/
private static final String MyFunctionName = "__SampleFunc";
static {
desc.add("引数1");
desc.add("引数2");
}
/**
* 引数を保持しておくための変数
*/
private List<String> args;
public SampleFunc() {
super();
}
@Override
public List <String> getArgumentDesc() {
return desc;
}
/**
* 関数本体
* @param arg0
* @param arg1
* @return
* @throws InvalidVariableException
*/
@Override
public String execute(SampleResult arg0, Sampler arg1) throws InvalidVariableException {
return args.get(0) + args.get(1);
}
@Override
public String getReferenceKey() {
return MyFunctionName;
}
@Override
public void setParameters(Collection< CompoundVariable > parameters) throws InvalidVariableException {
args = parameters.stream().map((param) -> param.execute().trim()).collect(Collectors.toList());
}
}
コンパイル
org.apache.jmeter.ApacheJMeter_core に依存しています。
JMeter に追加
生成した jar ファイルを <JMETER_HOME>/lib/ext に追加して、JMeter をリスタートします。
シナリオから参照
${__SampleFunc(hoge1, hoge2)} で参照可能です。