testng 监听器

执行用例监听 

public class IHookableImp implements IHookable {
    @Override
    public void run(IHookCallBack iHookCallBack, ITestResult iTestResult) {
        ConstructorOrMethod method = iTestResult.getMethod().getConstructorOrMethod();
        String name = method.getName();
        if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "IHookableImp 测试method是 "+name);
        if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "IHookableImp 开始执行~");
        //测试用例开始执行
        iHookCallBack.runTestMethod(iTestResult);
        if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "IHookableImp 结束~");
    }
}

展示报告 

 

for(ISuite iSuite:suites){
    Map<String,ISuiteResult> iSuiteResultMap = iSuite.getResults();
    //获取所有执行的方法
    if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport 所有执行的方法:"+iSuite.getAllInvokedMethods());
    //获取所有@Test标注的方法
    if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport 获取所有@Test标注的方法:"+iSuite.getAllMethods());
    //获取suite标签的name属性
    if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport suiteName:"+iSuite.getName());
    //获取测试报告的输出路径
    if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport 输出路径:"+iSuite.getOutputDirectory());
    System.out.println("CustomTestCaseReport 报告路径:"+outputDirectory);
    //获取并发方式
    if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport 并发方式:"+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方法
            if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport 测试方法:"+iTestResult.getName());
            //获取执行结果
            if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport 执行结果(1-成功,2-失败,3-skip):"+iTestResult.getStatus());
            //获取开始执行的时间
            if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport 开始时间:"+iTestResult.getStartMillis());
            //获取结束执行的时间
            if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport 结束时间:"+iTestResult.getEndMillis());
        }
    }
}

 执行前监听

public class IInvokedMethodListenerImp implements IInvokedMethodListener {
    //TestNG在调用方法前、后启用该监听器,常用于日志的采集。
    @Override
    public void afterInvocation(IInvokedMethod iInvokedMethod, ITestResult iTestResult) {
        //获取执行的@Test方法
        if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "IInvokedMethodListenerImp "+iTestResult.getName());
    }
    @Override
    public void beforeInvocation(IInvokedMethod iInvokedMethod, ITestResult iTestResult) {
        //获取执行的@Test方法
        if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "IInvokedMethodListenerImp "+iTestResult.getName());
    }
}

 成功或失败

 

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

}
TestNG 提供了多种监听器,用于在测试执行过程中对测试行为进行监控、修改或扩展。其中,测试方法监听器和测试套件监听器是两种常用的监听器类型,它们分别作用于不同的测试执行层级,并具有不同的使用场景。 ### 测试方法监听器(ITestListener) `ITestListener` 是用于监听测试方法执行过程的监听器。它提供了多个回调方法,可以用于在测试方法执行前后进行日志记录、性能统计、失败处理等操作。常见的回调方法包括: - `onTestStart(ITestResult result)`:当测试方法开始执行时调用。 - `onTestSuccess(ITestResult result)`:当测试方法成功执行后调用。 - `onTestFailure(ITestResult result)`:当测试方法执行失败时调用。 - `onTestSkipped(ITestResult result)`:当测试方法被跳过时调用。 - `onTestFailedButWithinSuccessPercentage(ITestResult result)`:当测试方法失败但仍在允许的成功百分比范围内时调用。 该监听器通常用于对每个测试方法的执行情况进行监控,例如记录测试方法的执行时间、失败原因等[^1]。 示例代码如下: ```java import org.testng.ITestListener; import org.testng.ITestResult; public class MethodListener implements ITestListener { @Override public void onTestStart(ITestResult result) { System.out.println("Test method started: " + result.getName()); } @Override public void onTestSuccess(ITestResult result) { System.out.println("Test method succeeded: " + result.getName()); } @Override public void onTestFailure(ITestResult result) { System.out.println("Test method failed: " + result.getName()); } } ``` ### 测试套件监听器(ISuiteListener) `ISuiteListener` 用于监听测试套件(Test Suite)的执行过程。一个测试套件通常包含多个测试类和测试方法,因此该监听器适用于在整个测试套件执行前后进行全局操作,例如初始化资源、清理环境等。其主要回调方法包括: - `onStart(ISuite suite)`:在测试套件开始执行时调用。 - `onFinish(ISuite suite)`:在测试套件执行完成后调用。 该监听器适合用于在测试套件级别进行资源管理,例如启动和关闭数据库连接、初始化日志系统等。 示例代码如下: ```java import org.testng.ISuite; import org.testng.ISuiteListener; public class SuiteListener implements ISuiteListener { @Override public void onStart(ISuite suite) { System.out.println("Test suite started: " + suite.getName()); } @Override public void onFinish(ISuite suite) { System.out.println("Test suite finished: " + suite.getName()); } } ``` ### 区别总结 | 特性 | 测试方法监听器 (`ITestListener`) | 测试套件监听器 (`ISuiteListener`) | |------|-------------------------------|----------------------------------| | 监听对象 | 每个测试方法 | 整个测试套件 | | 适用场景 | 记录测试方法执行状态、失败处理 | 初始化/清理全局资源 | | 回调方法 | `onTestStart`, `onTestSuccess`, `onTestFailure` 等 | `onStart`, `onFinish` | | 粒度 | 细粒度(方法级别) | 粗粒度(套件级别) | ### 使用方法 要在测试类中使用监听器,可以通过 `@Listeners` 注解指定监听器类。例如: ```java import org.testng.annotations.Listeners; import org.testng.annotations.Test; @Listeners(MethodListener.class) public class TestClass { @Test public void testMethod() { // 测试逻辑 } } ``` 对于测试套件监听器,通常在 `testng.xml` 文件中配置监听器: ```xml <suite name="TestSuite" listeners="com.example.SuiteListener"> <test name="Test"> <classes> <class name="com.example.TestClass"/> </classes> </test> </suite> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值