zoukankan      html  css  js  c++  java
  • Jmeter JAVA请求入门

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

     

    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--------------------------------------------------

    爱生活,爱工作。

  • 相关阅读:
    [PKUWC2018][LOJ2537]Minimax(线段树合并)
    [NOI2019][洛谷P5471]弹跳(dijkstra+KD-Tree)
    [BZOJ4770]图样(概率期望、二进制数位dp)
    [SPOJ11482][BZOJ2787]Count on a trie(广义SA+长链剖分+BIT)
    [HEOI/TJOI2016][洛谷P4094]字符串(SA+主席树)
    [BZOJ3270]博物馆(矩阵求逆)
    [NOI2016][洛谷P1117]优秀的拆分(SA)
    [NOI2018][洛谷P4770]你的名字(SAM+SA+主席树)
    设置echarts两个y轴的0点一致
    echarts中饼图或环形图的高亮效果(点击高亮/默认某一条高亮)
  • 原文地址:https://www.cnblogs.com/Tanwheey/p/11699327.html
Copyright © 2011-2022 走看看