• TestNG XML配置文件说明


    一、前言

      前面讲的大多都是以测试脚本为基础来运行的,少部分是以xml运行,这里以xml来讲解下。讲之前先说下TestNG的运行方式其实有多种

    • 以编程方式运行TestNG
    • XML运行TestNG

    二、以编程方式运行 TestNG

    1、按用例类运行

    package com.tech.design;
    
    import org.testng.TestListenerAdapter;
    import org.testng.TestNG;
    
    public class test {
        public static void main(String[] args) {
            /*
            此示例创建一个TestNG对象并运行测试类Run2。它还添加了一个TestListener。
            可以使用适配器类org.testng.TestListenerAdapter或自己实现org.testng.ITestListener。
            此接口包含各种回调方法,可让您跟踪测试何时开始、成功、失败等...
             */
            TestListenerAdapter tla = new TestListenerAdapter();
            TestNG testng = new TestNG();
            testng.setTestClasses(new Class[] { Case.class });//按类运行
            testng.addListener(tla);
            testng.run();
    
        }
    }

    2、按Group运行

    package com.tech.design;
    
    import org.testng.TestListenerAdapter;
    import org.testng.TestNG;
    
    public class test {
        public static void main(String[] args) {
            /*
            此示例创建一个TestNG对象并运行测试类Run2。它还添加了一个TestListener。
            可以使用适配器类org.testng.TestListenerAdapter或自己实现org.testng.ITestListener。
            此接口包含各种回调方法,可让您跟踪测试何时开始、成功、失败等...
             */
            TestListenerAdapter tla = new TestListenerAdapter();
            TestNG testng = new TestNG();
            testng.setTestClasses(new Class[] { Case.class });//按类运行
            /*
             设定group,只运行其中的几个group,只设置group名称是无法运行的,必须先加载用例,
            可以是class也可以是xml,另外根据源码可知group名称是可以添加多个的,以,分隔即可;
            如果只是某些group不想运行,则可以用方法testNG.setExcludedGroups(groups);
            同理这个groups同样是可以包含一个或者多个group名称,以,分隔;
             */
            testng.setGroups("group1");//按分组运行
            testng.addListener(tla);
            testng.run();
    
        }
    }

    三、XML配置文件说明

    1、这是一个示例testng.xml文件

    <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
      
    <suite name="Suite1" verbose="1" >
      <test name="Nopackage" >
        <classes>
           <class name="NoPackageTest" />
        </classes>
      </test>
     
      <test name="Regression1">
        <classes>
          <class name="test.sample.ParameterSample"/>
          <class name="test.sample.ParameterTest"/>
        </classes>
      </test>
    </suite>

    2、可以指定包名而不是类名

      在此示例中,TestNG 将查看包test.sample中的所有类, 并且将仅保留具有 TestNG 注释的类。

    <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
     
    <suite name="Suite1" verbose="1" >
      <test name="Regression1"   >
        <packages>
          <package name="test.sample" />
       </packages>
     </test>
    </suite>

    3、可以指定要包含和排除的组和方法:

    <test name="Regression1">
      <groups>
        <run>
          <exclude name="brokenTests"  />
          <include name="checkinTests"  />
        </run>
      </groups>
      
      <classes>
        <class name="test.IndividualMethodsTest">
          <methods>
            <include name="testMethod" />
          </methods>
        </class>
      </classes>
    </test>

    4、可以打乱执行顺序

      默认情况下,TestNG 将按照在 XML 文件中找到的顺序运行测试。如果想此文件中列出的类和方法以不可预测的顺序运行,可以将保留顺序 属性设置为false 

    <test name="Regression1" preserve-order="false">
      <classes>
     
        <class name="test.Test1">
          <methods>
            <include name="m1" />
            <include name="m2" />
          </methods>
        </class>
     
        <class name="test.Test2" />
     
      </classes>
    </test>

    5、讲解XML各个标签

    1)suite标签

      testNG.xml文件的最外层标签即suite,即测试套件,其下可以有多个<test>和<groups>,其有几个可以添加的属性在第十节的分suite测试中有做说明,这里做下详细说明:

      (1)、name属性:此属性属于必须要有的,值可以自行设定,此名字会在testNG的报告中看到;

      (2)、verbose属性:此属性为指定testNG报告的详细程度,从0开始到10,其中10为最详细,默认生成的xml此属性值为1;

      (3)、parallel属性:此属性是指代运行方式,默认为none,即串行运行方式;并行执行方法包括如下几种,下面做分别说明:

      <suite name="Suite1" parallel="methods" verbose="1" >
    • methods:方法层级,若为此值,则该suite下所有的测试方法都将进行多线程,即测试用例级别的多线程。如果用例之间有依赖,则执行顺序会按照设定的依赖来运行;
    • tests:TestNG将在同一线程中运行相同的<Test>标签中的所有方法,每个<test>标签都将处于一个单独的线程中,这允许您将不是线程安全的所有类分组在同一个<test>中,并保证它们都将在同一个线程中运行,同时利用TestNG使用尽可能多的线程运行测试。
    • classes:类级别并发,即TestNG会将该suite下每个class都将在单独的线程中运行,同一个class下的所有用例都将在同一个线程中运行;
    • instances:实例级别,即TestNG将在同一线程中运行同一实例中的所有方法,两个不同实例上的两个方法将在不同的线程中运行。

      (4)、thread-count属性:此属性用于指定线程数,按照需要输入,需要parallel参数非none时才可以添加;

      (5)、annotations属性:此项为注解的级别,为methods级别和class级别,一般不用设置;

      (6)、time-out属性:此属性用于指定超时时间,该suite下所有的用例的超时时间;

      (7)、group-by-instances属性:此项用于那些有依赖的方法,且被依赖的对象有多个重载对象,因为如果是依赖方法,且该方法有多个重载方法,则默认是会将所有重载方法都跑完再运行被依赖方法,但有时候我们不想这样,则将此项设置为true即可;

      (8)、preserve-order属性:值可输入true或者false,如果为true,则用例执行会按照在xml中的顺序执行,否则会乱序执行,不添加此属性的话默认是按顺序执行的;

    2)test标签

      此标签无特别意义,其下可以包括多个标签,如groupsclasses等,其可以附带的属性有如下几种,下面对各个属性做单独说明:

      (1)、name属性
      此属性属于必须要有的,值可以自行设定,此名字会在testNG的报告中看到;

      (2)、verbose属性
      此属性为指定testNG报告的详细程度,从0开始到10,其中10为最详细,默认生成的xml此属性值为1

      (3)、threadPoolSize属性
      该属性指定此test的线程池大小,为数字;

      (4)、invocationCount属性
      该属性指定此test的运行次数,为数字,范例如上面的代码所示;

      (5)、time-out属性
      此属性用于指定超时时间,该suite下所有的用例的超时时间,范例如上面的代码所示;

      (6)、group-by-instances属性
      此项用于那些有依赖的方法,且被依赖的对象有多个重载对象,因为如果是依赖方法,且该方法有多个重载方法,则默认是会将所有重载方法都跑完再运行被依赖方法,但有时候我们不想这样,则将此项设置为true即可;

      (7)、preserve-order属性
      值可输入true或者false,如果为true,则用例执行会按照在xml中的顺序执行,否则会乱序执行,不添加此属性的话默认是按顺序执行的;

    3)group标签

      此标签必然是在<test>标签下的,用于标识那些组会被用于测试或者被排除在测试之外,其同级必然要包含一个<classes>标签或者<pakages>标签,用于指定groups来自于哪些包或者类;

  • 相关阅读:
    Django中自定义标签的所有步骤
    django的settings详解(1)
    django中@property装饰器的运用
    设计没有标准,只有目标
    小学的题 大学的解法
    中国移动创新系列丛书《OPhone应用开发权威指南》读者交流活动圆满结束
    中国移动创新系列丛书《OPhone应用开发权威指南》读者交流活动
    开源软件技巧与精髓分享
    博文视点大讲堂28期:助你赢在软件外包行业
    网络营销大师力作,亚马逊营销图书传奇
  • 原文地址:https://www.cnblogs.com/Chilam007/p/15614031.html
Copyright © 2020-2023  润新知