当需要突然创建Apache JMeter独特采样器插件进行负载测试时,可以阅读以下文章
目标读者
-
- Apache JMeterを使った負荷試験の計画を練っている最中、既存のサンプラだけでは不十分な状況に陥ったので、独自のサンプラをサッと書きたい。
- Javaはなんとなく読み書きできるけど詳しくない。Javaのビルド設定の仕方が分からない。
关于这个句子
以下是解释如何用Java快速编写自定义采样器的步骤,此文主要面向不熟悉Java的人,并重点解释构建配置等内容。
我将描述JMeter的采样器中用于JavaSampler的插件。
操作步骤
1. 安装InteliJ IDEA。
对于平时不写Java的人,建议安装Java集成开发环境IntelliJ IDEA。有免费版和付费版可供选择。(笔者已购买JetBrains的全套包,但我认为免费版已经足够了。)
以下内容基于 IntelliJ IDEA 2023.2.2 版本。
2. 创建项目
当你启动InteliJ时,开始创建新项目。
-
- JDKは(2023年9月21日現在)19以下にします。JDKのインストールが無くてもJDKのプルダウンメニューからインストールできます。
-
- BuildSystemは、ここではGradleを選び、Gradle DSLはGroovyにします。
- Advanced SettingsのGroupIdは任意の値を指定します。ちょうどドメイン名を逆転したような書き方をします。たとえばcom.<会社名の英語>など。
创建项目。
3. 设定依存关系
打开build.gradle文件,在dependencies中添加Apache JMeter库的代码如下所示。在此,我们指定了版本5.6.2,你可以在MavenCentral上确认可用的版本。
dependencies {
testImplementation platform('org.junit:junit-bom:5.9.1')
testImplementation 'org.junit.jupiter:junit-jupiter'
// ↓追記
implementation group: 'org.apache.jmeter', name: 'ApacheJMeter_java', version: '5.6.2'
}
4. 采样器的描述
右击 ./src/main/java,选择Package并创建一个包。例如,在项目创建时指定的 GroupId 后面可以指定任意名称,如 com..samplers。
在创建的包下面创建如下所示的Java类。样例类需要实现JavaSamplerClient接口。
package com.hiroyky.samplers;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
public class OriginalSampler implements JavaSamplerClient {
static final String URL = "Enter request URL";
static final String USERNAME = "Enter user name";
static final String PASSWORD = "Enter password";
@Override
public void setupTest(JavaSamplerContext context) {
}
@Override
public SampleResult runTest(JavaSamplerContext context) {
/* サンプラの処理本体を書きます。 */
// 設定項目の値取得
String url = context.getParameter(URL);
String userName = context.getParameter(USERNAME);
String password = context.getParameter(PASSWORD);
// 結果に出力するメッセージを作成します。
StringBuilder responseMessage = new StringBuilder();
responseMessage.append("URL: ").append(url).append("\n");
responseMessage.append("User name: ").append(userName).append("\n");
SampleResult result = new SampleResult();
try {
// 時間計測開始
result.sampleStart();
/*
* TODO: 行いたい処理を書いてください。
* */
// 時間計測終了
result.sampleEnd();
// 結果に成功を登録
result.setResponseCodeOK();
result.setSuccessful(true);
result.setResponseMessage(responseMessage.toString());
} catch (Exception e) {
// 時間計測終了
result.sampleEnd();
// 失敗を登録
result.setResponseCode("500");
result.setSuccessful(false);
responseMessage.append("error: ").append(e.getMessage()).append("\n");
result.setResponseMessage(responseMessage.toString());
}
return result;
}
@Override
public void teardownTest(JavaSamplerContext context) {
}
@Override
public Arguments getDefaultParameters() {
// 設定項目を定義します。第二引数はデフォルト値の文字列
// ここの設定項目がGUI上に表示されます。
Arguments arguments = new Arguments();
arguments.addArgument(URL, "http://localhost/");
arguments.addArgument(USERNAME, "taro");
arguments.addArgument(PASSWORD, "password");
return arguments;
}
}
5. 建筑
点击屏幕右侧的Gradle并进行构建操作。
成功构建后,将在build/libs/目录下生成Jar文件。这就是所需的构建成果物。
6. 安装
将通过5步骤生成的jar文件复制到Apache JMeter的./lib/ext/目录中。完成复制后,启动JMeter。
7. 尝试使用
根据Sampler创建Java请求。在Java请求中,选择应该包含已创建的自定义采样器。
以上是所有内容。
问题或困扰
当依存关系不足时
如果您的独立采样器依赖于另一个库,那么您也需要将该库放置在JMeter的./lib/ext或./lib/目录下。例如,如果出现NoClassDefFoundError错误,则明显存在依赖关系的问题。如果您想统一获取它们,只需要在build.gradle中添加以下描述。
定义一个任务,可以一次性下载依存关系并保存到build/libs/。
task copyDependencies(type: Copy) {
from configurations.runtimeClasspath
into 'build/libs'
}
然后,右侧的任务菜单中将出现“其他”->“复制依赖项”的选项,点击它。依赖项将会下载并保存在build/libs目录下,然后将所有的Jar文件放入JMeter的./lib/ext目录下,暂时就可以了。
结束
这是使用Apache JMeter创建和构建自定义采样器的方法。