写在前面

最近个人情绪不稳定、心情很不美丽,特别懒,没有博客和技术文章更新,这个文章也是迟到了一周多的时间,啰嗦完了,开始正题吧。

我们在实际做性能测试的时候,一般会采用jmeter、Lr进行测试,但是很少有同学用jmeter的测试Java请求,也可以这么说,一般是开发自己搞的多一些。

准备工作

自己编写一个接口(我用springboot随便写了一个,需要的可以加我好友)

新建一个maven工程

pom文件引用ApacheJMeter_core.jar     ApacheJMeter_java.jar

写代码前该知道的

1、创建类的时候需要去继承AbstractJavaSamplerClient抽象类或者是实现JavaSamplerClient接口

我在这里只继承AbstractJavaSamplerClient抽象类,需要复写的方法有:

public SampleResult runTest(JavaSamplerContext context) {}

public void setupTest(JavaSamplerContext context) {}

public void teardownTest(JavaSamplerContext context) {}

public Arguments getDefaultParameters() {}

2、针对复写方法说明:

public Arguments getDefaultParameters() {}

这个方法由Jmeter在进行添加javaRequest时第一个运行,它决定了你要在GUI中默认显示出哪些属性。

public void setupTest(JavaSamplerContext context) {}

这个方法相当于loadrunner中的init,我们可以用它来进行一些初始化的动作。

public SampleResult runTest(JavaSamplerContext context) {}

这个方法相当于loadrunner中的action,我们的核心测试代码就在这里了。

public void teardownTest(JavaSamplerContext context) {}

这个方法相当于loadrunner中的end,收尾的工作可以由它来做。

示例代码

packagecom.jmeter.demo;importorg.apache.http.HttpEntity;importorg.apache.http.NameValuePair;importorg.apache.http.client.ClientProtocolException;importorg.apache.http.client.config.RequestConfig;importorg.apache.http.client.entity.UrlEncodedFormEntity;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.HttpClients;importorg.apache.http.message.BasicNameValuePair;importorg.apache.http.util.EntityUtils;importorg.apache.jmeter.config.Arguments;importorg.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;importorg.apache.jmeter.protocol.java.sampler.JavaSamplerContext;importorg.apache.jmeter.samplers.SampleResult;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importjava.io.IOException;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;/***@authorrongrong

* jmeter之自定义java请求性能测试*/

public class JmeterForJavaTest extendsAbstractJavaSamplerClient {private static final Logger log = LoggerFactory.getLogger(AbstractJavaSamplerClient.class);//测试结果

privateSampleResult sr;private static String lable = "放大招了奥!";/*** 初始化性能测试时,每个测试线程

*

*@paramcontext*/@Overridepublic voidsetupTest(JavaSamplerContext context) {

log.debug(getClass().getName()+ ": setupTest");

}/*** 主要设置传入的参数

*

*@return

*/@OverridepublicArguments getDefaultParameters() {

Arguments arguments= newArguments();

arguments.addArgument("url", "http://localhost:8888/login?");

arguments.addArgument("userName", "rongrong");

arguments.addArgument("passWord", "123456");returnarguments;

}/*** 为性能测试的运行体

*

*@paramcontext

*@return

*/@OverridepublicSampleResult runTest(JavaSamplerContext context) {

String url= context.getParameter("url");

String userName= context.getParameter("userName");

String passWord= context.getParameter("passWord");

String sbResultData= null;

sr= newSampleResult();

sr.setSampleLabel(lable);//记录测试时间及结果

sr.sampleStart();//执行请求

sbResultData =executRequest(url, userName, passWord, sbResultData);

sr.setSuccessful(true);

sr.setResponseCode("200");

sr.setResponseCodeOK();

sr.setRequestHeaders("这是个header呀,但是我就没写呀");

sr.setResponseMessage("这块是自己瞎写的呀,测试是不是该严谨些呢");

sr.setContentType("application/json 没想到这块我也要皮一下呢");//将数据打印到查看结果树当中

sr.setResponseData(sbResultData, null);

sr.setDataType(SampleResult.TEXT);returnsr;

}/*** 模拟接口请求

*

*@paramurl

*@paramuserName

*@parampassWord

*@paramsbResultData

*@return

*/

privateString executRequest(String url, String userName, String passWord, String sbResultData) {

CloseableHttpClient httpClient= null;

HttpPost httpPost= null;try{

httpClient=HttpClients.createDefault();

RequestConfig requestConfig= RequestConfig.custom().setSocketTimeout(20000).setConnectTimeout(20000).build();

httpPost= newHttpPost(url);

httpPost.setConfig(requestConfig);

List ps = new ArrayList();

Map params = new HashMap();

params.put("userName", userName);

params.put("passWord", passWord);for(String pKey : params.keySet()) {

ps.add(newBasicNameValuePair(pKey, params.get(pKey)));

}

httpPost.setEntity(newUrlEncodedFormEntity(ps));

CloseableHttpResponse response=httpClient.execute(httpPost);

HttpEntity httpEntity=response.getEntity();

sbResultData= EntityUtils.toString(httpEntity, "utf-8");

}catch(ClientProtocolException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}finally{try{if (httpPost != null) {

httpPost.releaseConnection();

}if (httpClient != null) {

httpClient.close();

}

}catch(IOException e) {

e.printStackTrace();

}

}returnsbResultData;

}

@Overridepublic voidteardownTest(JavaSamplerContext context) {

log.debug(getClass().getName()+ ": teardownTest");

}

}

