Jmeter测试java请求

源代码下载地址:点此下载

之前压力测试的是注册功能的接口,写了一个jdbc request上来就根据手机号 将数据库的记录清除,但是现在的数据库手机号是加密之后的手机号,直接传一个明文的手机号是不行的,所以在调用之前要对手机号进行加密,查阅资料发现有Bean shell 和java request的两种方式,先打算使用java request方式进行压力测试。

先写一个简单的小demo,测试两个数相加

1.创建一个Java工程

2.导包

将JMeter的lib目录下 包括ext 和 junit 中的jar文件添加到工程中 尤其是ext中的ApacheJMeter_core.jar,ApacheJMeter_java.jar都是必须的,有的不是
myeclipse创建工程,导入jar包就不再说了,这里提供 idea中创建java普通工程,添加jar包,并将代码打成jar包的参考:点此查看

3.重写jmeter方法JavaTest.java

创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写方法。
package com.test;


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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * @author: wangsaichao
 * @date: 2017/12/13
 * @description:
 */
public class JavaTest extends AbstractJavaSamplerClient {


    private static final Logger logger = LoggerFactory.getLogger(JavaTest.class);


    private String num1;
    private String num2;


    /**
     * 这个方法是用来自定义java方法入参的
     * params.addArgument("num1","");表示入参名字叫num1,默认值为空。
     * @return
     */
    @Override
    public Arguments getDefaultParameters() {
        Arguments params = new Arguments();
        params.addArgument("num1", "");
        params.addArgument("num2", "");
        return params;
    }


    /**
     * 每个线程测试前执行一次,做一些初始化工作
     * 获取输入的参数,赋值给变量,参数也可以在下面的runTest方法中获取,这里是为了展示该方法的作用
     * @param arg0
     */
    @Override
    public void setupTest(JavaSamplerContext arg0) {
        num1 = arg0.getParameter("num1");
        num2 = arg0.getParameter("num2");
    }


    /**
     * 真正执行逻辑的方法
     * @param arg0
     * @return
     */
    @Override
    public SampleResult runTest(JavaSamplerContext arg0) {
        SampleResult sr = new SampleResult();
        sr.setSamplerData("请求参数num1:"+num1+"\n请求参数num2:"+num2);


        logger.info("请求参数num1:{} 请求参数num2:{}",num1,num2);


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


            int sum = Integer.parseInt(num1)+Integer.parseInt(num2);


            // 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。
            sr.setResponseData("结果是:"+sum, "utf-8");
            logger.info("结果是:{}",sum);
            sr.setDataType(SampleResult.TEXT);


            //设置响应执行成功
            sr.setSuccessful(true);
        } catch (Throwable e) {
            //有异常,执行失败
            sr.setSuccessful(false);
            e.printStackTrace();
        } finally {
            // jmeter 结束统计响应时间标记
            sr.sampleEnd();
        }
        return sr;
    }




    /**
     * 测试结束后调用
     * @param arg0
     */
    @Override
    public void teardownTest(JavaSamplerContext arg0) {


    }


    /**
     * main方法测试程序是否可用,打包时 注释掉
     * @param args
     */
//    public static void main(String[] args) {
//        Arguments params = new Arguments();
//        //设置参数,并赋予默认值1
//        params.addArgument("num1", "1");
//        //设置参数,并赋予默认值2
//        params.addArgument("num2", "2");
//        JavaSamplerContext arg0 = new JavaSamplerContext(params);
//        JavaTest test = new JavaTest();
//        test.setupTest(arg0);
//        test.runTest(arg0);
//        test.teardownTest(arg0);
//    }


}
参数介绍:
          public Arguments getDefaultParameters();可选,定义可用参数及默认值;  
          public void setupTest(JavaSamplerContext arg0):可选,测试前执行,做一些初始化工作;  
          public SampleResult runTest(JavaSamplerContext arg0);必选,实现自定义请求;  
          public void teardownTest(JavaSamplerContext arg0):可选,测试结束时调用;

4.先使用main方法测试

使用main方法测试,报以下异常

1.Intellij idea 出现错误 error:java: 无效的源发行版: 9
解决方法:idea默认给使用了jdk9的编译
①.点击File ->Project Structure...->Project 将9改成8

②.点击File ->Project Structure...->Modules 将9改成8


2.然后再次运行main报以下异常

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. Set system property 'org.apache.logging.log4j.simplelog.StatusLogger.level' to TRACE to show Log4j2 internal initialization logging.

解决方法:在classpath下添加log4j2.xml,内容如下
<?xml version="1.0" encoding="UTF-8"?>


<configuration status="error">
    <!--先定义所有的appender-->
    <appenders>
        <!--这个输出控制台的配置-->
        <Console name="Console" target="SYSTEM_OUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--这个都知道是输出日志的格式-->
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </Console>
        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
        <File name="log" fileName="log/test.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>


        <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFile" fileName="logs/app.log"
                     filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
            <SizeBasedTriggeringPolicy size="50MB"/>
        </RollingFile>
    </appenders>
    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    <loggers>
        <!--建立一个默认的root的logger-->
        <root level="trace">
            <appender-ref ref="RollingFile"/>
            <appender-ref ref="Console"/>
        </root>


    </loggers>
</configuration>

3.再次执行main方法,成功

5.将写好的代码,打成jar包并放到jmeter 的 lib/ext目录下

记得把所有额外的(自定义协议依赖的,非jmeter的)依赖包放到jmeter环境变量中

6.重启jmeter测试

创建java Sampler选择刚定义好的测试类,如下图:

创建线程组:右击测试计划 -> 添加 ->Threads(User) -> 线程组
创建java request:右击线程组 -> 添加 -> Sampler -> java请求
添加查看结果数:右击线程组 -> 添加 -> 监听器 -> 查看结果数

7.测试,结果如下图


最后,就可以根据正则表达式,提取值给其他方法使用了。


  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值