使用testng

时间:2016-05-04 13:58:30

标签: java testng appium

我正试图在@AfterMethod中检测跳过的测试以进行报告。

我可以捕获失败或通过测试但是在跳过测试时似乎没有输入它。

我的测试:

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

我的AfterMethod:

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

        case ITestResult.SKIP:
            ...
            break;

        case ITestResult.SUCCESS:
            ...
            break;
    }

例如,这里我只检索失败,但跳过没有传递到after方法

关于如何做的任何想法?

谢谢!

5 个答案:

答案 0 :(得分:1)

我通过实现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() {
    }
}

答案 1 :(得分:1)

对于@AfterMethod,当我们知道测试已经运行时(因此不是ITestResult.STARTED),有一个简单的解决方案(经过测试并且可以正常运行):

public static void method1(Type convertTo, object toBeConverted)
{
    var convertedValue = Convert.ChangeType(toBeConverted,convertTo);
}

public static void method2<TConvert>(object toBeConverted)
{
    var convertedValue = (TConvert)toBeConverted;
}

不想实施 @AfterMethod(alwaysRun = true ) public void doStuff(ITestResult result){ Integer status = result.getStatus(); if(!status.equals(ITestResult.SUCCESS) || !status.equals(ITestResult.FAILURE) ) { // do stuff } }

中的所有方法的某些情况下更清洁

答案 2 :(得分:0)

testng中,如果跳过测试用例,则不会调用@AfterMethod,因为测试用例尚未执行。只有在执行测试用例时才会执行@AfterMethod

希望这有帮助。

答案 3 :(得分:0)

kartik是正确的,你不能通过方法得到它,但在报告中你会发现跳过的测试用例。

但如果你想获得跳过的测试用例,你可以在这里添加软依赖:@Test(alwaysRun = true,dependsOnMethods = {“method”})

这会创建一个软依赖项,即即使它依赖的测试失败/抛出异常也应该执行带注释的测试,并且它将在after方法之后调用。

答案 4 :(得分:0)

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

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