TestNG语法
TestNG 是一个功能强大的 Java 测试框架,具有灵活的注解体系、测试方法分组、并行执行、依赖测试、异常测试等功能。它支持创建更高级的自动化测试解决方案。下面将详细介绍 TestNG 的基本语法和注解的用法。
1. TestNG 注解
TestNG 通过注解来定义测试流程,每个注解有不同的用途和执行顺序。以下是常见的 TestNG 注解:
@Test
:标记一个方法为测试方法。@BeforeSuite
:在测试套件中的所有测试方法之前执行。@AfterSuite
:在测试套件中的所有测试方法之后执行。@BeforeTest
:在每个测试之前执行(用于@Test
标注的方法之前)。@AfterTest
:在每个测试之后执行。@BeforeClass
:在当前类的第一个测试方法之前执行。@AfterClass
:在当前类的所有测试方法之后执行。@BeforeMethod
:在每个测试方法执行之前执行。@AfterMethod
:在每个测试方法执行之后执行。
注解的执行顺序
TestNG 注解的执行顺序如下:
@BeforeSuite
@BeforeTest
@BeforeClass
@BeforeMethod
@Test
@AfterMethod
@AfterClass
@AfterTest
@AfterSuite
2. 基本示例
2.1 简单的测试类
java
import org.testng.annotations.Test;
public class BasicTest {
public void testMethod() {
System.out.println("Test method is running");
}
}
2.2 使用 @BeforeMethod
和 @AfterMethod
java
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;
public class MethodTest {
public void setUp() {
System.out.println("Setup before each test");
}
public void testMethod1() {
System.out.println("Running test method 1");
}
public void testMethod2() {
System.out.println("Running test method 2");
}
public void tearDown() {
System.out.println("Teardown after each test");
}
}
输出顺序为:
sql
Setup before each test
Running test method 1
Teardown after each test
Setup before each test
Running test method 2
Teardown after each test
3. 高级功能
3.1 依赖测试
你可以使用 dependsOnMethods
来设置方法依赖关系。某些测试方法只在依赖的方法成功时才会执行。
java
import org.testng.annotations.Test;
public class DependencyTest {
public void setup() {
System.out.println("Setup method");
}
public void dependentTest() {
System.out.println("This test depends on setup");
}
}
3.2 分组测试
可以使用 groups
参数将测试方法进行分组,然后执行特定组的测试。
java
import org.testng.annotations.Test;
public class GroupTest {
public void sanityTest() {
System.out.println("Sanity test");
}
public void regressionTest() {
System.out.println("Regression test");
}
public void bothTest() {
System.out.println("Sanity and regression test");
}
}
3.3 参数化测试
TestNG 支持通过 XML 或 @DataProvider
传递参数到测试方法中。
通过 XML 参数化
java
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class ParamTest {
public void loginTest(String username, String password) {
System.out.println("Username: " + username);
System.out.println("Password: " + password);
}
}
通过 @DataProvider
参数化
java
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class DataProviderTest {
public Object[][] dataProviderMethod() {
return new Object[][] { { "user1", "pass1" }, { "user2", "pass2" } };
}
public void loginTest(String username, String password) {
System.out.println("Username: " + username);
System.out.println("Password: " + password);
}
}
3.4 忽略测试
使用 @Test(enabled = false)
来忽略某个测试方法。
java
public void ignoredTest() {
// This test will be ignored
}
3.5 超时测试
使用 @Test(timeOut = 1000)
来设置测试方法的最大执行时间(以毫秒为单位)。如果超过该时间,测试将失败。
java
public void timeoutTest() throws InterruptedException {
Thread.sleep(1500); // This will cause the test to fail
}
3.6 异常测试
可以通过 expectedExceptions
来测试某个方法是否抛出指定异常。
java
public void exceptionTest() {
int result = 1 / 0; // This will throw ArithmeticException
}
4. TestNG XML 配置文件
TestNG 的强大之处在于其 XML 配置文件的灵活性,你可以在 testng.xml
文件中定义测试类、分组、并行执行等。
xml
<suite name="TestSuite" parallel="methods" thread-count="2">
<test name="SampleTest">
<classes>
<class name="com.example.BasicTest"/>
<class name="com.example.GroupTest"/>
</classes>
</test>
</suite>
5. 并行执行
通过在 testng.xml
中设置 parallel
属性,你可以并行执行测试方法、类或测试套件。可以指定 methods
、classes
或 tests
。
xml
<suite name="ParallelSuite" parallel="methods" thread-count="3">
<test name="Test1">
<classes>
<class name="com.example.ParallelTest"/>
</classes>
</test>
</suite>
在代码中还可以使用 @Test(threadPoolSize = 3)
来并行执行测试方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)