jmeter java sampler測試java介面(一)javatest解讀
阿新 • • 發佈:2019-02-03
- 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方法測試