TestNG框架教程四:testng.xml文件详解

TestNG通过设置testng.xml文件能做以下事情

  • 1)创建来源不同包、类、方法的测试套件
  • 2)包括一些选项,例如失败的用例可以重跑。
  • 3)支持使用正则表达式
  • 4)运行把外部参数传入测试方法
  • 5)支持配置多线程的执行环境

比如详细的结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite">
	<!--引入外部的xml文件(地址由path参数决定,path必填项),将引入的xml与当前的xml文件一起使用-->
	<suite-files>
	<suite-file path="/path/suitefile1"></suite-file>
	</suite-files>
	<!--一个<suite>下可以有多个<test>,可以通过<suite>的parallel="tests"来进行并行测试,
	必须和thread-count配套使用,否则是无效参数-->
	<test name="test1">
	     <method-selectors>
		     <method-selector>
		       <script language="beanshell"><![CDATA[
		         groups.containsKey("test1")
		       ]]></script>
		     </method-selector>
	     </method-selectors>
	     <parameter name="" value=""></parameter>
         <groups>
		    <define name="functest">
		      <include name="windows"/>
		      <include name="linux"/>
		    </define>
		  
		    <define name="all">
		      <include name="functest"/>
		      <include name="checkintest"/>
		    </define>
		  
		    <run>
		      <include name="all"/>
		    </run>
		 </groups>
		 <packages>
               <package name="">
                    <include name=""></include>
                    <exclude name=""></exclude>
               </package>
         </packages>
         <classes>
               <class name="">
                    <methods>
                         <parameter name="" value=""></parameter>
                         <include name=""></include>
                         <exclude name=""></exclude>
                    </methods>
               </class>
         </classes>
	</test>
	<!--指定listeners,这个class必须继承自org.testng.ITestNGListener。在java中使用
	@Listeners({com.example.MyListener.class,com.example.MyMethodInterceptor.class})
	的注释也可以有同样效果-->
	<listeners>
    <listener class-name="com.example.MyListener" />
    <listener class-name="com.example.MyMethodInterceptor" />
	</listeners>
</suite>

<suite>   

说明:testng.xml文档中最上层的元素,一个xml文件只能有一个<suite>,,是一个xml文件的根级

suite常用参数:

参数说明使用方法参数值
name必选项,<suite>的名字,将出现在reports里name=”XXX”suite名字
junit是否执行Junit模式(识别setup()等) junit=”true”    true和false,默认false
verbose控制台输出的详细内容等级,0-10级(0无,10最详细)    verbose=”5″    0到10
parallel是否在不同的线程并行进行测试,要与thread-count配套使用    parallel=”mehods”    详见表格下内容,默认false
parent-module和Guice框架有关,只运行一次,创建一个parent injector给所有guice injectors   
configfailurepolicy测试失败后是再次执行还是跳过,值skip和continue   configfailurepolicy=”skip”    skip、continue,默认skip
thread-count与parallel配套使用,线程池的大小,决定并行线程数量    thread-count=”10″    整数,默认5
annotations获取注解,值为javadoc时,使用JavaDoc的注释;否则用JDK5注释    annotations=”javadoc”  javadoc
time-out设置parallel时,终止执行单元之前的等待时间(毫秒)    time-out=”10000″    整数,单位毫秒
skipfailedinvocationcounts是否跳过失败的调用    skipfailedinvocationcounts=”true”    true和false,默认false
data-provider-thread-count并发时data-provider的线程池数量    data-provider-thread-count=”5″    整数
object-factory一个实现IObjectFactory接口的类,实例化测试对象    object-factory=”classname”    类名
allow-return-values是否允许返回函数值    all-return-values=”true”    true和false
preserve-order是否按照排序执行    preserve-order=”true”    true和false,默认true
group-by-instances按照实例分组    group-by-instances=”true”    true和false,默认false

parallel

该参数的值false,methods,tests,classes,instances。默认false

parallel必须和thread-count配套使用,否则相当于无效参数,thread-count决定了并行测试时开启的线程数量

parallel=”mehods”  TestNG将并行执行所有的测试方法在不同的线程里

parallel=”tests”  TestNG将并行执行在同一个<test>下的所有方法在不同线程里

parallel=”classes”  TestNG将并行执行在相同<class>下的方法在不同线程里

parallel=”instances”  TestNG将并行执行相同实例下的所有方法在不同的县城里

<test>

参数说明:

参数说明使用方法参数值
nametest的名字,将出现在报告里    name=”testname”    test的名字
junit 是否按照Junit模式运行    junit=”true”    true和false,默认false
verbose控制台输出的详细内容等级,0-10级(0无,10最详细),不在报告显示    verbose=”5″    0到10
parallel是否在不同的线程并行进行测试,要与thread-count配套使用    parallel=”mehods”    与suite的parallel一致,默认false
thread-count 与parallel配套使用,线程池的大小,决定并行线程数量    thread-count=”10″    整数,默认5
annotations获取注解,值为javadoc时,使用JavaDoc的注释;否则用JDK5注释    annotations=”javadoc”    javadoc
time-out 设置parallel时,终止执行单元之前的等待时间(毫秒)    time-out=”10000″    整数,单位毫秒
enabled 标记是否执行这个test    enabled=”true”    true和false,默认true
skipfailedinvocationcounts是否跳过失败的调用    skipfailedinvocationcounts=”true”    true和false,默认false
preserve-order否按照排序执行,如果是true,将按照xml文件中的顺序去执行    preserve-order=”true”    true和false,默认true
allow-return-values是否允许返回函数值    all-return-values=”true”    true和false,默认false

method-selectors

方法选择器定义了哪些类的方法需要去执行,类必须继承自org.testng.IMethodSelector

<method-selectors>
    <method-selector>
      <script language="beanshell"><![CDATA[
        groups.containsKey("test1")
      ]]></script>
    </method-selector>
</method-selectors>

groups

说明:要运行的组,可以自定义一个组,可以包括要执行的,还排除要执行的方法。必须和<classes>配套使用,从下面的类中找到对应名字的方法
<groups>由<difine>和<run>、<dependencies>三部分组成。<diffine>可以将group组成一个新组,包括要执行和不执行的大组;<run>要执行的方法;<dependencies>指定了某group需要依赖的group(比如下面的例子,group1需要依赖group2和group3先执行)。

<groups>
     <define name ="all">
          <include name ="testgroup1"/>
          <exclude name ="testgroup2'/>
     </define>
     <run>
          <include name ="all"/>
          <include name ="testmethod1"/>
          <exclude name="testmethod2"/>
     </run>
     <dependencies>
          <group name ="group1" depends-on="goup2 group3"/>
     </dependencies>
</groups>

packages

<packages>指定包名代替类名。查找包下的所有包含testNG annotation的类进行测试

<packages>
      <package name="">
           <include name=""></include>
           <exclude name=""></exclude>
      </package>
</packages>

classes

方法选择器,要执行的方法写在这里,参数有name和priority。

<classes>
      <class name="">
           <methods>
                <parameter name="" value=""></parameter>
                <include name=""></include>
                <exclude name=""></exclude>
           </methods>
      </class>
</classes>

<parameter>

说明:提供测试数据,有name和value两个参数

<parameter name = "parameter_name" value = "parameter_value "/>

<parameter>可以声明在<suite>或者<test>级别,在<test>下的<parameter>会覆盖在<suite>下声明的同名变量

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享