性能测试工具 记录使用 Idea 和 maven 方式实现 JmeterJava 请求

· 2020年01月07日 · 3137 次阅读

Idea+maven 实现 Jmeter java 请求

在搞这个之前,去网上查过很多资料。大多是用 eclipse 来实现的导入相应依赖的 jar 包。然后导出 jar 文件,但是现在好多都是用 ide 来编辑了。因为这个去按照了最新版本的 ide 发现导包有各种问题。明明导入没问题,打包也没问题但是就是报错。于是想到用 maven 来管理依赖。
· maven 不需要写 main 方法可以打包。
· ide maven 打包可以做到一键 install clear

先了解 java 请求如何实现

  1. 创建工程并导入 lib/ext/ApacheJMeter_java.jar lib/ext/ApacheJMeter_core.jar
  2. 创建一个类并实现 JavaSamplerClient 接口或继承 AbstractJavaSamplerClient,并重写;这个类是从 apacheJmeter_java 包中继承
public Arguments getDefaultParameters();设置可用参数及的默认值;
public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值,执行多次依赖于设置方式;
public void teardownTest(JavaSamplerContext arg0):测试结束时调用,只执行一次;
  1. 打成 jar 包,放入 Jmeter 的/lib/ext 路径下,重启 Jmeter 即可 ### 步骤如下
  2. 要有 idea,新建 java maven 项目,一路 next,打开后文件目录应该如下:
  3. 去 maven 公开仓库搜索需要依赖的 jar 包: https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_java/5.0 选择指定版本后如下图(版本最好与 Jmeter 版本一致)
  4. 编辑 pom 文件。pom.xml 文件是 maven 管理依赖 jar 的一个配置文件,有 project 节点,下面有 artifactId+version 节点是打包成功后的包名,可以自定义,如下图,在 project 节点下新增 dependencies 节点,该节点为依赖包列表节点。
  5. 把对应的 maven 配置参数加到 dependencies 节点下面
  6. 导入默认是红色代表找不到对应包文件,此时 idea 会自动提示,如下图 (标记错了。。),点击 enable auto import 会自动从 maven 仓库下载对应 jar 文件
  7. 如果没有自动导入也不慌。ide 右侧有 maven 选项打开,点击刷新按钮。默认选项打开只有 2 哥 lifecycle 和 plugins,导入包成功会有 dependencies 节点。用别的方式教程都需要导入 2 个 jar 包,一个 jmeterjava 一个 jmetercore,用 maven 因为 java 的那个 jar 包引用了 core 所以 maven 会自动下载,所以会自动导入使用。打开会有对应的包内容。如下图
  8. 到这一步导入都 OK 了。在 java 路径下新建类。编写代码文件,我这里实现了一个把指定内容写到本地指定路径下的功能

package com.lei.java.sampler;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
// 导入指定jar包

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class Request extends AbstractJavaSamplerClient implements JavaSamplerClient {

// 新增参数,可在jmeter界面上展示
    public Arguments getDefaultParameters(){
        Arguments params = new Arguments();
        params.addArgument("requestBody", "requestBody");
        params.addArgument("responseBody", "responseBody");
        params.addArgument("isWrite", "是否写");
        params.addArgument("path", "路径");
        params.addArgument("timeStamp", "时间戳");
        return params;
    }

    public void setUpTest(JavaSamplerContext context) {
        Request.super.setupTest(context);

    }
// 实现的方法
    public SampleResult runTest(JavaSamplerContext javaSamplerContext){
// 实例化请求结果的类
        SampleResult result = new SampleResult();
        result.sampleStart();
        String isWrite = javaSamplerContext.getParameter("isWrite");
// 这里可以获取到从jmeter界面上对应参数传过来的值,注意这里只能用string,也支持int之类的。看一下源码就知道了。方法不同
        String filePath = "../log/"+javaSamplerContext.getParameter("path")+"/"+javaSamplerContext.getParameter("timeStamp")+".log";
        if(isWrite.equals("1")){
            try{
                String stringText = javaSamplerContext.getParameter("requestBody");
                File file = new File(filePath);
                if(!file.exists()){
                    file.createNewFile();
                }
                FileWriter fileWriter = new FileWriter(file.getAbsoluteFile());
                BufferedWriter bw = new BufferedWriter(fileWriter);
                bw.write(stringText);
                bw.close();
// 调用方法定义请求成功
                result.setSuccessful(true);
                result.setResponseData(stringText, "utf-8");
            } catch (IOException e){
                //logger.error(e.getMessage());
                e.printStackTrace();
                result.setResponseData(e.getMessage(), (String) null);
                result.setResponseCode(e.getClass().getSimpleName());
                result.setResponseMessage(e.getMessage());
                result.setSuccessful(false);
            }
        }else{
            result.setSuccessful(true);
            return null;
        }
        result.sampleEnd();
        return result;
    }
}
  1. 代码写完后,可以自己写 main 方法测试一下。也可以不测试。直接打包。
  2. 点击右侧 maven 选项,clean 清理原来打包的内容。先双击清理一下,然后在双击 install 打包。build success 即为成功
  3. ide 会自动在项目目录下创建 target 文件夹,包在这个文件夹下面,复制到 jmeter/lib/ext/下面重启 Jmeter 即可
  4. 在 Jmeter 上面的展示,选择对应的类名称即可:

按照步骤走基本都会成功。maven 仓库下载可能会比较慢。。这个暂时这样。因为 maven 公开仓库是国外友人的。有梯子的开全局代理可能会快。

出现的截图内的项目名称,包名称,不一定符合,因为取自项目多个版本的结合。还有新建的项目。do not care

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册