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

来源:互联网 发布:阿里云华东1和华东2 编辑:程序博客网 时间:2024/06/04 18:47
  • 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方法测试

0 0
原创粉丝点击