TestNG系列(四)TestNG監聽器


前言

監聽器實際上是一些預定義的java接口,用戶創建這些接口的實現類(即implements某監聽接口,並實現里面的方法),並加入到testng中,testng便會在運行的不同時刻調用這些類中你自定義實現的接口方法,從而實現定制額外的功能;

一、IHookable:TestNG在測試方法執行前執行,常用於授權檢查。

IHookable實現類

public class IHookableImp implements IHookable {
    @Override
    public void run(IHookCallBack iHookCallBack, ITestResult iTestResult) {
        ConstructorOrMethod method = iTestResult.getMethod().getConstructorOrMethod();
        String name = method.getName();
        System.out.println("測試method是 "+name);
        System.out.println("開始執行~");
        //測試用例開始執行
        iHookCallBack.runTestMethod(iTestResult); 
        System.out.println("結束~");
    }
}

測試用例

@Listeners(IHookableImp.class)
public class Test_case {
    @Test
    public void case1(){
        System.out.println("case1方法");
    }
}

執行結果:

二、IINvokedmethodl:TestNG在調用方法前、后啟用該監聽器,常用於日志的采集。

IInvokedMethodListener實現類

public class IInvokedMethodListenerImp implements IInvokedMethodListener {
    //TestNG在調用方法前、后啟用該監聽器,常用於日志的采集。
    @Override
    public void afterInvocation(IInvokedMethod iInvokedMethod, ITestResult iTestResult) {
        // TODO Auto-generated method stub
        //獲取執行的@Test方法
        System.out.println(iTestResult.getName());
    }
    @Override
    public void beforeInvocation(IInvokedMethod iInvokedMethod, ITestResult iTestResult) {
        // TODO Auto-generated method stub
        //獲取執行的@Test方法
        System.out.println(iTestResult.getName());
    }
}

測試用例

@Listeners(IInvokedMethodListenerImp.class)
public class Test_case {
    @Test
    public void case1(){
        System.out.println("執行了case1測試方法");
    }
}

測試結果

三、IReporter:在測試方法執行后執行,通過遍歷 xmlSuites 和 suites 能夠獲取所有測試方法的信息以及測試結果,后續可用於自定義測試報告。

IReporter實現類

public class IReporterImp implements IReporter {
    //通過遍歷 xmlSuites 和 suites 能夠獲取所有測試方法的信息以及測試結果,后續可用於自定義測試報告。
    @Override
    public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> iSuites, String outputDirectory) {
        
        for(ISuite iSuite:iSuites){
            Map<String,ISuiteResult> iSuiteResultMap = iSuite.getResults();
            //獲取所有執行的方法
            System.out.println("所有執行的方法:"+iSuite.getAllInvokedMethods());
            //獲取所有@Test標注的方法
            System.out.println("獲取所有@Test標注的方法:"+iSuite.getAllMethods());
            //獲取suite標簽的name屬性
            System.out.println("suiteName:"+iSuite.getName());
            //獲取測試報告的輸出路徑
            System.out.println("輸出路徑:"+iSuite.getOutputDirectory());
            System.out.println("報告路徑:"+outputDirectory);
            //獲取並發方式
            System.out.println("並發方式:"+iSuite.getParallel());
            
            for(ISuiteResult iSuiteResult:iSuiteResultMap.values()){
                ITestContext iTestContext = iSuiteResult.getTestContext();
                IResultMap iResultMap = iTestContext.getPassedTests();
                
                Set<ITestResult> iTestResultset = iResultMap.getAllResults();
                for(ITestResult iTestResult:iTestResultset){
                    //獲取執行的Test方法
                    System.out.println("測試方法:"+iTestResult.getName());
                    //獲取執行結果
                    System.out.println("執行結果(1-成功,2-失敗,3-skip):"+iTestResult.getStatus());
                    //獲取開始執行的時間
                    System.out.println("開始時間:"+iTestResult.getStartMillis());
                    //獲取結束執行的時間
                    System.out.println("結束時間:"+iTestResult.getEndMillis());
                }
                
            }
            
        }
        
    }

}

測試用例

@Listeners(IReporterImp.class)
public class Test_case {
    @Test
    public void case1(){
        System.out.println("執行了case1測試方法");
    }
}

運行結果

四、Testlisteneradapter:執行測試方法后執行,主要用於記錄log信息,根據執行結果的不同調用不同的方法。

實現類

public class TestListenerAdapterImp 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("");
        }
    }

}

測試方法

@Listeners(TestListenerAdapterImp.class)
public class Test_case {
    @Test
    public void case1(){
        System.out.println("執行了case1測試方法");
    }
}

運行結果

五、監聽的調用

可在測試類前添加@Listeners(監聽實現類名.class),也可在XML配置文件中通過listeners標簽進行監聽的添加。

<listeners>
       <listener class-name="com.Monitor.IHookableImp"/>
</listeners>

 


免責聲明!

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



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