java 使用testng检测@afterMethod中跳过的测试

ryhaxcpt  于 2023-03-11  发布在  Java
关注(0)|答案(6)|浏览(179)

我尝试在@AfterMethod中检测跳过的测试,以进行报告。
我可以捕捉失败或通过的测试,但它似乎没有进入它时,测试被跳过。
我的测试:

@Test 
public void method1 () {
    Assert.fail("created failure");
}
@Test (dependsOnMethods = {"method1"})
public void method2 () {}

我的After方法:

@AfterMethod
protected void afterMethod(ITestResult result){
    switch (result.getStatus()) {
        case ITestResult.FAILURE:
            ...
            break;

        case ITestResult.SKIP:
            ...
            break;

        case ITestResult.SUCCESS:
            ...
            break;
    }

例如,这里我只检索失败,但跳过不传入after方法
你知道怎么做吗?
谢谢大家!

tez616oj

tez616oj1#

我找到了一种实现ITestListener类的方法,您可以在那里找到一个示例:
https://github.com/khmarbaise/testng-example/blob/41861115eb0ea1d98eed97fcfeb7ff30e93e0925/src/test/java/com/soebes/testing/testng/IntegrationTestListener.java
基本上你要做的就是创建一个类来捕获你所有的ITestResult,甚至是跳过的那个,然后在里面重新定义你想做的事情,就像这样:

public class IntegrationTestListener implements ITestListener {
   public void onTestSkipped(ITestResult result) {
       // do your stuff here
   } 
}

要在测试中使用它,请这样做:

@Listeners ({IntegrationTestListener.class})
public class NotAScenario  extends BasicScenario {

    @Test
    public void test1() {
    }
}
brjng4g3

brjng4g32#

对于@AfterMethod,当我们知道测试确实已经运行(因此不是ITestResult.STARTED)时,有一个简单的解决方案(经过测试,它工作):

@AfterMethod(alwaysRun = true )
public void doStuff(ITestResult result){

  Integer status = result.getStatus();

  if(!status.equals(ITestResult.SUCCESS)  || !status.equals(ITestResult.FAILURE) ) { 
           // do stuff
   }    
}

对于不想实现ITestListener中的所有方法的情况来说,这会更加简洁

3mpgtkmj

3mpgtkmj3#

testng中,如果跳过测试用例,则不会调用@AfterMethod,因为该测试用例尚未执行。@AfterMethod将仅在执行该测试用例时执行。
希望这个有用。

krugob8w

krugob8w4#

kartik是正确的,在方法之后你不能让它通过,但是在报告中你会发现跳过的测试用例。
但是如果你想得到跳过的测试用例,你可以在这里添加软依赖性,比如:@测试(始终运行=真,依赖方法= {“方法”})
这创建了一个软依赖,即即使它所依赖的测试失败/抛出异常,也应该执行带注解的测试,并且它将在after方法中调用。

zwghvu4y

zwghvu4y5#

您可以通过执行以下操作来捕获跳过测试:

public void afterMethod(ITestResult result) 
    throws Exception {
     if (result.getStatus() == ITestResult.SKIP) {
          //Some code
     }
rks48beu

rks48beu6#

这对我很有效:

@AfterMethod
public void afterMethod(ITestContext context) {
   System.out.println("Skis: " + context.getSkippedTests().size());
}

相关问题