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>就定义了一个测试用例(其中可能包含多个测试方法)。
<!ELEMENT suite (groups?,(listeners|packages|test|parameter|method-selectors|suite-files)*) >
示例如下:
<!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>
<test>元素是<suite>的子元素,用以定义一个测试用例。定义测试用例可以通过<classes>或<packages>。
<!ELEMENT test (method-selectors?,parameter*,groups?,packages?,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>
<!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>
我们知道,<suite>中可以定义一个全局的<groups>。而这里<test>元素中也可以定义一个自己的<groups>,其中定义的组仅对当前所在的测试用例可见。示例如下:
<test name="Regression1"> <groups> <run> <exclude name="brokenTests" /> <include name="checkinTests" /> </run> </groups> <classes> ... </classes> </test>
3. <classes>
<test>可以通过<classes>或<packages>定义测试用例,但只是在测试类或类包的层次上,那么能不能具体到测试类的某个方法呢?
对于<classes>中的一个<class>,可以提供<methods>设置测试方法。示例如下:
<test name="Regression1"> <classes> <class name="test.Test1"> <methods> <include name="m1" /> <include name="m2" /> </methods> </class> <class name="test.Test2" /> </classes> </test>