TestNG 如何断言失败时继续执行
TestNG类可以包含不同的测试,如test1,test2,test3等。在运行测试套件时可能会出现一些失败,并且用户可能在@Test方法之间获得失败。一旦一个测试方法失败,他希望继续执行,以便在测试结束时找出所有的失败。默认情况下,如果@Test方法中发生失败,TestNG会退出该@Test方法,并从下一个@Test方法继续执行。
这里,使用案例是即使在同一个@Test方法中断言失败,也要继续执行下一行。
有多种方法可以解决这种使用案例:
- 通过使用SoftAssert类使用软断言。即使断言失败,它也会继续执行,然后可以使用assertAll()函数捕获所有的失败。
-
使用验证而不是断言。基本上,所有的断言都将改为verify。请注意,verify不受TestNG支持。用户应该使用try-catch块编写自己的自定义方法来处理断言并继续执行。
-
使用try catch块。它更多是一种失败安全技术,而不是确切地执行下一行代码,即使断言失败。
在本文中,让我们演示如何在TestNG中使用SoftAssert在断言失败时继续执行。
步骤
- 步骤1:导入org.testng.annotations.Test以使用TestNG。
-
步骤2:在NewTest类中写一个注释作为@Test。
-
步骤3:创建一个@Test注释的方法testCase1。
-
步骤4:使用SoftAssert类添加多个断言,如程序部分所示。
-
步骤5:为testCase2重复上述步骤。使用断言添加断言。
-
步骤6:现在创建一个testNG.xml。
-
步骤7:现在,在IDE中运行testNG.xml或直接测试TestNG类,或使用命令行编译并运行。
示例
以下代码创建了一个TestNG类,并显示了监听器的功能:
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