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>就定义了一个测试用例(其中可能包含多个测试方法)。
[html]   view plain   copy
  1. <!ELEMENT suite (groups?,(listeners|packages|test|parameter|method-selectors|suite-files)*) >  

示例如下:
[html]   view plain   copy
  1. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >  
  2.     
  3. <suite name="Suite1" verbose="1" >  
  4.   <groups>  
  5.     <run>  
  6.        <include name="..." />  
  7.        <exclude name="..." />  
  8.     </run>  
  9.   </groups>  
  10.    
  11.   <test name="Regression1">  
  12.        ...  
  13.   </test>  
  14. </suite>  



2.<test>
<test>元素是<suite>的子元素,用以定义一个测试用例。定义测试用例可以通过<classes>或<packages>。
[html]   view plain   copy
  1. <!ELEMENT test (method-selectors?,parameter*,groups?,packages?,classes?) >  

1). <classes>表示以测试类的方式定义测试用例,粒度较小。示例如下:
[html]   view plain   copy
  1. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >  
  2.     
  3. <suite name="Suite1" verbose="1" >  
  4.   <test name="Regression1">  
  5.     <classes>  
  6.       <class name="test.sample.ParameterSample"/>  
  7.       <class name="test.sample.ParameterTest"/>  
  8.     </classes>  
  9.   </test>  
  10. </suite>  

2). <packages>表示以测试类所在的包的方式定义测试用例,包中的所有测试类都被涉及,粒度较大。
[html]   view plain   copy
  1. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >  
  2.    
  3. <suite name="Suite1" verbose="1" >  
  4.   <test name="Regression1"   >  
  5.     <packages>  
  6.       <package name="test.sample" />  
  7.    </packages>  
  8.  </test>  
  9. </suite>  

3). <test>元素中的<groups>元素
我们知道,<suite>中可以定义一个全局的<groups>。而这里<test>元素中也可以定义一个自己的<groups>,其中定义的组仅对当前所在的测试用例可见。示例如下:
[html]   view plain   copy
  1. <test name="Regression1">  
  2.   <groups>  
  3.     <run>  
  4.       <exclude name="brokenTests"  />  
  5.       <include name="checkinTests"  />  
  6.     </run>  
  7.   </groups>  
  8.     
  9.   <classes>  
  10.      ...  
  11.   </classes>  
  12. </test>  

注意:在testng.xml配置文件中,<suite>中可以定义多个<test>,那么这些<test>的执行顺序默认按照其在<suite>中出现的先后顺序。当然,也可以提供<test>的preserve-order='false'改变默认顺序。
3. <classes>
<test>可以通过<classes>或<packages>定义测试用例,但只是在测试类或类包的层次上,那么能不能具体到测试类的某个方法呢?
对于<classes>中的一个<class>,可以提供<methods>设置测试方法。示例如下:
[html]   view plain   copy
  1. <test name="Regression1">  
  2.   <classes>  
  3.    
  4.     <class name="test.Test1">  
  5.       <methods>  
  6.         <include name="m1" />  
  7.         <include name="m2" />  
  8.       </methods>  
  9.     </class>  
  10.    
  11.     <class name="test.Test2" />  
  12.    
  13.   </classes>  
  14. </test>  




