
2.4 testng.xml
testng.xml文件的作用是控制测试执行的过程,该文件可以使用Eclipse的TestNG插件自动生成。在工程(testng)上用鼠标右击,从弹出的快捷菜单中选择“TestNG → Convert to TestNG”选项,此时会弹出“Refactoring”对话框,直接单击“Finish”按钮,生成“testng.xml”文件,文件内容如下:

这是一个典型的XML文件,第一行包含了XML的声明。<suite>代表一个Suite;<test>代表一个Test;<classes>代表一组Class,可以包含多个Class,这里默认添加了FirstClassTest。<test>标签里有一个thread-count属性表示并行线程数,该属性需要与parallel属性配合使用。
2.4.1 <package>
如果一个Class需要一个<class>标签,那么10个Class就需要10个<class>标签。如果这些Class都在一个Package中,则可以使用<package>标签进行Package设置,以简化配置过程。
删除FirstClassTest中的内容,输入以下代码:

新增SecondClassTest,输入以下内容:

修改testng.xml文件,删除<classes>标签及其内部的配置,并以包设置代替,见以下粗体部分内容:

保存所做的修改,在“testng.xml”上用鼠标右击,从弹出的快捷菜单中选择“Run As → TestNG Suite”选项,此时Eclipse的控制台输出如下:

从输出结果可以看到两个Class都执行了,说明包设置生效。
2.4.2 <;include>;和<;exclude>;
<include>和<exclude>的作用是对方法进行设置,<include>代表包含,<exclude>代表排除,写法上它们都支持正则表达式。
删除FirstClassTest中的内容,输入以下代码:

修改testng.xml文件,删除<packages>标签及其内部的配置,并以方法设置代替,见以下粗体部分内容:

保存所做的修改,在“testng.xml”上用鼠标右击,从弹出的快捷菜单中选择“Run As → TestNG Suite”选项,此时Eclipse的控制台输出如下:

FirstClass里共有testCase1、testCase2、testCase3和newTestCase1四个测试用例,在<include>标签中,name属性的值为“testCase.”,其中“.”代表任意一个字符,因此testCase1、testCase2和testCase3都满足要求。但是在<exclude>标签中,name属性的值为“testCase3”,也就是排除testCase3。所以最终只有testCase1和testCase2运行了。
<include>和<exclude>标签除了用在Test中,还可以用在其他地方,比如分组运行。删除FirstClassTest中的内容,输入以下代码:

修改testng.xml文件,新增<groups>标签及相关配置,同时修改<classes>标签内的配置,见以下粗体部分内容:

保存所做的修改,在“testng.xml”上用鼠标右击,从弹出的快捷菜单中选择“Run As → TestNG Suite”选项,此时Eclipse的控制台输出如下:

可以看到只执行了myGroup分组的两条用例,符合预期。
2.4.3 <;parameter>;标签
<parameter>标签和@Parameters注解配合使用,可对测试用例传递参数,达到数据分离的效果。删除FirstClassTest中的内容,输入以下代码:

修改testng.xml文件,删除<groups>标签及相关配置,同时新增<parameter>标签,详见以下粗体部分内容:

保存所做的修改,在“testng.xml”上用鼠标右击,从弹出的快捷菜单中选择“Run As → TestNG Suite”选项,此时Eclipse的控制台输出如下:

可以看到myParam的值通过<parameter>标签和@Parameters注解配合传递给了testCase1。