1

即使一个或多个断言在 TestNG 中失败,我也开始了解持续测试。为了在我的项目中实现软断言,我参考了下面的链接。

http://beust.com/weblog/2012/07/29/reinventing-assertions/

http://seleniumexamples.com/blog/guide/using-soft-assertions-in-testng/

http://www.seleniumtests.com/2008/09/soft-assertion-is-check-which-doesnt.html

但是我不了解代码执行的流程,例如函数调用,FLOW。

请帮助我了解软断言的工作流程。

代码:

import org.testng.asserts.Assertion;
    import org.testng.asserts.IAssert; 

    //Implementation Of Soft Assertion 
    public class SoftAssertions extends Assertion{   
    @Override public void executeAssert(IAssert a){ 
    try{ a.doAssert(); } 
    catch(AssertionError ex){ 
    System.out.println(a.getMessage()); } } } 

    //Calling Soft Assertion
 SoftAssertions sa = new SoftAssertions(); 
 sa.assertTrue(actualTitle.equals(expectedTitle),
"Login Success, But Uname and Pwd are wrong"); 

注意:即使上述断言失败,执行也会继续

谢谢马赫什

4

1 回答 1

3

软断言通过将故障存储在本地状态来工作(可能stderr在遇到它们时将它们记录下来)。测试完成后,它需要检查任何存储的故障,如果遇到任何故障,则在该点使整个测试失败。

我相信 TestNG 的维护者想到的是myAssertion.assertAll()在测试结束时调用,如果任何先前的软断言检查失败,它将运行Assert.fail()并使测试失败。

您可以通过添加一个@Before方法来初始化您的本地软断言对象,在您的测试中使用它并添加一个方法来在您的软断言对象上@After运行该方法来实现这一点。assertAll()

请注意,这种@Before/@After方法使您的测试非线程安全,因此每个测试都必须在测试类的新实例中运行。assertAll()如果您的测试需要线程安全,最好在测试方法本身内部创建软断言对象并在方法结束时运行检查。TestNG 的一个很酷的特性是它能够运行多线程测试,所以在实现这些软断言时要注意这一点。

于 2014-07-31T20:44:46.860 回答