【1】TestNg监听器.ITestListener

本文详细介绍了ITestListener监听器的使用方法,包括其主要功能、接口方法及具体实现步骤。通过实例展示了如何通过监听器监控测试方法和xml文件中的<test>标签。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ITestListener监听器主要针对测试方法和xml文件中的<test>标签来进行相应监控。

    // 测试方法开始时才执行此方法。测试方法指@Test注解的测试方法    
    void onTestStart(ITestResult var1);

    void onTestSuccess(ITestResult var1);//测试方法执行成功才执行此方法

    void onTestFailure(ITestResult var1);//测试方法执行失败才执行此方法

    void onTestSkipped(ITestResult var1); // 测试方法失败才执行此方法

    // 自定义测试方法的执行结果。比如测试方法中有多个断言,其中一个断言未通过,其他断言通过了,
    // 可以根据具体情况,判断此方法是否通过
    void onTestFailedButWithinSuccessPercentage(ITestResult var1);

    // 在xml文件中的每一个<test>标签跑之前运行
    void onStart(ITestContext var1);
    // 在xml文件中每一个<test>标签跑之后运行
    void onFinish(ITestContext var1);

示例

第一步,先创建监听器 MyTestListener,实现ITestListener并覆写接口中方法

public class MyTestListener implements ITestListener {
    @Override
    public void onTestStart(ITestResult result) {
        // 测试方法【开始执行】,执行此方法
        System.out.println("onTestStart-> test method name: " + result.getMethod().getMethodName());
    }

    @Override
    public void onTestSuccess(ITestResult result) {
        // 测试方法【执行成功】,执行此方法
        System.out.println("onTestSuccess -> test method name: " + result.getName());
    }

    @Override
    public void onTestFailure(ITestResult result) {
        // 测试方法【执行失败】,执行此方法
        System.out.println("onTestFailure -> test method name: " + result.getName());
    }

    @Override
    public void onTestSkipped(ITestResult result) {
        // 测试方法【执行跳过】,执行此方法
        System.out.println("onTestSkipped -> test method name: " + result.getName());
    }

    @Override
    public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
        // 测试方法【部分执行成功】,执行此方法
        System.out.println("onTestFailedButWithinSuccessPercentage -> test method name: " + result.getName());
    }

    @Override
    public void onStart(ITestContext context) {
        // 在xml文件中每一个<test>标签跑之前运行
        System.out.println("onStart <Test>标签【开始执行】 -> " + context.getName());
    }

    @Override
    public void onFinish(ITestContext context) {
        // 在xml文件中每一个<test>标签跑之后运行
        System.out.println("onFinish <Test>标签【执行结束】 -> " + context.getName());
    }
}

第二步,创建测试类 TestDemo1,为了方遍展示,监听器直接写在测试类上

@Listeners(MyTestListener.class)
public class TestDemo1 {
    @BeforeClass
    public void setUp(){
        System.out.println("\n============一个Test执行开始==================\n");
        System.out.println("【TestDemo1】 setUp()方法执行...");
    }

    @AfterClass
    public void tearDown(){
        System.out.println("【TestDemo1】 tearDown()方法执行...");
        System.out.println("\n============一个Test执行完成==================\n");
    }


    @Test
    public void testMethod1(){
        System.out.println("【TestDemo1】 testMethod1()方法执行..");
    }

    @Test
    public void testMethod2(){
        System.out.println("【TestDemo1】 testMethod2()方法执行..");
    }

}

输出

[TestNG] Running:
  /Users/mtdp1/Code/JavaProject/InterfaceCase/gj/testng.xml
onStart <Test>标签【开始执行】 -> Test标签1

============一个Test执行开始==================

【TestDemo1】 setUp()方法执行...
onTestStart-> test method name: testMethod1
【TestDemo1】 testMethod1()方法执行..
onTestSuccess -> test method name: testMethod1
onTestStart-> test method name: testMethod2
【TestDemo1】 testMethod2()方法执行..
onTestSuccess -> test method name: testMethod2
【TestDemo1】 tearDown()方法执行...

============一个Test执行完成==================

onFinish <Test>标签【执行结束】 -> Test标签1
onStart <Test>标签【开始执行】 -> Test标签2
============一个Test执行开始==================

【TestDemo1】 setUp()方法执行...
onTestStart-> test method name: testMethod1
【TestDemo1】 testMethod1()方法执行..
onTestSuccess -> test method name: testMethod1
onTestStart-> test method name: testMethod2
【TestDemo1】 testMethod2()方法执行..
onTestSuccess -> test method name: testMethod2
【TestDemo1】 tearDown()方法执行...

============一个Test执行完成==================

onFinish <Test>标签【执行结束】 -> Test标签2
===============================================
Suite
Total tests run: 4, Failures: 0, Skips: 0
===============================================

在 TestDemo1.testMethod2() 中增加一个assert,执行后查看,监听器中onTestFailure方法执行

onTestFailure -> test method name: testMethod2

    @Test
    public void testMethod2(){
        System.out.println("【TestDemo1】 testMethod2()方法执行..");
        Assert.assertTrue(false);// 增加一个校验,确保该用例一定执行失败
    }
onStart <Test>标签【开始执行】 -> Test标签1

============一个Test执行开始==================

【TestDemo1】 setUp()方法执行...
onTestStart-> test method name: testMethod2
【TestDemo1】 testMethod2()方法执行..
onTestFailure -> test method name: testMethod2

java.lang.AssertionError: expected [true] but found [false]
Expected :true
Actual   :false
<Click to see difference>


	at org.testng.Assert.fail(Assert.java:94)
	at org.testng.Assert.failNotEquals(Assert.java:513)
	at org.testng.Assert.assertTrue(Assert.java:42)
	at org.testng.Assert.assertTrue(Assert.java:52)
	at myproj.testng.TestDemo1.testMethod2(TestDemo1.java:44)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
	at org.testng.TestRunner.privateRun(TestRunner.java:782)
	at org.testng.TestRunner.run(TestRunner.java:632)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
	at org.testng.SuiteRunner.run(SuiteRunner.java:268)
	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
	at org.testng.TestNG.run(TestNG.java:1064)
	at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:73)
	at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)

【TestDemo1】 tearDown()方法执行...

============一个Test执行完成==================

onFinish <Test>标签【执行结束】 -> Test标签1
===============================================
Suite
Total tests run: 1, Failures: 1, Skips: 0
===============================================
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值