当前位置: 首页 > 面试题库 >

如何在@AfterMethod中从TestNG / Selenium获取测试结果状态?

薄伟彦
2023-03-14
问题内容

为了进行研究,我需要从@AfterMethod运行测试方法(@Test)后捕获结果状态(“通过” /“失败”)。

我一直在使用导入org.testng.ITestResult; 我的研究成果使访问多个在线博客后使我的工作变得更加轻松,但是, 即使断言失败 了,
似乎并没有像预期的那样成功,因为结果输出总是通过。

我的代码如下:

public class SampleTestForTestProject {
ITestResult result;

@Test(priority = 1)
public void testcase(){

    // intentionally failing the assertion to make the test method fail 
    boolean actual = true;
    boolean expected = false;
    Assert.assertEquals(actual, expected);

}

@AfterMethod
public void afterMethod()  {

    result = Reporter.getCurrentTestResult();

    switch (result.getStatus()) {
    case ITestResult.SUCCESS:
        System.out.println("======PASS=====");
        // my expected functionality here when passed
        break;

    case ITestResult.FAILURE:
        System.out.println("======FAIL=====");
        // my expected functionality here when passed
        break;

    case ITestResult.SKIP:
        System.out.println("======SKIP BLOCKED=====");
        // my expected functionality here when passed
        break;

    default:
        throw new RuntimeException("Invalid status");
    }
  }
}

结果在控制台中:

[TestNG] Running:  C:\Users\USER\AppData\Local\Temp\testng-eclipse--988445809\testng-customsuite.xml

======PASS=====

FAILED: testcaseFail
java.lang.AssertionError: expected [false] but found [true]

我的期望是将测试结果转换为变量以通过开关,如上面的代码片段所示,并在测试方法失败时显示“ ====== FAIL =====”。

有人能够帮助我捕获每种测试方法(@Test)的执行测试结果。如果我采用的方法不正确,请帮助我提供一段代码,以正确的方法。

先感谢您


问题答案:

去做就对了:

public class stacktest  {


@Test
public void teststackquestion() {

    boolean actual = true;
    boolean expected = false;
   Assert.assertEquals(actual, expected);

}


@AfterMethod
public void afterMethod(ITestResult result)
{
    try
 {
    if(result.getStatus() == ITestResult.SUCCESS)
    {

        //Do something here
        System.out.println("passed **********");
    }

    else if(result.getStatus() == ITestResult.FAILURE)
    {
         //Do something here
        System.out.println("Failed ***********");

    }

     else if(result.getStatus() == ITestResult.SKIP ){

        System.out.println("Skiped***********");

    }
}
   catch(Exception e)
   {
     e.printStackTrace();
   }

}

}



 类似资料:
  • 问题内容: 如果测试失败,我想截图。与其将所有测试方法都包裹在try / catch块中,不如将这种逻辑添加到以标记的方法中。 如何在当前测试失败的注解方法中进行检测? 问题答案: 如果带有注释的方法具有参数,则TestNG将自动注入测试结果。(来源:TestNG文档,第5.18.1节) 这应该做的工作:

  • 问题内容: 我写了JUnit5扩展。但是我找不到方法如何获得测试结果。 扩展看起来像这样: 有什么提示如何获得测试结果? 问题答案: 正如其他答案所指出的那样,JUnit会将失​​败的测试与异常进行通信,因此可以使用来了解发生的情况。请注意,这很容易出错,因为以后运行的扩展程序仍可能无法通过测试。 另一种方法是注册自定义TestExecutionListener。不过,这两种方法都有点round回

  • 背景:我正在使用TestNG DataProvider 要求:执行完成后需要从TestNG报告中删除1个测试。 我的解决方案:假设,我需要从报告中删除“XYZ”测试用例。

  • 我在使用TestNG时发现,当我使用DataProvider时,@aftermethod&@BeforeMethod会被多次调用。在使用从DataProvider传递的所有参数执行@test之后,是否可能只调用一次方法。比如,在DataProvider调用了“Test PrimenumberChecker”5次之后,我们只能调用一次“Drew Down”方法。

  • 问题内容: 有什么方法可以通过teardown()方法获取测试结果?我想根据结果在测试后进行清理。 在junit文档中找不到太多详细信息。 问题答案: 与您要求的最接近的东西可能是TestWatcher规则。那将不能让您访问返回的结果或其他任何东西,但是您可以使用它(或创建自己的TestRule并与Description对象结合使用,可以对方法进行不同的注释,以指示需要进行哪种清理。

  • 我试图直接从我的Java代码运行JMeter测试。应该通过JMeter服务器产生负载。在代码中,我使用连接到服务器上运行的JMeter守护进程的ClientJMeterEngine实例。这工作到目前为止,我可以开始和运行我的测试。我目前不明白的是如何从测试运行完成后获得结果。我当前的代码如下所示: 客户端线程必须保持运行状态,以便客户端上的ResultCollector能够从服务器接收结果。我现在