TestNG的testng.xml配置概述
TestNG提供的annotaions用来辅助定义测试类。
TestNG的testng.xml配置文件用来辅助定义执行什么样的测试,即testng.xml更像是一个测试规划。
testng.xml配置文件的元数据引用http://testng.org/testng-1.0.dtd,其中定义了testng.xml中的元素、属性和顺序等。
1.<suite>
<suite>元素是testng.xml文件的根元素。
从DTD文件(如下所示)可以看出,<suite>可以包含一个<groups>元素,用以定义全局的组,该组对所有的测试可见。
<suite>可以包含多个<test>元素,一个<test>就定义了一个测试用例(其中可能包含多个测试方法)。
示例如下:
- <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
- <suite name="Suite1" verbose="1" >
- <groups>
- <run>
- <include name="..." />
- <exclude name="..." />
- </run>
- </groups>
- <test name="Regression1">
- ...
- </test>
- </suite>
2.<test>
<test>元素是<suite>的子元素,用以定义一个测试用例。定义测试用例可以通过<classes>或<packages>。
1). <classes>表示以测试类的方式定义测试用例,粒度较小。示例如下:
- <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
- <suite name="Suite1" verbose="1" >
- <test name="Regression1">
- <classes>
- <class name="test.sample.ParameterSample"/>
- <class name="test.sample.ParameterTest"/>
- </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="test.sample" />
- </packages>
- </test>
- </suite>
3). <test>元素中的<groups>元素
我们知道,<suite>中可以定义一个全局的<groups>。而这里<test>元素中也可以定义一个自己的<groups>,其中定义的组仅对当前所在的测试用例可见。示例如下:
- <test name="Regression1">
- <groups>
- <run>
- <exclude name="brokenTests" />
- <include name="checkinTests" />
- </run>
- </groups>
- <classes>
- ...
- </classes>
- </test>
注意:在testng.xml配置文件中,<suite>中可以定义多个<test>,那么这些<test>的执行顺序默认按照其在<suite>中出现的先后顺序。当然,也可以提供<test>的preserve-order='false'改变默认顺序。
3. <classes>
<test>可以通过<classes>或<packages>定义测试用例,但只是在测试类或类包的层次上,那么能不能具体到测试类的某个方法呢?
- <test name="Regression1">
- <classes>
- <class name="test.Test1">
- <methods>
- <include name="m1" />
- <include name="m2" />
- </methods>
- </class>
- <class name="test.Test2" />
- </classes>
- </test>
对于<classes>中的一个<class>,可以提供<methods>设置测试方法。示例如下: