Jmeter实现自定义Java请求

15 篇文章 0 订阅
13 篇文章 1 订阅

在使用日常工作中时候有时候会遇到Jmeter功能无法满足我们的需求,这个时候就可以开发自定义的扩展组件来实现我们的需求。

Jmeter扩展组件有两种实现方式:

  1. 继承AbstractJavaSamplerClient抽象类

  2. 实现JavaSamplerClient接口

实现JavaSamplerClient接口需要实现setupTest、getDefaultParameters、runTest、teardownTest四个方法,而继承AbstractJavaSamplerClient只需要实现runTest即可。从AbstractJavaSamplerClient源码中可以看到他本身已经帮我们实现了其他三个方法,如下:

AbstractJavaSamplerClient实现其他三个方法

下面将演示如何实现一个简单的get请求。

 

1.新建一个maven工程(后面要使用maven进行打包),在pom文件中添加三个依赖,如下:

<dependencies>
    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_core</artifactId>
        <version>5.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_java</artifactId>
        <version>5.0</version>
    </dependency>

    <!--HttpClient依赖-->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.3</version>
    </dependency>
</dependencies>

 

前两个是Jmeter的依赖包,版本号要和Jmeter版本一致。第三个是HttpClient包,这里使用它完成Http请求。

 

2.创建一个MyHttpGet类,实现JavaSamplerClient 类,如下。

public class MyHttpGet implements JavaSamplerClient {

    public void setupTest(JavaSamplerContext javaSamplerContext) {
    }
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        return null;
    }
    public void teardownTest(JavaSamplerContext javaSamplerContext) {
    }
    public Arguments getDefaultParameters() {
        return null;
    }
}

 

定义两个String类型参数URLNAME和DEFAULTURL用来保存Jmeter中显示的参数名称和默认参数值。

 private static final String URLNAME = "URL";  //定义一个参数名称
 private static final String DEFAULTURL = "http://www.baidu.com";  //定义一个默认参数

 

在getDefaultParameters方法中将参数名和参数值显示到Jmeter中

    public Arguments getDefaultParameters() {
        Arguments arguments = new Arguments();
        arguments.addArgument(URLNAME,DEFAULTURL);   //将参数名称和默认参数添加到Jmeter参数中
        return arguments;
    }

 

在setupTest方法中获取Jmeter界面输入的参数

    private String inputUrl; //定义一个inputUrl用来接收输入的url
    public void setupTest(JavaSamplerContext javaSamplerContext) {
        inputUrl = javaSamplerContext.getParameter(URLNAME,DEFAULTURL);
        System.out.println("inputURL is:"+inputUrl); //将输入的url打印出来
    }

在runTest方法中写测试逻辑

private String resultData; //定义一个字符串,用来存放响应结果
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {

        SampleResult result = new SampleResult(); //创建要返回的结果对象

        result.setSamplerData("测试地址:"+inputUrl); //设置请求体中显示的内容

        HttpGet get = new HttpGet(inputUrl);  //创建一个get请求
        CloseableHttpClient httpClient = HttpClients.createDefault(); //创建一个httpClient对象

        result.sampleStart();//标记事务开始,用来统计执行时间等信息

       //发起请求,返回一个HttpResponse对象
        try {
            HttpResponse response = httpClient.execute(get);

            //获取请求结果响应码
            int statusCode = response.getStatusLine().getStatusCode();
            result.setResponseCode(String.valueOf(statusCode));  //设置响应状态码

            //获取响应码判断请求是否成功
            if (statusCode == 200){
                result.setSuccessful(true); //如果响应码是200,责判断请求成功
            }
            resultData = EntityUtils.toString(response.getEntity(),"UTF-8");//将响应结果保存到

        } catch (IOException e) {
            resultData = String.valueOf(e);  //如果请求异常,将异常结果返回
            e.printStackTrace();  //详细的异常会打印在启动窗口中
        }

        result.sampleEnd();  //标记事务结束

        result.setResponseData(resultData,"UTF-8");  //将请求结果放进result中
        result.setDataType(SampleResult.TEXT);    //设置响应结果类型
        result.setSampleLabel("自定义get请求"); //改变查看结果树中显示的名称
        return result;
    }

完成之后使用mvn clean package命令将项目打成jar包,打包完成后项目下会多出一个target目录,如图

然后将该目录下的jar包放到Jmeter的/lib/ext/目录下。

重新启动Jmeter,添加线程组->Java请求就可以看到我们自己写的java请求了。

 

再添加一个查看结果树,执行之后,如图:

图中标注了显示了SampleResult类的几个方法的作用(点击可查看大图)

 

我们再修改一下URL地址,请求一下http://www.qq.com,如下:

 

响应结果

 

 

那么,再来看一下请求失败的情况,修改请求地址为http://www.qweqweqweq.com如下:

 

响应结果,提示未知主机异常,因为根本就没有这个网址。

详细的错误信息可以在控制台查看

 

阿里云超低折扣活动再度来袭:

新用户购买 >

老用户续费>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值