[英]JMeter JSR223 Listener for ExtentReports needs improvement
我編寫了一個新的JSR223偵聽器,將測試結果寫到一個rangereports html報告中。 這很好,但可以改進。 我只是不確定改善它的最佳方法。 我看到的一個具體問題是儀表板的“花費的時間”值。 它顯示了最后一個采樣器運行的開始/結束時間。 應該將第一個采樣器的時間顯示為開始時間,將結束采樣器的時間顯示為結束時間,並應從這兩個日期時間中獲取“花費的時間”值。 您能否看一下我的偵聽器腳本並分享您可能有的任何建議?
測試計划設置:在線程組中,我有HTTP Request采樣器登錄,執行一個操作然后注銷。 在線程組的根目錄下,我在BeanShell斷言中包含以下代碼:
//request data
String requestData = new String(prev.SamplerData);
//String requestData = new String(requestData);
props.put("propRequestData", requestData);
//response data
String respData = new String(prev.ResponseData);
//String respData = new String(prev.getResponseDataAsString());
props.put("propResponse", respData);
//response code
String respCode = new String(prev.ResponseCode);
props.put("propRespCode",respCode);
//response message
String respMessage = new String(prev.ResponseMessage);
props.put("propRespMessage",respMessage);
在我的測試計划的基礎上,我有以下JSR223偵聽器代碼:
import com.aventstack.extentreports.*;
import com.aventstack.extentreports.reporter.*;
import com.aventstack.extentreports.markuputils.*;
ExtentHtmlReporter htmlReporter;
ExtentReports extent;
ExtentTest test;
// create the HtmlReporter
htmlReporter = new ExtentHtmlReporter("C:/AUTO_Results/Results_${testApp}_${reportDate}_${currentTime}_${testenv}.html");
//configure report
htmlReporter.config().setCreateOfflineReport(true);
htmlReporter.config().setChartVisibilityOnOpen(true);
htmlReporter.config().setDocumentTitle("${testApp} Results");
htmlReporter.config().setEncoding("utf-8");
htmlReporter.config().setReportName("${testApp} Results ${reportDate}_${currentTime}_${testenv}");
htmlReporter.setAppendExisting(true);
// create ExtentReports
extent = new ExtentReports();
// attach reporter to ExtentReports
extent.attachReporter(htmlReporter);
extent.setReportUsesManualConfiguration(true);
// Show Env section and set data on dashboard
extent.setSystemInfo("Tool","JMeter");
extent.setSystemInfo("Test Env","${testenv}");
extent.setSystemInfo("Test Date","${reportDate}");
extent.setSystemInfo("Test Time","${currentTime}");
//stringify test info
String threadName = sampler.getThreadName();
String samplerName = sampler.getName();
String requestData = props.get("propRequestData");
String respCode = props.get("propRespCode");
String respMessage = props.get("propRespMessage");
String responseData = props.get("propResponse");
// create test
test = extent.createTest(threadName+" - "+samplerName);
//test.assignCategory("API Testing");
// analyze sampler result
if (vars.get("JMeterThread.last_sample_ok") == "false") {
log.error("FAILED: "+samplerName);
print("FAILED: "+samplerName);
test.fail(MarkupHelper.createLabel("FAILED: "+sampler.getName(),ExtentColor.RED));
} else if (vars.get("JMeterThread.last_sample_ok") == "true") {
if(responseData.contains("@error")) {
log.info("FAILED: "+sampler.getName());
print("FAILED: "+sampler.getName());
test.fail(MarkupHelper.createLabel("FAILED: "+sampler.getName(),ExtentColor.RED));
} else if (responseData.contains("{")) {
log.info("Passed: "+sampler.getName());
print("Passed: "+sampler.getName());
test.pass(MarkupHelper.createLabel("Passed: "+sampler.getName(),ExtentColor.GREEN));
}
} else {
log.error("Something is really wonky");
print("Something is really wonky");
test.fatal("Something is really wonky");
}
//info messages
test.info("RequestData: "+requestData);
test.info("Response Code and Message: "+respCode+" "+respMessage);
test.info("ResponseData: "+responseData);
//playing around
//markupify json into code blocks
//Markup m = MarkupHelper.createCodeBlock(requestData);
//test.info(MarkupHelper.createModal("Modal text"));
//Markup mCard = MarkupHelper.createCard(requestData, ExtentColor.CYAN);
// test.info("Request "+m);
// test.info(mCard);
// test.info("Response Data: "+MarkupHelper.createCodeBlock(props.get("propResponse")));
// test.info("ASSERTION MESSAGE: "+props.get("propAssertion"));
// end the reporting and save the file
extent.flush();
您在JSR223偵聽器中看到的$ {variables}是在用戶定義的變量元素中定義的。 我正在使用:我的lib文件夾中的jmeter-3.2tentreports-pro-3.0.5.jar
您的結束時間很好(結束采樣器),您需要的是第一個采樣器的開始
我認為您可以使用START預定義屬性 :
START屬性也將復制到具有相同名稱的變量。
- START.MS-JMeter的開始時間(以毫秒為單位)
- START.YMD-JMeter的開始時間為yyyyMMdd
- START.HMS-JMeter的開始時間為HHmmss
- TESTSTART.MS-測試開始時間(以毫秒為單位)
將JSR223 PostProcessor添加到第一個采樣器並將開始時間添加到變量的另一種選擇:
log.info("start time is " + prev.getStartTime() );
vars.put("startTimeFirstSample", "" + prev.getStartTime() );
在測試期間,我得到了以下解決方法。 1.在設置線程組中,我添加了一個JSR223采樣器,其代碼如下:
log.info("--------------Initialize");
import java.time.Duration;
import java.time.Instant;
Instant myStart = Instant.now();
props.put("varmyStart",myStart);
log.info("Test Start time: ---- "+props.get("varmyStart"));
//response
props.put("propResponse","Test Start time { "+props.get("varmyStart")+" }");
SampleResult.setResponseData(props.get("propResponse"));
在拆卸線程組中,我添加了一個JSR223采樣器,其代碼如下:
log.info("---------------End Test JSR223Sampler"); //props.put("varEndTest","Yes"); import java.time.Duration; import java.time.Instant; Instant myEnd = Instant.now(); props.put("varmyEnd",myEnd); log.info("varmyEnd---- "+props.get("varmyEnd")); Duration timeElapsed = Duration.between(props.get("varmyStart"), props.get("varmyEnd")); //millis props.put("varTimeTakenMS",timeElapsed.toMillis().toString()); log.info("prop varTimeTaken(MS): --"+props.get("varTimeTakenMS")); //seconds props.put("varTimeTakenSEC",timeElapsed.getSeconds()); log.info("prop varTimeTaken(SEC): --"+props.get("varTimeTakenSEC")); //minutes props.put("varTimeTakenMINS",timeElapsed.toMinutes().toString()); log.info("prop varTimeTaken(MINS): --"+props.get("varTimeTakenMINS")); //response props.put("propResponse","Test End time { "+props.get("varmyEnd")+" }. Test Duration: "+props.get("varTimeTakenMINS")+" Minutes"); SampleResult.setResponseData(props.get("propResponse"));
在偵聽器代碼中的// Show Env部分下並在儀表板上設置數據,我添加了以下幾行:
//extent.setSystemInfo("Actual Test Duration(ms)",props.get("varTimeTakenMS")+" milliseconds"); extent.setSystemInfo("Actual Test Duration(seconds)",props.get("varTimeTakenSEC")+" seconds"); extent.setSystemInfo("Actual Test Duration(mins)",props.get("varTimeTakenMINS")+" minutes");
它雖然不漂亮,但是卻給了我所需的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.