TestNG 監聽器擴展插件:NetEase Arrow

jopen 10年前發布 | 214K 次閱讀 TestNG 單元測試

TestNG 是一個設計用來簡化廣泛測試需求的 測試框架,旨在涵蓋所有類型的測試,包括單元測試、功能測試、端到端集成測試等,而我們在基于TestNG搭建自動化測試框架,編寫測試用例時,為保證測試用例的穩定性,需要增加測試用例失敗自動重跑功能,這便促成了Arrow 的誕生。 Arrow是基于TestNG監聽器擴展的插件,如果把TestNG比作一把強勁的弓,那么插件就是配合弓使用的箭,這也是Arrow命名的由來。

一、Arrow功能介紹

1、  支持通過簡單配置實現失敗的測試用例自動重跑

2、  支持Html結果報告中展示測試用例運行次數

3、  支持自動解析源代碼中的@author標簽,在Html結果報告中展示(失敗用例可以方便查找維護者)

4、  修復TestNG原生Html報告中錨點跳轉不正確的Bug

俗話說,眼見為實耳聽為虛,下面就帶大家看看實際效果圖吧!

二、Arrow使用效果

使用Arrow插件運行基于TestNG的測試用例后會生成我們自定義的報告power-emailable-report.html,下圖1顯示 在測試用例中書寫@author標簽,使用arrow執行完用例后生成如圖2的結果報告,報告中會自動讀取authors信息以及running counts運行次數,通過authors信息方便自動獲取到該用例的維護者,通過running counts方便知道當前用例是否失敗重跑。

TestNG 監聽器擴展插件:NetEase Arrow 

                      圖1

TestNG 監聽器擴展插件:NetEase Arrow

                      圖2

三、如何使用Arrow

使用Arrow無需修改原有的測試代碼

1、  首先你需要有一套TestNG編寫的測試用例

2、  測試工程中需要testng.jar(核心不能忘!),log4j.jar(用于日志的輸出)以及我們提供的arrow.jar

3、  測試工程根目錄下新建config.properties文件,同時配置如下參數

retrycount=1 #定義重跑次數,不是必填項, 默認值是0,即失敗不重跑

sourcecodedir=src #定義源代碼路徑,不是必填項, 默認值是src

sourcecodeencoding=UTF-8 #定義源代碼編碼,不是必填項,默認值是utf-8

4、  在build.xml文件中加入監聽器,配置如下,配置完成后通過ant運行TestNG測試用例后可以在生成的Html結果報告中查看效果

<target name="testng">
<mkdir dir="test-output" />
<testng outputDir="test-output"
haltonfailure="false" listeners="com.netease.qa.testng.PowerEmailableReporter,
com.netease.qa.testng.RetryListener, com.netease.qa.testng.TestResultListener">
<xmlfileset dir="." includes="testng.xml" />
</testng>
</target>

5、  如果您不習慣4的做法,可以在testng.xml中加入如下的監聽器,配置完成后右鍵testng.xml文件運行測試用例即可

<listeners>
<listener class-name="com.netease.qa.testng.TestResultListener" />
<listener class-name="com.netease.qa.testng.RetryListener" />
<listener class-name="com.netease.qa.testng.PowerEmailableReporter" />
</listeners>

四、Arrow擴展-失敗用例自動截圖

由于截圖功能在不同的測試框架上API會不同,所以當前Arrow中沒有把這個功能集成進來,但是如果你需要該功能也可以很方便的進行擴展。

1、 下載Arrow的源代碼

2、 修改TestResultListener類,在onTestSkipped以及onTestFailure方法中加入如下代碼

       @Override
        public void onTestFailure(ITestResult tr) {
               super.onTestFailure(tr);
               saveScreenShot(tr);
        }

        @Override
        public void onTestSkipped(ITestResult tr) {
               super.onTestSkipped(tr);
               saveScreenShot(tr);
        }

        private void saveScreenShot(ITestResult tr) {
               SimpleDateFormat formatter = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
               String mDateTime = formatter.format(new Date());
               String fileName = mDateTime + "_" + tr.getName();
               String filePath = "";
               try {
                   //這里可以調用不同框架的截圖功能
                   File screenshot = ((TakesScreenshor)webdriver).getScreenshotas(OutputType.FILE);
                   filePath = “screenshot/” + filename + “.jpg”
                   File destFile = new File(filePath);
                   FileUtils.copyFile(screenshot, destFile);

               } catch (Exception e) {
                       filePath = fileName + " firefox tackScreentshot Failure:" + e.getMessage();
                       logger.error(filePath);
               }

               if (!"".equals(filePath)) {
                    Reporter.setCurrentTestResult(tr);
                    Reporter.log(filePath);
                    //把截圖寫入到Html報告中方便查看
                    Reporter.log("<img src=\"../" + filePath + "\"/>");
               }
        }

3、修改完成后重新運行測試用例,即可實現失敗自動截圖,同時會把截圖寫入到Html結果報告中,方便定位問題,如圖3。

TestNG 監聽器擴展插件:NetEase Arrow

 圖3

最后,歡迎大家使用以及共同改進Arrow,方便大家基于TestNG的測試工作。

介紹來自:http://qa.blog.163.com/blog/static/1901470022014245230459/


項目主頁:http://www.baiduhome.net/lib/view/home/1411528965031

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!