一、Jmeter完成一个java请求实现方法

两种实现方式:

实现JavaSamplerClient接口

继承AbstractJavaSamplerClient抽象类

二、使用AbstractJavaSamplerClient抽象类编写java程序

1、核心步骤

1)创建一个Maven工程;

2)本地Maven库路径确认,添加pom.xml内容,编写依赖的pom坐标;

3)Maven工程编译及调试成功;

2)本地Maven库路径确认,添加pom.xml内容,编写JMeter的pom坐标;

3)创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写;

public Arguments getDefaultParameters();//设置可用参数及其默认值,需要在jmeter中传参,进行参数化,所以需要使用这个方法进行传参

public void setupTest(JavaSamplerContext arg0)//每个线程启动时,需要做的处理,进行业务的代码实现或者调用实现方法

public SampleResult runTest(JavaSamplerContext arg0)// 方法体,开始测试,从arg0参数可以获得参数值

public void teardownTest(JavaSamplerContext arg0)//结束时,测试结束时调用,需要做的处理

4)Export为Runnable Jar File;--最好使用eclipse导出,ideal导出方法见

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

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

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

2、使用继承AbstractJavaSamplerClient类方式实现java请求类

如图,需要重写四个方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

@Override

public void setupTest(JavaSamplerContext javaSamplerContext) {

}

@Override

public SampleResult runTest(JavaSamplerContext javaSamplerContext) {

return null;

}

@Override

public void teardownTest(JavaSamplerContext javaSamplerContext) {

}

@Override

public Arguments getDefaultParameters() {

return null;

}

在jmeter中JAVA请求需要进行参数化,所以使用getDefaultParameters 方法进行传参:

1

2

3

4

5

6

7

8

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

// params.addArgument("getJsonData", "${getJsonData}");表示入参名字叫getJsonData,默认值为${getJsonData}。

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

public Arguments getDefaultParameters() {

Arguments params = new Arguments();

params.addArgument("getJsonData", "${getJsonData}");//表示入参名字叫getJsonData,默认值为${getJsonData}

return params;

}

上述代码实现左侧是代码中参数获取,右侧是默认值,取jmeter页面CSV输入参数值。

runTest中进行业务的代码实现或者调用方法实现:

1)实现业务http接口-待更新

2)实现api接口

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

public SampleResult runTest(JavaSamplerContext javaSamplerContext) {

//实例化SampleResult,用来记录运行结果

SampleResult result = new SampleResult();

//获取用户输入的变量值

String jsonDataStr = javaSamplerContext.getParameter("jsonDataStr", "");

String temp;

logger.info("jsonDataStr : ---->" + jsonDataStr);

System.out.println("jsonDataStr : ---->" + jsonDataStr);

boolean isSuc = false;

try {

result.sampleStart();//定义事务的开始

FreightRequest freightRequest  = JSONObject.parseObject(jsonDataStr, FreightRequest.class);

logger.info("freightRequest : ---->" + JSON.toJSONString(freightRequest));

System.out.println("freightRequest : ---->" + JSON.toJSONString(freightRequest));

result.setSampleLabel(getClass().getName());//设置Java Sampler标签

RemoteFtResult<FreightResponse> eResult = freightCalculateService.doFreightCalculate(freightRequest);

temp = JSON.toJSONString(eResult);

logger.info("freightResponse : ---->" + JSON.toJSONString(eResult));

System.out.println("freightResponse : ---->" + JSON.toJSONString(eResult));

result.setSamplerData(jsonDataStr.toString());//设置请求参数

result.setResponseData(temp.toString(),"utf-8");

result.setDataType(SampleResult.TEXT);//设置数据类型

if (!eResult.isSuccess() && eResult.getErrorCode() == "-99999") {

//根据接口响应和脚本目的来判断该脚本成功或失败的条件,此处为判断压测接口是否有效,判定本次请求未成功及错误code为系统错误为无效数据

isSuc = false;

logger.error("message :---> false");

result.setResponseCode("-99999");

result.setResponseCodeOK();//设置响应成功

}else {

isSuc = true;

logger.info("message :---> true");

result.setResponseCode("200");

result.setResponseCodeOK();//设置响应成功

}

} catch (Exception e) {

isSuc = false;

logger.error("e.message"+e.getMessage()+"e"+e+"e.toString"+e.toString());

result.setSuccessful(false);

} finally {

result.setSuccessful(isSuc);

result.setSuccessful(true);//设置事务结束

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

System.out.println("[Test Case] 接口 " + getClass().getName() + " 测试完毕.");

}

return result;

}

3.代码写好后,将代码进行打包操作,输出jar包,idea导包步骤见下:

(eclipse具体操作见文档 “eclipse导出可执行jar包操作”)

ps:

每次run或debug前请clean下项目,我为maven项目,idea在Maven Projects->工程->Plugins->clean,eclipse在Project->Clean...,不然容易报错。

1)右键点击工程,选择open Module Settings或点击File选择Project Structure,进入页面

2)选择Artifacts->JAR->From modules with dependencies

3)弹出对话框

为避免出现“错误: 找不到或无法加载主类 com.jd.freight.dofreight.doFreight”,请按下图步骤打包:

即:

点击OK,页面显示jar包的输出路径。点击OK,配置完成:

4)在idea菜单栏,点击Build->Build Artifacts

->

5)到指定路径 即可获取jar包

打出的包结构为:

6)测试jar包是否可用

