TestNG系列(四)TestNG监听器
生活随笔
收集整理的這篇文章主要介紹了
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
");
}
@Override
public void onTestSkipped(ITestResult tr) {
log(tr.getName()+ "--Test method skipped
");
}
@Override
public void onTestSuccess(ITestResult tr) {
log(tr.getName()+ "--Test method success
");
}
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>
總結
以上是生活随笔為你收集整理的TestNG系列(四)TestNG监听器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python脚本编写(纯干货)
- 下一篇: 一维数组