MAVEN管理TestNG项目(来自官网的资料)

添加TestNG依赖

根据官网的说明,Maven不支持的TestNG版本有:

1
2
- TestNG 5.14.3: Bad formatted pom.xml. 
- TestNG 5.14.4 and 5.14.5: TestNG is using a missing dependency (org.testng:guice:2.0). Excluding it, may break some features.

在项目的pom文件中配置TestNG,版本号可以替换成自己想用的:

1
2
3
4
5
6
7
8
9
10
<dependencies>
[...]
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.9.8</version>
<scope>test</scope>
</dependency>
[...]
</dependencies>

如果使用的是<=5.11的版本,则应该这样配置,jdk版本替换成自己使用的:

1
2
3
4
5
6
7
8
9
10
11
<dependencies>
[...]
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>5.11</version>
<scope>test</scope>
<classifier>jdk15</classifier>
</dependency>
[...]
</dependencies>

Maven Surefire Plugin插件

Maven Surefire Plugin是用于mvn生命周期的测试阶段的插件,设置一些参数就可以灵活地在testNG下对测试进行自定义,最基本的用法是在pom的plugin标签下添加surefire插件制定测试的xml文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<plugins>
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
[...]
</plugins>

配置好了以后在自己的项目目录下执行mvn test命令,就可以执testng.xml文件中包含的测试用例,最后在你项目下的/target/surefire-reports中可以看到测试报告。

参数配置

TestNG中是可以用@Parameters注释来传参数的,Maven也是可以的,把参数当作系统属性,在surefire插件的configuration标签下增加相应的参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<plugins>
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<systemPropertyVariables>
<phoneNumber>11111111111</phoneNumber>
<password>123456</password>
</systemPropertyVariables>
</configuration>
</plugin>
[...]
</plugins>

这样就相当于传了一个phoneNumber和一个password参数,在代码中需要用到的地方依旧可以使用@Parameters({“phoneNumber”, “password”})注释来获得这两个参数。需要注意的是,这里的参数都将会以字符串的形式被传达。

分组测试

TestNG中可以对测试的方法或类进行分组,所以你可以在maven中配置测试的组,下面表示测试functest,perftest两个组。这里顺便提一下,surefire会从你项目目录src/test/java下寻找命名以Test.java结尾的类,把他们当作TestNG测试类。

1
2
3
4
5
6
7
8
9
10
11
12
<plugins>
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<groups>functest,perftest</groups>
</configuration>
</plugin>
[...]
</plugins>

当然你也可以用标签来排除测试组。

多线程测试

添加parallel参数以设置多线程,如果不写线程数默认是5:

1
2
3
4
5
6
7
8
9
10
11
12
13
</plugins>
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<parallel>methods</parallel>
<threadCount>10</threadCount>
</configuration>
</plugin>
[...]
</plugins>

TestNG 6.9.8(JRE 1.7)及surefire 2.19以上版本,可以多线程运行测试套件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</plugins>
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<suiteXmlFiles>
<file>src/test/resources/testng1.xml</file>
<file>src/test/resources/testng2.xml</file>
</suiteXmlFiles>
<properties>
<property>
<name>suitethreadpoolsize</name>
<value>2</value>
</property>
</properties>
</configuration>
</plugin>
[...]
</plugins>

日志详细等

可以设置surefire.testng.verbose的等级,从0-10越来越详细,默认是0:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</plugins>
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
[...]
<properties>
<property>
<name>surefire.testng.verbose</name>
<value>10</value>
</property>
</properties>
[...]
</configuration>
</plugin>
[...]
</plugins>

————以上内容来自Apache Maven