上述步骤后会在相应工程的目录下看到一个名称为out的文件夹。其中可以找到对应的jar文件,比如本次的auto_freight_test.jar
打开终端,进入jar包路径,使用如下运行即可:
java -jar auto_freight_test.jar

如果入口类需要参数只需要在命令后面加参数以空格分割即可,如:
java -jar auto_freight_test.jar args0 args1 args2

因我编写的程序有main程序,里面有响应入参,所以调试时不需要添加参数了。

4.jmeter添加java请求

将打好的jar包及依赖包目录整体导入jmeter目录/lib/ext下,进入jmeter指定jar包路径:

创建线程组->创建Java请求->在jira请求中选择类名称,如图,添加参数->生成脚本

Jmeter察看结果树如下:

------------------------------------------------------Tanwheey--------------------------------------------------

爱生活,爱工作。

Jmeter JAVA请求入门的更多相关文章

  1. jmeter java请求

    demo下载地址http://yun.baidu.com/share/link?shareid=4277735898&uk=925574576 1.引用jmeter的jar包 到jmeter的 ...

  2. jmeter java请求:java.lang.VerifyError: Cannot inherit from final class

    被这个问题block了一天,应该是包冲突的.通过对包删减排查,结果发现是netty-all-xxx.Final.jar包的问题 应该是jmeter版本和netty版本的冲突吧,换成jmeter 3.1 ...

  3. jmeter java 请求 payload

    1.注册页面抓包看见内容如下: POST http://test.nnzhp.cn/bbs/forum.php?mod=post&action=edit&extra=&edit ...

  4. JMeter 中实现发送Java请求

    JMeter 中实现发送Java请求 1.  步骤1 新建JAVA项目 File -> New -> Java Project 如上图,填写Project Name,然后Next,打开以J ...

  5. 【JMeter】JMeter完成一个java请求的压测

    先定义一下我说的remoteService:即远程调用服务,没有http的url.不对外提供或者对外提供有限的服务.具体视各公司的代码架构所定,比如有些公司为web工程,scf服务,db.scf即为服 ...

  6. Jmeter性能测试之如何写Java请求测试用例类

    一. 引言: 最近工作中的一个项目要求做性能测试,该项目由提供服务的几个应用组成,选用的框架是阿里巴巴公司开源的服务框架Dubbo.关于Dubbo的介绍,网上也有很多资料,本人只是做了粗略的了解,没有 ...

  7. jmeter之自定义java请求性能测试

    一.环境准备         1.新建一个java工程         2.导入jar包:ApacheJMeter_core.jar     ApacheJMeter_java.jar         ...

  8. 转:JMeter进行Java 请求测试

    本文转自:http://blog.csdn.net/xiazdong/article/details/7873767 向原作者致敬,看了他的文章才让我顺利解决了JMeter测试中的问题,万分感谢! 目 ...

  9. 第二篇--Jmeter测试Java请求

    前提:需要准备eclipse作为开发工具,安装jdk,准备完毕,接下来开工喽! 1.新建Java工程BMIrisJNIJarTest,新建lib目录,将Jmeter安装目录下lib/ext包下的Apa ...

随机推荐

  1. 日志处理--高效Linux命令整理

    序 在学习使用python处理日志开始阶段,对我阻力最大的莫过于对linux的不熟悉了,有种寸步难行的感觉. 在之后乱学一通之后,发现有点对我颇有益处: 学<鸟哥linux私房菜基础学习篇> ...

  2. Cookie-based认证实现

    (使用ASP.NET 4.X 中的时候一定都用过Forms认证即FormsAuthentication做登录用户的身份认证,FormsAuthentication的核心就是Cookie,ASP.NET ...

  3. 【转】WebRTC之RTCP

    转自:https://blog.csdn.net/momo0853/article/details/88051312#RTPFBTransport_layer_FB_messagesNACKTrans ...

  4. man(2) readv writev

    #include <sys/uio.h> ssize_t readv(int fd, const struct iovec *iov, int iovcnt); unix高级环境编程中的定 ...

  5. JS基础入门篇( 三 )—使用JS获取页面中某个元素的4种方法以及之间的差别( 一 )

    1.使用JS获取页面中某个元素的4种方法 1.通过id名获取元素 document.getElementById("id名"); 2.通过class名获取元素 document.g ...

  6. 伊朗Cisco路由器遭黑客攻击 全国互联网几乎瘫痪

    2018年4月9日,黑客攻击了伊朗的国家信息数据中心.伊朗internet信息安全部称,此次大规模袭击影响了全球约二十万个思科Cisco路由交换器,也包括伊朗的几千个路由器.攻击也影响了互联网服务供应 ...

  7. man hdparm

    HDPARM(8)                                                            HDPARM(8) NAME       hdparm - 获 ...

  8. php compact()函数 语法

    php compact()函数 语法 作用:创建包含变量名和它们的值的数组.大理石构件哪家好 语法:compact(var1,var2...) 参数: 参数 描述 var1 必需.可以是带有变量名的字 ...

  9. Linux下安装Harbor 1.8.0 仓库的安装和使用(亲测)

    根据Harbor官方描述: Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全.标识和管理等,扩展了开源Docker Distri ...

  10. 阿里云数据库导出-本地mysql导入

    因阿里云数据库标准访问模式不支持外网接入 因此导出一份到本地,注意选择编码为utf8 mysql 命令行用source导入有utf8编码的sql文件时导入的数据有乱码解决办法 set names ut ...