zoukankan      html  css  js  c++  java
  • testng日志 ITestListener

    上一节我们写一个日志类 extends   TestListenerAdapter ----------TestListenerAdapter 是 ITestListener 实现的一个类

    这一节,我们写一个日志类  implements   ITestListener

    ITestNGListener 接口 有两个子接口:IReporter (生成报告)、ITestListener (生成日志)

    此次我们写一个日志类直接实现 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] ------------------------------------------------------------------------

    ITestListener适用场景

    当使用testng执行测试时,我们常会想在某个阶段做一些特别的处理,比如:测试成功结束后,测试失败后,跳过某个脚本后,全部脚本执行完毕后。

    要想达成这个目标,我们需要实现testng的ITestListener接口,自定义一个自己的listener。

    ITestListener包含两种类型的方法:

    一类是测试用例级别的,例如onTestStart,onTestSuccess,onTestFailure,onTestSkipped,onTestFailedButWithinSuccessPercentage;

    另一类是测试集级别的,例如onStart,onFinish。这些方法有一个输入参数,result或者context。

    result是ITestResult类型的,可以知晓测试用例成功或者失败和测试何时开始等信息。

    context是ITestContext类型的,适用于测试集级别,可以知晓成功的脚本有哪些,失败的脚本有哪些。

  • 相关阅读:
    K&R C C90,C99的改进
    Windows 用来定位 DLL 的搜索路径
    常量字符串的问题
    C++0x中一些有用的新特性
    mainfest机制
    mainfest机制
    C++0x中一些有用的新特性
    c语言目标程序中的段
    c语言目标程序中的段
    数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
  • 原文地址:https://www.cnblogs.com/111testing/p/6977645.html
Copyright © 2011-2022 走看看