TestNG学习笔记
TestNG学习笔记
常用注解
TestNG最常使用的是它的注解。
注解 | 描述 | 属性 | 例子 |
---|---|---|---|
@Test | 表示方法是一个基于TestNG的测试用例 | enabled, priority, invocationCount, dependsOnMethods | @Test(enabled = false) |
例子
@Test(invocationCount = 3, priority = 1)
public void testMethod() {
// 测试代码
}
前后置注解
TestNG 提供了一系列的注解,用于在测试的不同阶段执行特定的初始化和清理工作。这些注解可以应用于方法或类上,以确保在测试执行前后执行特定的逻辑。
注解 | 描述 | 作用域 | 执行顺序 |
---|---|---|---|
@BeforeSuite | 在测试套件中的所有测试类和方法执行前调用一次。 | 测试套件 | 最先执行 |
@AfterSuite | 在测试套件中的所有测试类和方法执行后调用一次。 | 测试套件 | 最后执行 |
@BeforeTest | 在测试套件中的每个测试类执行前调用一次。 | 测试类 | 在@BeforeSuite之后 |
@AfterTest | 在测试套件中的每个测试类执行后调用一次。 | 测试类 | 在@AfterSuite之前 |
@BeforeClass | 在当前类中的所有测试方法执行前调用一次。 | 测试类 | 在@BeforeTest之后 |
@AfterClass | 在当前类中的所有测试方法执行后调用一次。 | 测试类 | 在@AfterTest之前 |
@BeforeMethod | 在当前类中的每个测试方法执行前调用。 | 测试方法 | 在@BeforeClass之后 |
@AfterMethod | 在当前类中的每个测试方法执行后调用。 | 测试方法 | 在@AfterClass之前 |
TestNG常用断言
断言是验证测试结果是否符合预期的关键步骤。以下是一些常用的断言方法及其描述:
1. Assert.assertEquals
断言两个值相等。如果实际值与预期值不相等,则测试失败。可以提供一个可选的错误消息,当断言失败时显示。
Assert.assertEquals(actualValue, expectedValue, "Error message");
例如,比较两个字符串是否相等。
2. Assert.assertTrue
断言一个布尔表达式为真。如果表达式为假,则测试失败,并显示提供的错误消息。
Assert.assertTrue(condition, "Error message");
这对于验证条件性逻辑非常有用。
3. Assert.assertFalse
与assertTrue相反,断言一个布尔表达式为假。如果表达式为真,则测试失败。
Assert.assertFalse(condition, "Error message");
4. Assert.assertNotNull
断言一个对象不是null。如果对象为null,则测试失败。
Assert.assertNotNull(object, "Error message");
5. Assert.assertNull
断言一个对象是null。如果对象不为null,则测试失败。
Assert.assertNull(object, "Error message");
6. Assert.assertSame
断言两个对象引用相同的实例。这与assertEquals不同,后者是比较对象的值。
Assert.assertSame(object1, object2, "Error message");
7. Assert.assertNotSame
断言两个对象不是引用相同的实例。
Assert.assertNotSame(object1, object2, "Error message");
8. Assert.assertEqualsNoOrder
断言两个数组或集合的内容相同,但顺序可以不同。这对于忽略元素顺序的比较非常有用。
Assert.assertEqualsNoOrder(array1, array2, "Error message");
9. Assert.assertNotEquals
断言两个值不相等。如果实际值与预期值相等,则测试失败。
Assert.assertNotEquals(actualValue, notExpectedValue, "Error message");
软断言 (SoftAssert)
允许在一个测试用例中执行多个断言,即使其中一个断言失败,其他断言也会继续执行。这与硬断言不同,后者在断言失败时会立即停止执行当前测试用例。使用软断言时,需要在测试用例的最后调用assertAll()方法来报告所有未通过的断言。
SoftAssert softAssert = new SoftAssert(); softAssert.assertEquals(actualValue, expectedValue, "Error message"); // 其他断言... softAssert.assertAll();
批量执行多个测试用例
通过testng.xml配置文件实现。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="项目名称">
<test name="登录模块">
<parameter name="testParameter" value="testValue" />
<classes>
<class name="com.api.login.TestLogin"></class>
</classes>
</test>
</suite>
TestNG数据驱动
用于从外部数据源获取测试数据。
第一种方式:简单传值
<test name="登录模块">
<parameter name="username" value="admin"></parameter>
<parameter name="password" value="123"></parameter>
<classes>
<class name="com.api.login.TestLogin2"></class>
</classes>
</test>
@Test(dataProvider = "getData")
public void testMethod(String username, String password) {
// 测试代码
}
@DataProvider
public Object[][] getData() {
return new Object[][] {
{"admin", "123"},
{"user", "456"}
};
}
第二种方式:定义数据源
@Test(dataProvider = "getData")
public void testMethod(String username, String password) {
// 测试代码
}
@DataProvider(name = "getData")
public Object[][] provideData() {
return new Object[][] {
{"张三", "123"},
{"李四", "456"}
};
}
总结
- @Test注解:用于定义测试用例,并可以通过其属性如enabled, priority, invocationCount, dependsOnMethods来控制测试用例的执行行为和顺序。
- 前后置注解:包括@BeforeSuite, @BeforeTest, @BeforeClass, @BeforeMethod和@AfterSuite, @AfterTest, @AfterClass, @AfterMethod,这些注解允许我们在测试的不同阶段执行初始化和清理工作。
- 断言方法:如Assert.assertEquals和Assert.assertTrue,用于验证测试结果是否符合预期,是测试中不可或缺的部分。
- 批量执行测试用例:通过testng.xml配置文件,我们可以定义测试套件和测试集,批量执行多个测试用例,并通过参数化提高测试的灵活性。
- 数据驱动测试:TestNG支持从外部数据源获取测试数据,支持简单传值和定义数据源两种方式,使得我们可以针对不同的输入数据执行相同的测试逻辑。
所使用的注解包括:
- @Test:定义测试用例的基本注解。
- @Before* 和 @After*:用于测试方法或测试类的前后执行特定方法的注解。
- Assert.*:提供了一系列断言方法,用于验证测试结果。
- @DataProvider 和 @Parameters:用于实现数据驱动测试,从外部数据源提供测试数据。