==========================================================================================

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">  
  3. <suite name="suitename" junit="false" verbose="3" parallel="false" thread-count="5" configfailurepolicy="<span style="font-family:Arial;"><span style="font-size: 14px; line-height: 26px;">skip</span></span>annotations="javadoc" time-out="10000" skipfailedinvocationcounts="true" data-provider-thread-count="5" object-factory="classname" allow-return-values="true">  <!-- name参数为必须 -->  
  4.     <suite-files>  
  5.         <suite-file path="/path/to/suitefile1"></suite-file>  <!-- path参数为必须 -->  
  6.         <suite-file path="/path/to/suitefile2"></suite-file>  
  7.     </suite-files>    
  8.     <parameter name="par1" value="value1"></parameter>  <!-- name, value参数为必须 -->  
  9.     <parameter name="par2" value="value2"></parameter>  
  10.     <method-selectors>  
  11.         <method-selector>  
  12.             <selector-class name="classname" priority="1"></selector-class> <!-- name参数为必须 -->  
  13.             <script language="java"></script>  <!-- language参数为必须 -->  
  14.         </method-selector>  
  15.     </method-selectors>  
  16.     <test name="testename" junit="false" verbose="3" parallel="false" thread-count="5" annotations="javadoc" time-out="10000" enabled="true" skipfailedinvocationcounts="true" preserve-order="true" allow-return-values="true"> <!-- name参数为必须 -->  
  17.         <parameter name="par1" value="value1"></parameter>  <!-- name, value参数为必须 -->  
  18.         <parameter name="par2" value="value2"></parameter>  
  19.         <groups>  
  20.             <define name="xxx"> <!-- name参数为必须 -->  
  21.                 <include name="" description="" invocation-numbers="" />  <!-- name参数为必须 -->  
  22.                 <include name="" description="" invocation-numbers="" />  
  23.             </define>  
  24.             <run>  
  25.                 <include name="" />  <!-- name参数为必须 -->  
  26.                 <exclude name="" />  <!-- name参数为必须 -->  
  27.             </run>  
  28.             <dependencies>  
  29.                 <group name="" depends-on=""></group> <!-- name,depends-on均为参数为必须 -->  
  30.                 <group name="" depends-on=""></group>  
  31.             </dependencies>  
  32.         </groups>  
  33.         <classes>  
  34.             <class name="classname"> <!-- name参数为必须 -->  
  35.                 <methods>  
  36.                     <parameter name="par3" value="value3"></parameter>  
  37.                     <include name="" description="" invocation-numbers=""></include>  
  38.                     <exclude name=""></exclude>  
  39.                 </methods>  
  40.                 <methods></methods>  
  41.             </class>  
  42.         </classes>      
  43.         <packages>  
  44.             <package name="" />  <!-- name参数为必须 -->  
  45.             <package name="">  
  46.                 <include name="" description="" invocation-numbers=""></include>  
  47.                 <exclude name=""></exclude>  
  48.             </package>  
  49.         </packages>  
  50.         <listeners>  
  51.             <listener class-name="classname1" />  <!-- name参数为必须 -->  
  52.             <listener class-name="classname2" />  
  53.         </listeners>  
  54.     </test>  
  55.     <test></test>  
  56. </suite>   

testng.xml文件节点属性说明:
suite属性说明:
@name: suite的名称,必须参数    
@junit:是否以Junit模式运行,可选值(true | false),默认"false"
@verbose:命令行信息打印等级,不会影响测试报告输出内容;可选值(1|2|3|4|5) 
@parallel:是否多线程并发运行测试;可选值(false | methods | tests | classes | instances),默认 "false"
@thread-count:当为并发执行时的线程池数量,默认为"5"
@configfailurepolicy:一旦Before/After Class/Methods这些方法失败后,是继续执行测试还是跳过测试;可选值 (skip | continue),默认"skip"
@annotations:获取注解的位置,如果为"javadoc", 则使用javadoc注解,否则使用jdk注解
@time-out:为具体执行单元设定一个超时时间,具体参照parallel的执行单元设置;单位为毫秒
@skipfailedinvocationcounts:是否跳过失败的调用,可选值(true | false),默认"false"
@data-provider-thread-count:并发执行时data-provider的线程池数量,默认为"10"
@object-factory:一个实现IObjectFactory接口的类,用来实例测试对象
@allow-return-values:是否允许返回函数值,可选值(true | false),默认"false"
@preserve-order:顺序执行开关,可选值(true | false) "true"
@group-by-instances:是否按实例分组,可选值(true | false) "false"

test属性说明:
@name:test的名字,必选参数;测试报告中会有体现
@junit:是否以Junit模式运行,可选值(true | false),默认"false"
@verbose:命令行信息打印等级,不会影响测试报告输出内容;可选值(1|2|3|4|5) 
@parallel:是否多线程并发运行测试;可选值(false | methods | tests | classes | instances),默认 "false"
@thread-count:当为并发执行时的线程池数量,默认为"5"
@annotations:获取注解的位置,如果为"javadoc", 则使用javadoc注解,否则使用jdk5注解
@time-out:为具体执行单元设定一个超时时间,具体参照parallel的执行单元设置;单位为毫秒
@enabled:设置当前test是否生效,可选值(true | false),默认"true" 
@skipfailedinvocationcounts:是否跳过失败的调用,可选值(true | false),默认"false"
@preserve-order:顺序执行开关,可选值(true | false) "true"
@group-by-instances:是否按实例分组,可选值(true | false) "false"
@allow-return-values:是否允许返回函数值,可选值(true | false),默认"false"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值