testng之listener


這周在給人培訓selenium+testng框架時,講到listener這塊發現對listener並沒有完全了解,於是自己又重新學習了下。

以下是 TestNG 提供的幾種監聽器:

  • IAnnotationTransformer
  • IAnnotationTransformer2
  • IHookable
  • IInvokedMethodListener
  • IMethodInterceptor
  • IReporter
  • ISuiteListener
  • ITestListener

盡管名字叫監聽器,但事實上它們只是一些預定義的 Java 接口。用戶創建這些接口的實現類,並把它們加入到 TestNG 中,TestNG 便會在測試運行的不同時刻調用這些類中的接口方法。 

目前的框架主要用到IReporter 和 ITestLisntener。

IReporter

TestNG 提供了默認的測試報表。但如果用戶希望有不同格式的測試報表,就需要使用 IReporter 監聽器。IReporter 監聽器只有一個方法需要實現。

ITestListener

如果要在測試方法執行成功、失敗或者跳過時指定不同后續行為,可以通過 IInvokedMethodListener 實現,不過更為簡便的方式是利用 ITestListener 監聽器。ITestListener 監聽器要求實現的方法中包含如下三個

void onTestFailure(ITestResult result) 
void onTestSkipped(ITestResult result) 
void onTestSuccess(ITestResult result)

然后在testsuite.xml里加上listeners標簽:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Simple Suite">
  <listeners>
    <listener class-name="Listener-name" />
  </listeners>

  <test name="Simple test">
    <classes>
      <class name="SampleTest" />
    </classes>
  </test>
</suite>

同時需要在腳本的類定義前面加上@listener標簽。

這里如果Listener-name是個實現了IReporter的方法,那么他就會在最后按具體實現生產report.

而如果他是個實現了ITestLisntener的方法,那么其實在測試腳本里,他能根據執行的成功或失敗或跳過,自動的給出執行的結果,如下列:

import org.testng.Assert;
import org.testng.annotations.Test;

public class SampleTest {
    @Test
    public void testMethodOne(){
        Assert.assertTrue(true);
    }
      
    @Test
    public void testMethodTwo(){
      Assert.assertTrue(false);
    }
      
    @Test(dependsOnMethods={"testMethodTwo"})
    public void testMethodThree(){
        Assert.assertTrue(true);
    }
}

這里有3個測試方法,每個里面有斷言,但這里並沒有對結果進行輸出。

import org.testng.ITestResult;
import org.testng.TestListenerAdapter;

public class myListener extends TestListenerAdapter{
    private int m_count = 0;
     
    @Override
    public void onTestFailure(ITestResult tr) {
        log(tr.getName()+ "--Test method failed\n");
    }
     
    @Override
    public void onTestSkipped(ITestResult tr) {
        log(tr.getName()+ "--Test method skipped\n");
    }
     
    @Override
    public void onTestSuccess(ITestResult tr) {
        log(tr.getName()+ "--Test method success\n");
    }
     
    private void log(String string) {
        System.out.print(string);
        if (++m_count % 40 == 0) {
        System.out.println("");
        }
    }

}

這是實現了ITestListener的類,同樣利用前面那個testsuite.xml。把listener-name修改成myListener,執行后得到如下結果:

testMethodOne--Test method success
testMethodTwo--Test method failed
testMethodThree--Test method skipped

===============================================
Simple Logger Suite
Total tests run: 3, Failures: 1, Skips: 1
===============================================

它的作用很明顯了,就不用在測試腳本/方法里再去添加結果的記錄代碼了,當然你也可以根據項目需求加上結果記錄代碼,然后決定到底用哪一種,這個就按需取舍了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM