亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-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
主站蜘蛛池模板: 在线视频不卡国产在线视频不卡 | 久操视频在线观看 | 阿v精品一区二区三区 | 国产精品久久女同磨豆腐 | 欧美久久一区二区三区 | 日本不卡免费在线 | 国产高清一区二区 | 亚洲高清一区二区三区四区 | 欧美亚洲国产另类 | 久久99精品国产麻豆婷婷 | 一级毛片在线看在线播放 | 五月婷婷精品 | 黄色片在线视频 | 国产一级特黄aa大片在线 | 欧美亚洲国产视频 | 久久曹| 操操网站| 欧美日本一区二区三区道 | 欧美日本一区二区三区道 | 蜜桃社尤物馆美女图片 | 免费成年视频 | 一级黄色录像视频 | 国产精品短视频免费观看 | 一本到视频 | 日韩a级片在线观看 | 五月天婷婷综合 | 动漫精品成人免费网站 | 天天摸天天干天天操 | 一区二区视频在线观看 | 激情文学综合丁香 | 偷亚洲偷国产欧美高清 | 国产专区一va亚洲v天堂 | 国产成人欧美视频在线 | 日韩在线观看视频黄 | 黑丝套图| 成人a毛片免费观看网站 | 成年男女男免费视频网站不卡 | 97碰视频人人做人人爱欧美 | 婷婷在线视频 | 奇米伊人 | 国产一区二区中文字幕 |