Testng
Table of Contents
1. Testng
TestNG is a testing framework for the Java programming language created by Cédric Beust and inspired by JUnit and NUnit. The design goal of TestNG is to cover a wider range of test categories: unit, functional, end-to-end, integration, etc., with more powerful and easy-to-use functionalities.
参考:
TestNG documentation: http://testng.org/doc/documentation-main.html
1.1. 集成到 maven 工程中
在 maven 工程中使用 Testng,只需要把下面依赖加入到 pom.xml 文件中:
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.8.8</version>
<scope>test</scope>
</dependency>
2. 第一个 Testng 例子
2.1. 准备测试程序
工程目录结构为:
./pom.xml ./src/test ./src/test/java ./src/test/java/com ./src/test/java/com/mycompany ./src/test/java/com/mycompany/app ./src/test/java/com/mycompany/app/App1Test.java ./src/test/java/com/mycompany/app/App2Test.java
其中,pom.xml 为:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>my-app</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.8.8</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
两个测试程序 App1Test.java 和 App2Test.java 分别为:
package com.mycompany.app;
import org.testng.annotations.Test;
public class App1Test {
@Test
public void exampleOfTestNg() {
System.out.println("This is TestNG Example");
}
}
和:
package com.mycompany.app;
import org.testng.annotations.Test;
public class App2Test {
@Test
public void anotherExampleOfTestNg() {
System.out.println("This is another TestNG Example");
}
}
2.2. 执行测试程序
运行 mvn test 即可执行测试程序。如:
$ mvn test ...... [INFO] Surefire report directory: /Users/cig01/test/my-app/target/surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running TestSuite Configuring TestNG with: org.apache.maven.surefire.testng.conf.TestNG652Configurator@368239c8 This is TestNG Example This is another TestNG Example Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.473 sec Results : Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ ......
2.3. 执行指定的测试程序
可以通过命令行参数来指定想在运行的测试程序,如:
$ mvn -Dtest=com.mycompany.app.App1Test test # 只执行第一个测试程序 $ mvn -Dtest=com.mycompany.app.App1Test,com.mycompany.app.App2Test test # 执行两个测试程序
2.4. 通过 testng.xml 执行测试程序
新建文件 src/test/resources/testng.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="TestNgSuite" parallel="false">
<test name="TestNgTest">
<classes>
<class name="com.mycompany.app.App1Test"/>
<class name="com.mycompany.app.App2Test"/>
</classes>
</test>
</suite>
在 pom.xml 中增加如下配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
</build>
运行 mvn test 后,会执行 testng.xml 中定义的测试程序。如:
$ mvn test ...... This is TestNG Example This is another TestNG Example [INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.036 s - in TestNgSuite [INFO] [INFO] Results: [INFO] [INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ ......
打开文件 target/surefire-reports/index.html,可以看到测试报告。
3. Tips
3.1. 配置多个 testng.xml 文件
pom.xml 中可以指定多个 testng.xml 文件。如:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>src/test/resources/testng1.xml</suiteXmlFile>
<suiteXmlFile>src/test/resources/testng2.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
</build>
默认这些 xml 文件中定义的 case 都会执行,也可以通过在命令行中定义 surefire.suiteXmlFiles 来只执行某个(或某几个)xml 中定义的 case。如:
$ mvn test -Dsurefire.suiteXmlFiles=src/test/resources/testng1.xml $ mvn test -Dsurefire.suiteXmlFiles=src/test/resources/testng1.xml,src/test/resources/testng2.xml