jmeter java sampler测试java接口(一)javatest解读

本文深入解析jmeter的Java Sampler,重点分析javatest源代码。通过getDefaultParameters()获取入参,详细解释如何设置参数并从context获取值。在runTest()方法中实现测试主体,进行sleep操作。同时,介绍了listParameters(), whoAmI()等辅助方法的用途,以及在测试初始化和构造函数中的应用。" 45075495,4873381,Java本地生成与解析二维码指南,"['Java', '二维码', '条码解析']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • jmeter在线api文档
    http://jmeter.apache.org/api/overview-summary.html
    首先分析javatest的源代码。
    getDefaultParameters()方法返回一个Arguments,这是获取入参的方法。在jmeter上创建一个java请求,选择javatest可以看到需要用户输入的参数都是在这设定的。
    1 每一个参数都必须先在类中声明为常量,常量值最好先赋值,如:
    private static final String SLEEP_NAME = “Sleep_Time”;
    jmeter窗口展示为Sleep_Time
    2 params.addArgument(SLEEP_NAME, String.valueOf(DEFAULT_SLEEP_TIME));
    (key)SLEEP_NAME - (value)用户传入/DEFAULT_SLEEP_TIME默认值
    3 通过context获取SLEEP_NAME的值
    sleepTime = context.getLongParameter(SLEEP_NAME, DEFAULT_SLEEP_TIME);
    4 当然类中还要声明
    private long sleepTime;
    public static final long DEFAULT_SLEEP_TIME = 100;
    上面4部实现了传参,sleepTime 就可以直接使用了。如果没有传值,则使用默认的100
    5 DEFAULT_SLEEP_TIME可以不申明,后面一节就没有使用默认值,代码也看起来简单点
 public Arguments getDefaultParameters() {
        Arguments params = new Arguments();
        params.addArgument(SLEEP_NAME, String.valueOf(DEFAULT_SLEEP_TIME));
        params.addArgument(MASK_NAME, DEFAULT_MASK_STRING);
        params.addArgument(LABEL_NAME, "");
        params.addArgument(RESPONSE_CODE_NAME, RESPONSE_CODE_DEFAULT);
        params.addArgument(RESPONSE_MESSAGE_NAME, RESPONSE_MESSAGE_DEFAULT);
        params.addArgument(SUCCESS_NAME, SUCCESS_DEFAULT);
        params.addArgument(SAMPLER_DATA_NAME, SAMPLER_DATA_DEFAULT);
        params.addArgument(RESULT_DATA_NAME, SAMPLER_DATA_DEFAULT);
        return params;
    }

先运行一下一个javatest请求
这里写图片描述
runTest()方法返回一个SampleResult测试结果,这是测试主体。这里的测试主体就是进行sleep的休眠,然后返回成功。出现异常则返回失败

 @Override
    public SampleResult runTest(JavaSamplerContext context) {
        setupValues(context);
        //初始化参数值

        SampleResult results = new SampleResult();
//设置results的属性 
//直接获取setupValues()里面参数的值
        results.setResponseCode(responseCode);//返回code
        results.setResponseMessage(responseMessage);//返回信息
        results.setSampleLabel(label);//samplerlabel

        if (samplerData != null && samplerData.length() > 0) {
            results.setSamplerData(samplerData);
        }

        if (resultData != null && resultData.length() > 0) {
            results.setResponseData(resultData, null);
            results.setDataType(SampleResult.TEXT);
        }

        // Record sample start time.
        //测试的启动时间
        results.sampleStart();
//测试代码
//休眠时间
        long sleep = sleepTime;
        if (sleepTime > 0 && sleepMask > 0) { // / Only do the calculation if
                                                // it is needed
            long start = System.currentTimeMillis();
            // Generate a random-ish offset value using the current time.
            sleep = sleepTime + (start % sleepMask);
        }

        try {
            // Execute the sample. In this case sleep for the
            // specified time, if any
            if (sleep > 0) {
                TimeUnit.MILLISECONDS.sleep(sleep);
            }
            results.setSuccessful(success);
        } catch (InterruptedException e) {
            LOG.warn("JavaTest: interrupted.");
            results.setSuccessful(true);
        } catch (Exception e) {
        //执行失败
            LOG.error("JavaTest: error during sample", e);
            results.setSuccessful(false);
        } finally {
            // Record end time and populate the results.
            //用例结束时间
            results.sampleEnd();
        }

        if (LOG.isDebugEnabled()) {
            LOG.debug(whoAmI() + "\trunTest()" + "\tTime:\t" + results.getTime());
            listParameters(context);
        }

        return results;
    }

listParameters()日志打印传入的参数值

private void listParameters(JavaSamplerContext context) {
        Iterator<String> argsIt = context.getParameterNamesIterator();
        while (argsIt.hasNext()) {
            String name = argsIt.next();
            LOG.debug(name + "=" + context.getParameter(name));
        }
    }

whoAmI()返回当前线程

  private String whoAmI() {
        StringBuilder sb = new StringBuilder();
        sb.append(Thread.currentThread().toString());
        sb.append("@");
        sb.append(Integer.toHexString(hashCode()));
        return sb.toString();
    }

在进行debug的时候,调用了whoAmI()和listParameters(context)方法


        if (LOG.isDebugEnabled()) {
            LOG.debug(whoAmI() + "\trunTest()" + "\tTime:\t" + results.getTime());
            listParameters(context);
        }

setupTest()初始化测试的时候用到

  public void setupTest(JavaSamplerContext context) {
        if (LOG.isDebugEnabled()) {
            LOG.debug(whoAmI() + "\tsetupTest()");
            listParameters(context);
        }
    }

初始化参数方法,相当于LR的init函数

    public void setupTest(JavaSamplerContext context) {
        if (LOG.isDebugEnabled()) {
            LOG.debug(whoAmI() + "\tsetupTest()");
            listParameters(context);
        }
    }

构造函数,每创建一个java sampler线程的时候执行一次

  public TestJavaSampler() {
        LOG.debug(whoAmI() + "\tConstruct");
    }

这里简单介绍一下javatest的源码,解析还不是很清楚,但已经不影响测试。后面介绍如何修改测试主体和传参,进行java方法测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值