您好,登錄后才能下訂單哦!
這篇文章給大家介紹TestNG-TestListenerAdapter和IReporter的實現(xiàn)方式,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
https://static.javadoc.io/org.testng/testng/6.13/org/testng/TestListenerAdapter.html
TestListenerAdapter 一個簡單的ITestListener適配器,用于存儲所有運行的測試。 您可以使用以下方法檢索這些結(jié)果:getPassedTests()getFailedTests()getSkippedTests() 如果您擴展此類以覆蓋任何這些方法,請記住如果您希望維護此測試列表,則調(diào)用它們的超級等效項。
IReporter 客戶端可以實現(xiàn)此接口以生成報告。 它的方法generateReport()將在所有套件運行后調(diào)用,參數(shù)將提供在該運行期間發(fā)生的所有測試結(jié)果。
參考:
https://www.cnblogs.com/relax-zw/p/9884009.html
http://bbs.51testing.com/thread-1161195-1-1.html
IReporter接口是干嘛的?就是讓用戶自定義報告的,很多人想要自定義報告,于是乎找各種插件,比如什么testng-xslt啊,reportng啊,各種配置,最后出來的結(jié)果,還不能定制化,但為什么不能自已定 制一份呢?testng的IReporter接口就接供了這樣的功能,我們只需要實現(xiàn)這個接口,并加上監(jiān)聽,就 能拿到所有的信息了,你可以把這些信息存數(shù)據(jù)庫,或者自已生成一個html,亦或者寫在EXCEL里啊 等等,都可以,下面給出IReporter接口的實現(xiàn)方式: |
自定義報告
package com.demo; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Set; import org.testng.IReporter; import org.testng.IResultMap; import org.testng.ISuite; import org.testng.ISuiteResult; import org.testng.ITestContext; import org.testng.ITestResult; import org.testng.xml.XmlSuite; public class NewReport implements IReporter{ @Override public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) { List<ITestResult> list = new ArrayList<ITestResult>(); for (ISuite suite : suites) { Map<String, ISuiteResult> suiteResults = suite.getResults(); for (ISuiteResult suiteResult : suiteResults.values()) { ITestContext testContext = suiteResult.getTestContext(); IResultMap passedTests = testContext.getPassedTests(); IResultMap failedTests = testContext.getFailedTests(); IResultMap skippedTests = testContext.getSkippedTests(); IResultMap failedConfig = testContext.getFailedConfigurations(); list.addAll(this.listTestResult(passedTests)); list.addAll(this.listTestResult(failedTests)); list.addAll(this.listTestResult(skippedTests)); list.addAll(this.listTestResult(failedConfig)); } } this.sort(list); this.outputResult(list, outputDirectory+"/test.txt"); } private ArrayList<ITestResult> listTestResult(IResultMap resultMap){ Set<ITestResult> results = resultMap.getAllResults(); return new ArrayList<ITestResult>(results); } private void sort(List<ITestResult> list){ Collections.sort(list, new Comparator<ITestResult>() { @Override public int compare(ITestResult r1, ITestResult r2) { if(r1.getStartMillis()>r2.getStartMillis()){ return 1; }else{ return -1; } } }); } private void outputResult(List<ITestResult> list, String path){ try { BufferedWriter output = new BufferedWriter(new FileWriter(new File(path))); StringBuffer sb = new StringBuffer(); for (ITestResult result : list) { if(sb.length()!=0){ sb.append("\r\n"); } sb.append(result.getTestClass().getRealClass().getName()) .append(" ") .append(result.getMethod().getMethodName()) .append(" ") .append(this.formatDate(result.getStartMillis())) .append(" ") .append(result.getEndMillis()-result.getStartMillis()) .append("毫秒 ") .append(this.getStatus(result.getStatus())); } output.write(sb.toString()); output.flush(); output.close(); } catch (IOException e) { e.printStackTrace(); } } private String getStatus(int status){ String statusString = null; switch (status) { case 1: statusString = "SUCCESS"; break; case 2: statusString = "FAILURE"; break; case 3: statusString = "SKIP"; break; default: break; } return statusString; } private String formatDate(long date){ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return formatter.format(date); } }
生成測試報告
package com.demo; import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Listeners; import org.testng.annotations.Test; @Listeners({com.demo.NewReport.class}) public class Test15 { @DataProvider public Object[][] dataProvider(){ return new Object[][]{{1},{2}}; } @Test(dataProvider="dataProvider") public void testAssert1(int a){ Assert.assertEquals(1, a); } @Test public void testAssert2(){ Assert.assertEquals("2", "2"); } }
關于TestNG-TestListenerAdapter和IReporter的實現(xiàn)方式就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。