ITestListener適用場景
當使用testng執行測試時,我們常會想在某個階段做一些特別的處理,比如:測試成功結束后,測試失敗后,跳過某個腳本后,全部腳本執行完畢后。要想達成這個目標,我們需要實現testng的ITestListener接口,自定義一個自己的listener。ITestListener包含兩種類型的方法:一類是測試用例級別的,例如onTestStart,onTestSuccess,onTestFailure,onTestSkipped,onTestFailedButWithinSuccessPercentage;另一類是測試集級別的,例如onStart,onFinish。這些方法有一個輸入參數,result或者context。result是ITestResult類型的,可以知曉測試用例成功或者失敗和測試何時開始等信息。context是ITestContext類型的,適用於測試集級別,可以知曉成功的腳本有哪些,失敗的腳本有哪些。
實現ITestListener的方法
在自定義的customListener中,需要實現ITestListener的全部方法。
import org.testng.ITestListener; import org.testng.ITestResult; import org.testng.ITestContext; /** * Created by wwh on 17/2/13. */ public class customListener implements ITestListener{ public void onTestStart(ITestResult result) { System.out.println("Test started running" + result.getMethod().getMethodName() + "at:"+result.getStartMillis()); } public void onTestSuccess(ITestResult result) { System.out.println("Result success"); } public void onTestFailure(ITestResult result) { System.out.println("Result failure"); } public void onTestSkipped(ITestResult result) { System.out.println("Result skip"); } public void onTestFailedButWithinSuccessPercentage(ITestResult result) { System.out.println("Result fail but with success percentage"); } public void onStart(ITestContext context) { System.out.println("now start test"); } public void onFinish(ITestContext context) { System.out.println("now finish test"); } }
使用自定義的listener
現在完成了創建listener,還需要聲明listener,然后測試腳本才能使用這個listener。
有兩種方式聲明listener:一種是添加@Listeners注解到測試條例上,缺點是每個使用自定義listener的測試條例都要添加@Listeners注解,很麻煩。另一種是,使用testng.xml配置文件,在其中添加suite標簽和listener標簽。
方式一:使用注解
樣例代碼
import org.testng.annotations.Listeners; import org.testng.annotations.Test; import main.java.com.dbyl.appiumServer.customListener; /** * Created by wwh on 17/2/14. */ @Listeners(customListener.class)//這個語句指明了使用自定義的listener。 public class listenerTest { @Test public void templistener1(){ System.out.println("i'm listenerTest1"); } @Test public void templistener2(){ System.out.println("i'm listenerTest2"); } }
輸出結果
[TestNG] Running: /Users/wwh/Library/Caches/IdeaIC2016.3/temp-testng-customsuite.xml now start test Test started runningtemplistener1at:1487136848622 i'm listenerTest1 Result success Test started runningtemplistener2at:1487136848712 i'm listenerTest2 Result success now finish test =============================================== Default Suite Total tests run: 2, Failures: 0, Skips: 0 =============================================== Process finished with exit code 0
方式二:使用testng.xml配置文件
樣例代碼
import org.testng.annotations.Test; /** * Created by wwh on 17/2/14. */ public class listenerTest { @Test public void templistener1(){ System.out.println("i'm listenerTest1"); } @Test public void templistener2(){ System.out.println("i'm listenerTest2"); } }
testng.xml
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Second suite" verbose="1" > <listeners> <listener class-name="main.java.com.dbyl.appiumServer.customListener"></listener> </listeners> <test name = "allTestsInAClass" > <classes> <class name="main.java.com.dbyl.appiumCore.tests.listenerTest"/> </classes> </test> </suite>
輸出結果
Mac:ProjectWang wwh$ mvn clean test -Dtestng.xml
.
.
.
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running TestSuite
now start test
Test started runningtemplistener1at:1487125608088
i'm listenerTest1
Result success
Test started runningtemplistener2at:1487125608660
i'm listenerTest2
Result success
now finish test
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.125 sec - in TestSuite
Results :
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:13 min
[INFO] Finished at: 2017-02-15T10:26:51+08:00
[INFO] Final Memory: 22M/182M
[INFO] ------------------------------------------------------------------------
