- 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方法测试