如何在 TestNG 中断言失败后继续执行测试?


一个 TestNG 类可以包含不同的测试,例如 test1、test2、test3 等。在运行测试套件时可能会出现一些失败,用户可能会在 @Test 方法之间遇到失败。一旦某个测试方法失败,他希望继续执行,以便能够及时发现所有失败。默认情况下,如果在 @Test 方法中发生故障,TestNG 会退出该 @Test 方法并从下一个 @Test 方法继续执行。

这里,用例是在同一个 @Test 方法中即使断言失败也要继续执行下一行。

有多种方法可以解决此类用例

  • 使用 SoftAssert 类使用软断言。即使断言失败,它也会继续执行,并且可以使用 assertAll() 函数在最后捕获所有失败。

  • 使用验证而不是断言。基本上,所有断言都将更改为验证。请注意,TestNG 不支持验证。用户应该使用 try-catch 块编写自己的自定义方法来处理断言并继续执行。

  • 使用 try catch 块。这更像是一种故障安全技术,而不是在断言失败后准确执行代码的下一行。

在本文中,让我们说明如何在 TestNG 中使用 SoftAssert 在断言失败时继续执行。

解决此问题的方法/算法

  • 步骤 1:导入 org.testng.annotations.Test 用于 TestNG。

  • 步骤 2:在 NewTest 类中编写一个注释作为 @test

  • 步骤 3:为 @Test 注释创建一个方法,例如 testCase1。

  • 步骤 4:如程序部分所示,使用 SoftAssert 类添加多个断言。

  • 步骤 5:重复 testCase2 的步骤。使用 assert 添加断言。

  • 步骤 6:现在创建 testNG.xml。

  • 步骤 7:现在,运行 testNG.xml 或直接在 IDE 中运行 TestNG 类,或者使用命令行编译并运行它。

示例

以下代码用于创建一个 TestNG 类并显示 Listener 功能

src/NewTest.java

 import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert;


public class NewTest {

    private SoftAssert softAssert = new SoftAssert();
    @Test(priority = 0)
    public void testCase1() {
        System.out.println("in test case 1 of NewTest");
        softAssert.assertTrue(false);
        softAssert.assertNotEquals(5,6);
        softAssert.assertEquals(1, 2);
        softAssert.assertAll();
    }
    @Test(priority = 1)
    public void testCase2() {

        System.out.println("in test case 2 of NewTest");
        Assert.assertTrue(true);
    }
}

testng.xml

这是一个配置文件,用于组织和运行 TestNG 测试用例。

当只需要执行有限的测试而不是完整的套件时,它非常方便。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Parent_Suite">
    <test name="test">
        <classes>
            <class name="NewTest" />
        </classes>
    </test>
</suite>

输出

[INFO] Running TestSuite
in test case 1 of NewTestngClass
in test case 2 of NewTestngClass
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.832 s <<< FAILURE! - in TestSuite
[ERROR] NewTest.testCase1  Time elapsed: 0.016 s  <<< FAILURE!
java.lang.AssertionError: 
The following asserts failed:
	expected [true] but found [false],
	expected [2] but found [1]
	at NewTest.testCase1(newTest.java:15)
[INFO] 
[INFO] Results:
[INFO] 
[ERROR] Failures: 
[ERROR]   NewTest.testCase1:15 The following asserts failed:
	expected [true] but found [false],
	expected [2] but found [1]
[INFO] 
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0

更新于: 2023-08-16

2K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始
广告