jmeter运行java代码

将代码打包成jar包

把打包成的jar放在\apache-jmeter-5.1.1\lib\ext路径下

打开jmeter,添加线程组,再添加一个java请求,如下图:

添加查看结果树,运行后结果如下:

补充事项

如果我们的代码在运行时发生异常,就会被打印在doc窗口中

我这里没有发生异常,所以没有数据,当发生异常时就会打印在这里。注意观察,有助于调试代码

总结

继承了AbstractJavaSamplerClient后,可以对测试结果,做很多处理,这里仅仅做了一个抛砖引玉,上面的代码只是模拟了HTTP请求,实际意义不大。

但是当我们需要进行一段代码的性能测试的时候,可以通过这样的形式来进行书写,并且在runTest方法中进行调用后,那么就可以测试出这段代码的性能如何了。

参考文章:https://www.cnblogs.com/lingfengblogs/p/4269587.html

附接口服务启动图:

jmeter java性能_jmeter之自定义java请求性能测试相关推荐

  1. java 自定义报表_图解自定义java报表菜单实现五大步

    1.写一个Java文件如SaveReportAction所示,其包名为com.demo,编译这个Java文件为类文件,保存到设计器的classpath下面.代码如下: package com.demo ...

  2. jmeter测试java服务_Jmeter 测试 JMS (Java Message Service)/ActiveMQ 性能

    前言 JMS 介绍:JMS 即 Java 消息服务(Java Message Service)应用程序接口,是一个 Java 平台中关于面向消息中间件(MOM)的 API,用于在两个应用程序之间,或分 ...

  3. jmeter java性能_jmeter java性能测试

    本篇文章主要讲解jmeter如何测试java请求,以项目中某个接口为例,请求数据为post,返回也为post 1:新建maven工程,pom文件为 1 2 xsi:schemaLocation=&qu ...

  4. Java性能优化推荐书!java原生开发是什么意思

    01 前言 辛苦奋斗两个月,秋招终于圆满收官,拿到了头条.字节.菜鸟.腾讯.网易的offer,这要多亏了意外得到的这份资料文档,这么多面试全都靠它了,哈哈~~有好东西还是要分享出来给大家,一起学习呀 ...

  5. 推荐:Java性能优化系列集锦

    Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难.随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了.现代JVM持续演 ...

  6. 【转发】关于Java性能的9个谬论

    转载请注明出处,感谢大家的支持! 本文来自优优码:http://www.uucode.net/201502/9%e4%b8%aa%e8%b0%ac%e8%ae%ba Java的性能有某种黑魔法之称.部 ...

  7. aix系统java堆_浅谈AIX环境下的Java性能调优

    1.什么是Java Java 是一种面向对象的编程语言.它以 C++ 为模型,被设计成小的.简单的.在源和二进制级别跨平台的可移植的语言,Java 程序(applets 和应用程序)可以运行于任何已经 ...

  8. 拿着阿里这份Java性能调优手册,我把公司项目性能提升了300%

    程序的性能受代码质量的直接影响.那么该如何让代码在级别上提升系统性能呢? 其实性能提升永远没有捷径,需要 分析.优化.实验.监控 ,需要一点点积累和深入.随着你对项目和性能优化理解不断深入,会发现提升 ...

  9. Java性能的9个谬论

    Java的性能有某种黑魔法之称.部分原因在于Java平台非常复杂,很多情况下问题难以定位.然而在历史上还有一种趋势,人们靠智慧和经验来研究Java性能,而不是靠应用统计和实证推理.在这篇文章中,我希望 ...

最新文章

  1. java byte xml_Java XMLInputSource.setByteStream方法代码示例
  2. mysql “group by ”与order by的研究--分类中最新的内容
  3. Motan的SPI机制实现分析
  4. 错误:无法访问android.app.Activity 找不到android.app.Activity的类文件
  5. Java高并发系统的限流策略
  6. Django forms组件
  7. java 参数传值的练习题及答案_04_javaSE面试题:方法的参数传递机制
  8. CAN分析仪:便携式CAN总线分析仪
  9. 软件需求分析模板2020-11-04
  10. poi excel 隐藏行
  11. 单位内网视频会议怎么开
  12. Mobileye自动驾驶汽车在纽约市开跑
  13. CleanMyMac X如何维护脚本 优化mac电脑系统
  14. 二寸证件照尺寸怎么调?这两个方法让你在家也能制作证件照
  15. 理解LaaS、SaaS、PaaS的含义及区别
  16. error execution phase preflight: couldn‘t validate the identity of the API Server: Get
  17. runauto 病毒
  18. [APIO2009]采油区域 题解
  19. Python 网络爬虫实战:去哪儿网旅游攻略图文爬取保存为 Markdown电子书
  20. Raspberry-Pi-PICO系列--第八篇 高级篇使用SWD接口下载和调试(第二章)

热门文章

  1. 自创算法——暴力自动机
  2. 为什么C++编译器不能支持对模板的分离式编译
  3. SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(2)-粒子受力分析
  4. dict实现原理 python_5分钟看懂系列:Python 线程池原理及实现
  5. Java和JavaScript的主要区别之处在哪里?
  6. github采集器 开源_GitHub关键字扫描开源工具推荐
  7. 在 Delphi 6 中使用 Hashtable
  8. JQuery根据值设置radio选中
  9. 【SDK】Memory read error at 0xF8007080
  10. EasyUI numbox输入框,金额格式化显示