testng在maven项目中的使用
pom.xml
<dependencies><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>7.4.0</version><scope>test</scope></dependency>
</dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.2</version><configuration><forkCount>0</forkCount><testFailureIgnore>true</testFailureIgnore><suiteXmlFiles><suiteXmlFiles>testng.xml</suiteXmlFiles></suiteXmlFiles></configuration></plugin></plugins>
</build>
com.yineng.aos.testng.TestngGroups
package com.yineng.aos.testng;import org.testng.annotations.Test;public class TestngGroups {@Test(groups = {"group1", "group2"})public void testMethod1() {System.out.println("group1 group2 testMethod1");}@Test(groups = {"group1", "group2"})public void testMethod2() {System.out.println("group1 group2 testMethod2");}@Test(groups = {"group1"})public void testMethod3() {System.out.println("group1 testMethod3");}@Test(groups = {"group2"})public void testMethod4() {System.out.println("group2 testMethod4");}}
testng.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1"><test name="login"><groups><run><inlude name="group2" /></run></groups><classes><class name="com.yineng.aos.testng.TestngGroups" /></classes></test>
</suite>
idea中,可以双击执行:
命令行输入命令执行:
mvn test
testng.xml的配置说明
<test>元素是<suite>的子元素,用以定义一个测试用例。定义测试用例可以通过<classes>或<packages>。
<!ELEMENT test (method-selectors?,parameter*,groups?,packages?,classes?) >
1). <classes>表示以测试类的方式定义测试用例,粒度较小。
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1" verbose="1" ><test name="Regression1"><classes><class name="com.yineng.aos.testng.TestngGroups"/><class name="com.yineng.aos.testng.TestngGroups2"/></classes></test>
</suite>
2). <packages>表示以测试类所在的包的方式定义测试用例,包中的所有测试类都被涉及,粒度较大。
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1" verbose="1" ><test name="Regression1" ><packages><package name="com.yineng.aos.testng" /></packages></test>
</suite>
3). <groups>元素
我们知道,<suite>中可以定义一个全局的<groups>。而这里<test>元素中也可以定义一个自己的<groups>,其中定义的组仅对当前所在的测试用例可见。示例如下:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><test name="login"><groups><run><exclude name="group2" /><include name="group1" /></run></groups><classes>...</classes>
</test>
注意:在testng.xml配置文件中,<suite>中可定义多个<test>,<test>的执行顺序默认按照在<suite>中出现先后顺序。也可提供<test>的preserve-order='false'改变默认顺序。
3. <methods>
具体到测试类的某个方法,对于<classes>中的一个<class>,可以提供<methods>设置测试方法。示例如下:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><test name="login"><classes><class name="com.yineng.aos.testng.TestngGroups"><methods><include name="testMethod1" /><include name="testMethod2" /></methods></class><class name="com.yineng.aos.testng.TestngGroups2" /></classes>
</test>
可通过指定<suiteXmlFiles>属性来运行指定的testng.xml
(将< suiteXmlFile>的value值设置为引用properties更灵活。执行命令时就可指定testng.xml 例如:mvn clean test -DsuiteXmlFile=src/test/resources/xml/a.xml)
<properties><suiteXmlFile>testng.xml</suiteXmlFile></properties><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.2</version><configuration><encoding>UTF-8</encoding><suiteXmlFiles><suiteXmlFile>${suiteXmlFile}</suiteXmlFile></suiteXmlFiles></configuration></plugin></plugins></build>
mvn clean test -DsuiteXmlFile=src/test/resources/xml/a.xml
更多surefire plugin的使用方法可以通过下面的两种方法查看:
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-surefire-plugin:2.22.2 -Ddetail
mvn surefire:help -Ddetail=true -Dgoal=test