JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具,100%的用java实现,大家可以到官网下载源代码和查看相关文档。

关于使用JMeter进行JDBC数据库测试、HTTP请求接口测试、结合Badboy录制功能进行网站性能测试等内容,网上的资料比较丰富,这里就暂时不做介绍了。更实用和灵活的场景,是实用我们自己编写的jar包进行测试,这也就是“Java请求”方式的测试。这里主要记录一下我在学习这种测试方式时遇到的一些问题,和总体流程,算作一个记录和小总结。

一、核心步骤

1.创建一个Java工程;

在eclipse里面新建一个工程:JavaForJMeter

2.将JMeter的lib目录下的jar文件添加进此工程的Build Path;

ApacheJMeter_core.jar(必须)、ApacheJMeter_java.jar(必须)、avalon-framework-4.1.4.jar、jorphan.jar、logkit-2.0.jar,后台3个为本地调试需要用到的包文件。创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写;

构建待测试类,添加类Hello,代码如下:

package com.test.webservice;

public class Hello {

public String sayHello()

{

return "Hello";

}

public String sayHelloToPerson(String s)

{

if(s == null || s.equals(""))

s = "nobody";

return (new StringBuilder()).append("Hello ").append(s).toString();

}

public int sum(int a,int b)

{

return a+b;

}

}

public Arguments getDefaultParameters();设置可用参数及的默认值;

public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;

public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;

public void teardownTest(JavaSamplerContext arg0):测试结束时调用;

添加类perftest,并继承AbstractJavaSamplerClient,并添加代码如下:

package com.test.webservice;

import org.apache.jmeter.config.Arguments;

import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;

import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;

import org.apache.jmeter.samplers.SampleResult;

import com.test.webservice.Hello;

public class perftest extends AbstractJavaSamplerClient {

private String a;

private String b;

/** Holds the result data (shown as Response Data in the Tree display). */

private String resultData;

// 这个方法是用来自定义java方法入参的。

// params.addArgument("num1","");表示入参名字叫num1,默认值为空。

//设置可用参数及的默认值;

public Arguments getDefaultParameters() {

Arguments params = new Arguments();

params.addArgument("num1", "");

params.addArgument("num2", "");

return params;

}

//每个线程测试前执行一次,做一些初始化工作;

public void setupTest(JavaSamplerContext arg0) {

}

//开始测试,从arg0参数可以获得参数值;

public SampleResult runTest(JavaSamplerContext arg0) {

a = arg0.getParameter("num1");

b = arg0.getParameter("num2");

SampleResult sr = new SampleResult();

sr.setSampleLabel( "Java请求哦");

try {

sr.sampleStart();// jmeter 开始统计响应时间标记

Hello test = new Hello();

// 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。

resultData = String.valueOf(test.sum(Integer.parseInt(a), Integer

.parseInt(b)));

if (resultData != null && resultData.length() > 0) {

sr.setResponseData("结果是:"+resultData, null);

sr.setDataType(SampleResult.TEXT);

}

// System.out.println(resultData);

sr.setSuccessful(true);

} catch (Throwable e) {

sr.setSuccessful(false);

e.printStackTrace();

} finally {

sr.sampleEnd();// jmeter 结束统计响应时间标记

}

return sr;

}

//测试结束时调用;

public void teardownTest(JavaSamplerContext arg0) {

// System.out.println(end);

// System.out.println("The cost is"+(end-start)/1000);

}

// main只是为了调试用,最后打jar包的时候注释掉。

/*

public static void main(String[] args)

{ // TODO Auto-generated method stub

Arguments params = new Arguments();

params.addArgument("num1", "1");//设置参数,并赋予默认值1

params.addArgument("num2", "2");//设置参数,并赋予默认值2

JavaSamplerContext arg0 = new JavaSamplerContext(params);

perftestbbb test = new perftestbbb();

test.setupTest(arg0);

test.runTest(arg0);

test.teardownTest(arg0);

}

*/

}

4.Export为Runnable Jar File:Hello.jar

5.将此Hello.jar包放入JMETER_HOME\lib\ext目录;

6.以管理员身份打开JMeter;

7.创建线程组、Java Request、查看结果树,进行测试;

总结:

这里有两点需要注意:

1. 如果你的jar依赖了其他第三方jar,需要将其一起放到lib/ext下,否则会出现ClassNotFound错误,这个问题也是困扰了我好久;

2. 如果在将jar放入lib/ext后,你还是无法找到你编写的类,且此时你是开着JMeter的,则需要重启一下JMeter。

以上就是使用JMeter的Java请求方式进行一个测试计划构建的全过程了,都是比较基础的方法,如果需要什么额外的功能还可以慢慢学习。虽然自己也有写多线程并发的客户端测试代码,并自己收集response time等,计算TPS,但显然使用JMeter的方式更加方便,因为你只需要按照单线程的方式去实现你的测试业务,也无需添加各种埋点收集数据。

综上,感觉JMeter还是很强大的,最近打算多学习一点,对以后写代码,自我测试性能也是很有帮助的,再配合jProfiler的使用,可以很好的保证Java代码的效率和性能。当然,工具只能“锦上添花”,最根本的还是需要我们自己可以编写出高质量的代码!

