Jmeter JAVA请求入门

摘要:
实现JavaSamplerClient接口以继承AbstractJavaSamplerClient抽象类II。使用AbstractJavaSamplerClient抽象类编写java程序1。核心步骤1)创建Maven项目;因此,您需要使用此方法在每个线程启动时传输公共void setupTest(JavaSamplerContext arg0)//。

一、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_HOMElibext目录;

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输入参数值。

 Jmeter JAVA请求入门第1张

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,进入页面

 Jmeter JAVA请求入门第2张

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

Jmeter JAVA请求入门第3张 

 

 3)弹出对话框

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

 Jmeter JAVA请求入门第4张

即:

 Jmeter JAVA请求入门第5张

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

 Jmeter JAVA请求入门第6张

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

 Jmeter JAVA请求入门第7张->Jmeter JAVA请求入门第8张

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

 Jmeter JAVA请求入门第9张

打出的包结构为:

 Jmeter JAVA请求入门第10张

 6)测试jar包是否可用

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

Jmeter JAVA请求入门第11张

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

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

4.jmeter添加java请求

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

 Jmeter JAVA请求入门第12张

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

 Jmeter JAVA请求入门第13张

Jmeter察看结果树如下:

 Jmeter JAVA请求入门第14张

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

爱生活,爱工作。

免责声明:文章转载自《Jmeter JAVA请求入门》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇11、序列比对opencv配置过程 (cmake,vs2013,qt 5.4)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

k8s架构

  master节点 k8s的集群由master和node组成,节点上运行着若干k8s服务。 master节点之上运行着的后台服务有kube-apiserver 、kube-scheduler、kube-controller-manager、etcd和pod网络。如下图所示 1. API Server(kube-apiserver) API Server...

[转]C/C++实现回调机制的几种方式(回调、槽、代理)

转自:https://www.jianshu.com/p/4f907bba6d5f (1)Callback方式(回调) Callback的本质是设置一个函数指针进去,然后在需要需要触发某个事件时调用该方法, 比如Windows的窗口消息处理函数就是这种类型。比如下面的示例代码,我们在Download完成时需要触发一个通知外面的事件: #include...

如何实现table表格中的button按钮有加载中的效果

一、如何实现table表格中的button按钮有加载中的效果 效果:  前端代码: <el-table-column label="送货单信息" align="center" width="110"> <template slot-scope="scope"> <el-button slo...

一文带你搞定AOP切面

摘要:AOP在spring中又叫“面向切面编程”,是对传统我们面向对象编程的一个补充,主要操作对象就是“切面”,可以简单的理解它是贯穿于方法之中,在方法执行前、执行时、执行后、返回值后、异常后要执行的操作。 本文分享自华为云社区《一篇文搞懂《AOP面向切面编程》是一种什么样的体验?》,作者: 灰小猿。 一、什么是Spring的AOP? AOP在sprin...

C# Cache 设定缓存过期时间方法 绝对过期时间 和 相对过期时间(即:访问激活后不过期)

摘自: http://www.cnblogs.com/zj1111184556/p/3493840.html 1. 设定绝对过期时间 /// <summary> /// 设定绝对的过期时间 /// </summary> /// <param name="CacheKey"&...

03生成微博授权的url接口(再也没有你了)

生成微博授权url接口 (再也没有你了) 相信朋友们对微博开放平台的使用以及有了进一步的了解,那么接下来我们来看看怎么使用微博开放平台: 1.创建apps/oauth模块进行oauth认证 '''1.1在apps文件夹下新建应用: oauth''' cd syl/apps python ../manage.py startapp oauth # 切换到a...