赞
踩
在使用日常工作中时候有时候会遇到Jmeter功能无法满足我们的需求,这个时候就可以开发自定义的扩展组件来实现我们的需求。
Jmeter扩展组件有两种实现方式:
继承AbstractJavaSamplerClient抽象类
实现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如下:
响应结果,提示未知主机异常,因为根本就没有这个网址。
详细的错误信息可以在控制台查看
阿里云超低折扣活动再度来袭:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。