亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > TestNG
如何利用TestNG監聽器優化測試報告?
作者:runtime_ 發布時間:[ 2016/10/18 15:47:52 ] 推薦標簽:單元測試工具 TestNG

  今年四月底我花了時間簡單搭建了php接口測試工程,maven + testng + jenkins,從0開始到現在510個用例(持續增長中),逐漸開始提高了測試回歸效率并發現一些線上問題,這期間遇到過不少問題,這次先分享下如何利用testng監聽器優化測試報告。
  一、給工程添加失敗重試機制
  接口用例量上來以后,我們遇到的第一個問題是http方式調用php接口會有部分接口偶爾不穩定或者超時的情況,但第二次運行又正常,每次接口失敗都需要花費時間排查,但實際沒有問題,為了排除不穩定帶來的干擾,給大家節約排查維護時間,首先需要解決的是給工程添加失敗自動重試機制。
  目前我的做法是實現了testng自帶的IRetryAnalyzer接口,定義了一個MAX _ RETRY_COUNT,即大重試次數,實現的retry方法非常簡單,如下:
public boolean retry(ITestResult result) {
if (retryCount < MAX_RETRY_COUNT) {
retryCount++;
return true;
}
return false;
}
  如果團隊有人想要使用失敗重試的功能也很簡單,只需要在Annotation里面加上retryAnalyzer屬性即可,如下:
@Test(retryAnalyzer = TestRetry.class)
public void summaryTest(){
String url = urlList.get(0);
JSONObject map = ResponseJsonBase.manageJson(url, "");
String total = map.getString("total");
assert "7.59".equals(total) : url;
}
  這種方式帶來的好處是有比較大的自由度,可以自由選擇某個用例是否需要失敗重試的功能,因為部分接口重試第二次是不允許的,比如分銷的關注接口(有頻率限制等)。 但是僅僅到這里還是會有問題,首先會發現我們的接口測試報告有問題,其次會發現失敗重試后通過的情況下,依然會有郵件提醒,我們還是需要花費很多時間看接口問題。在這里,我為了復現當時遇到的問題,隨便造了一個有問題的接口測試報告:

  二、通過定義一個監聽器優化測試報告
  根據遇到的問題,首先我們需要優化一下測試報告,從而避免給大家帶來太多干擾。 我的做法是定義了一個testng的監聽器來處理失敗重試的用例。具體實現是通過繼承TestListenerAdapter類,覆蓋onTestFailure、 onStart、 onFinish方法,貼一下主要的代碼段:
@Override
public void onTestFailure(ITestResult tr) {
if (tr.getMethod().getRetryAnalyzer() == null) {
log(tr.getMethod() + "--Test method failed ");
}
if (tr.getMethod().getRetryAnalyzer() != null) {
TestRetry testRetry = (TestRetry)       tr.getMethod().getRetryAnalyzer();
if (testRetry.getRetryCount() < testRetry.getMaxRetryCount()) {
tr.setStatus(ITestResult.SKIP);
Reporter.setCurrentTestResult(null);
isRemoveSkipNeeded = true;
skippedCases.addResult(tr, tr.getMethod());
}
else {
failedCases.addResult(tr, tr.getMethod());
isRetryNeeded = true;
}
}
}
  其實上面代碼里面是統一對失敗的用例做處理,每次失敗都會去判斷是否已經達到大失敗次數,如果沒有,會將該用例狀態設置為skip,到這里為止,看我們的測試報告,大概長這樣:

  可以看到,依然有很明顯的問題,我們還需要做的事情是:失敗的用例列表去重,以及在Skipped的testcase里面剔除真正Failed的Test Case。 其實測試報告的主要數據獲取是下面幾個:
  getFailedConfigurations()
  getSkippedConfigurations()
  getFailedTests()
  getSkippedTests()
  做對應優化很簡單了,貼下我這邊failed Cases去重的代碼段,可以舉一反三寫其他幾個:
private void removeFailedTestsInTestNG(ITestContext test) {
IResultMap returnValue = test.getFailedTests();
for (ITestResult resultToCheck : failedCases.getAllResults()) {
int c = 0;
for (ITestResult result : returnValue.getAllResults()) {
if (result.getMethod().equals(resultToCheck.getMethod())) {
c++;
if (c > 1) {
returnValue.removeResult(result.getMethod());
test.getFailedConfigurations().removeResult(
result.getMethod());
}
}
}
}
}
  然后是在每個testSuit運行結束的時候,統一處理:
@Override
public void onFinish(final ITestContext testContext) {
if(isRetryNeeded){
removeIncorrectlySkippedTests(testContext,failedCases);
removeFailedTestsInTestNG(testContext);
}
else{
if(isRemoveSkipNeeded)
removeSkippedTestsInTestNG(testContext);
else{
skippedCases= testContext.getSkippedTests();
failedCases= testContext.getFailedTests();
}
}
}

上一頁12下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 日韩欧美精品在线观看 | 欧美视频一区在线观看 | 成年人黄视频 | 亚洲18av | 免费在线观看污污视频 | 在线日韩亚洲 | 国产精品毛片天天看片 | 青草国产精品久久久久久久久 | 在线天堂中文在线网 | 日韩成人在线观看视频 | 天天做天天添天天谢 | 欧美在线中文 | 欧美不卡精品中文字幕日韩 | 琪琪午夜免费影院在线观看 | 国产精品亚洲国产三区 | 日韩午夜小视频 | 亚州一级毛片 | 成人免费毛片视频 | 在线视频日韩欧美 | 欧美日韩免费看 | 看黄a大片 免费 | 欧美日一区 | 波多野野结衣1区二区 | 免费吃奶摸下激烈视频青青网 | 成人污| 亚洲国产精品久久久久久 | 在线观看日本一区 | 香蕉大伊亚洲人在线观看 | 天天曰天天干 | gogo全球高清大尺度美女人体 | 日韩成人黄色片 | 欧美成人一区二区三区在线视频 | 国产区精品一区二区不卡中文 | 99在线视频免费 | 性freexxxxhd欧美在线 | 无遮挡免费视频 | 无遮挡1000部拍拍拍免费观看 | 国产日韩欧美亚洲精品95 | 欧美18-19| 一区二区网站在线观看 | 欧美成人精品一区二三区在线观看 |