jmeter测试java接口测试_简单易学的测试攻略:JMeter测试Java请求示例相关推荐

  1. 返利是怎么返的_天猫超市抢券攻略

    先领券,再下单.省钱不止一点点! 你购物,我掏钱.天猫淘宝任你选! 荐好友,领佣金.你省我省大家省! 加微信:sqgwkk.一省到底! 在家的宝妈有什么可以兼职工作_返利是怎么返的_天猫超市抢券攻略 ...

  2. Interview:Java岗位面试—面试求职攻略之一个JAVA程序员面试心得(非常值得收藏)

    Interview:Java岗位面试-面试求职攻略之一个JAVA程序员面试心得(非常值得收藏) 导读 据网上资料显示:2018年互联网行业是寒冬,其他行业日子也不好过.各个互联网大厂纷纷缩招减员,严格 ...

  3. 一个简单的选品攻略,Shopee印尼站点卖家必看

    shopee印尼站是属于小语种市场现阶段适用发布英文商品,上架后会将商品标题相继译成本地语言表达,Shopee也会分配本地客服来回应顾客的询盘. 在东南亚的多个电商市场中,印尼市场是较大的,近些年印尼 ...

  4. java毕业设计峨眉山景点介绍及旅游攻略推荐平台Mybatis+系统+数据库+调试部署

    java毕业设计峨眉山景点介绍及旅游攻略推荐平台Mybatis+系统+数据库+调试部署 java毕业设计峨眉山景点介绍及旅游攻略推荐平台Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构 ...

  5. java地位_这12条理由告诉你,为什么Java的地位无法被撼动!

    从招聘信息你就可以知道,跟iOS相关的开发有2500个左右的招聘,Java则有17000多个.数据不一定能完美的衡量技术的价值,但是在不断推陈出新的技术推广压力下,Java职位是iOS的7倍之多可以说 ...

  6. java江湖2新手开局攻略_放置江湖完美开局攻略

    <放置江湖>中一个好的开局是非常重要的,小编这里就来和大家分享下其关于开局的一些攻略心得,以供参考. 具体如下: 1. 初始属性建议:目前可见的最重要属性有悟性.根骨和福缘.悟性影响向师傅 ...

  7. java丧尸围城攻略_丧尸围城全关卡流程攻略 丧尸围城怎么通关

    丧尸围城全关卡流程攻略 其实游戏全部流程不是长,只要在游戏中呆上72个小时就算通关了,当然这72小时是游戏里的时间,但是如何通关和怎么样完美通关就有另一说了,我在玩1周目的时候还不是很明白玩法,只触发 ...

  8. 阿里10W字JAVA面试手册(面试题+简历攻略)

    金九银十在即,想跳槽大厂的小伙伴们还在为面试发愁吗?10W字阿里JAVA面试手册,总有一篇可以帮助你解决烦恼. 基础篇 1.Java语言有哪些特点 2.面向对象和面向过程的区别 3.八种基本数据类型的 ...

  9. 机试记不住头文件_计算机考研机试攻略

    目录 写在前面的话 2 关于N诺 4 如何使用本书? 5 第一章 从零开始 8 1.1机试分析 8 1.2 IDE的选择与评测结果 10 1.3 DreamJudge的使用 11 1.4输入输出技巧 ...

最新文章

  1. 判断是否移动端设备的JS代码,超短,百度都用它
  2. (0051)iOS开发之沙盒(sandbox)机制和文件操作(一)
  3. 【SQL提数】case..when..then..end的使用
  4. Ubuntu编写开机自启动脚本(转载)
  5. 免费送新款华为笔记本 ! !不爱可折现!
  6. jquery: JS淘宝网产品图片局部放大代码
  7. 《精通ArcGIS Server 应用与开发》——1.5 ArcGIS 10时态
  8. ClassUtils常用方法总结,java核心技术第九版百度网盘
  9. stringByReplacingCharactersInRange: withString: 实现字符串删除,替换
  10. SpringBoot 实现接口参数加密解密功能
  11. 怎么实现单点登录?面试必问!
  12. python arduino 蓝牙_如何使用蓝牙模块从Android设备控制Arduino
  13. c语言如何读文件,如何正确用C语言读取文件
  14. Android Thermal
  15. C语言实现三子棋(代码详解)
  16. 一年之计在于春丨看, 农田里的科技范儿
  17. MySQL- 经典面试题
  18. vs2019生成的exe文件在别人电脑运行不了
  19. tcpdump win
  20. 区块链学习(8) EOS环境安装和智能合约部署实战(绝对干货!)

热门文章

  1. pandas改变dataframe的列的顺序、改变数据列的排列次序
  2. Pandas判断dataframe是否为空
  3. R语言数据横向合并cbind函数实战
  4. R语言aggregate函数数据聚合实战
  5. R语言数据类型及数据类型判断
  6. 巴菲特+查理芒格+投资理论+经典语录+给韭菜的启示
  7. 3.5.1 插入 3.5.2 修改
  8. STM32添加项目所需要的工程文件
  9. demo flink写入kafka_Flink结合Kafka实时写入Iceberg实践笔记
  10. apache php 执行shell,PHP执行普通shell命令流程解析