企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
前面讲的大多都是以测试脚本为基础来运行的,少部分是以xml运行,这里以xml来讲解下: ``` <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="SuiteName" verbose="1" >  ``` 如下分别讲解各个标签: 1、suite标签 testNG.xml文件的最外层标签即suite,即测试套件,其下可以有多个<test>和<groups>,其有几个可以添加的属性在第十节的分suite测试中有做说明,这里做下详细说明: (1)、name属性 此属性属于必须要有的,值可以自行设定,此名字会在testNG的报告中看到; (2)、verbose属性 此属性为指定testNG报告的详细程度,从0开始到10,其中10为最详细,默认生成的xml此属性值为1; (3)、parallel属性 此属性是指代运行方式,默认为none,即串行运行方式;并行执行方法包括如下几种,下面做分别说明: methods:方法层级,若为此值,则该suite下所有的测试方法都将进行多线程,即测试用例级别的多线程。如果用例之间有依赖,则执行顺序会按照设定的依赖来运行; ``` <suite name="My suite" parallel="methods" thread-count="5"> ``` tests:TestNG将在同一线程中运行相同的<Test>标签中的所有方法,每个<test>标签都将处于一个单独的线程中,这允许您将不是线程安全的所有类分组在同一个<test>中,并保证它们都将在同一个线程中运行,同时利用TestNG使用尽可能多的线程运行测试。 ``` <suite name="My suite" parallel="tests" thread-count="5"> ``` classes:类级别并发,即TestNG会将该suite下每个class都将在单独的线程中运行,同一个class下的所有用例都将在同一个线程中运行; ``` <suite name="My suite" parallel="classes" thread-count="5"> ``` instances:实例级别,即TestNG将在同一线程中运行同一实例中的所有方法,两个不同实例上的两个方法将在不同的线程中运行。 ``` <suite name="My suite" parallel="instances" thread-count="5"> ``` (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标签 此标签无特别意义,其下可以包括多个标签,如groups、classes等,如下介绍下几种书写方式: (1)选择一个包中的全部测试脚本(包含子包) ``` <test name = "allTestsInAPackage" >    <packages>       <package name = "whole.path.to.package.* />    </packages> </test> ``` (2)选择一个类中的全部测试脚本 ``` <test name = "allTestsInAPackage" >    <packages>       <package name = "whole.path.to.package.* />    </packages> </test> ``` (3)选择一个类中的部分测试脚本 ``` <test name = "aFewTestsFromAClass" >    <classes>   <class name="whole.path.to.package.className >       <methods>          <include name = "firstMethod" />          <include name = "secondMethod" />          <include name = "thirdMethod" />       </methods>   </class>    </classes> </test> ``` (4)选择一个包中的某些组 ``` <test name = "includedGroupsInAPackage" >    <groups>       <run>          <include name = "includedGroup" />       </run>    </groups>    <packages>       <package name = "whole.path.to.package.* />    </packages> </test> ``` (5)排除一个包中的某些组 ``` <test name = "excludedGroupsInAPackage" >    <groups>       <run>          <exclude name = "excludedGroup" />       </run>    </groups>    <packages>       <package name = "whole.path.to.package.* />    </packages> </test> ``` 其可以附带的属性有如下几种,下面对各个属性做单独说明: (1)、name属性 此属性属于必须要有的,值可以自行设定,此名字会在testNG的报告中看到; (2)、verbose属性 此属性为指定testNG报告的详细程度,从0开始到10,其中10为最详细,默认生成的xml此属性值为1 (3)、threadPoolSize属性 该属性指定此test的线程池大小,为数字; ``` <test name = "excludedGroupsInAPackage" >    <groups>       <run>          <exclude name = "excludedGroup" />       </run>    </groups>    <packages>       <package name = "whole.path.to.package.* />    </packages> </test> ``` (4)、invocationCount属性 该属性指定此test的运行次数,为数字,范例如上面的代码所示; (5)、time-out属性 此属性用于指定超时时间,该suite下所有的用例的超时时间,范例如上面的代码所示; (6)、group-by-instances属性 此项用于那些有依赖的方法,且被依赖的对象有多个重载对象,因为如果是依赖方法,且该方法有多个重载方法,则默认是会将所有重载方法都跑完再运行被依赖方法,但有时候我们不想这样,则将此项设置为true即可; ``` <suite name="Factory" group-by-instances="true"> ``` (7)、preserve-order属性 值可输入true或者false,如果为true,则用例执行会按照在xml中的顺序执行,否则会乱序执行,不添加此属性的话默认是按顺序执行的; 3、group标签 此标签必然是在<test>标签下的,用于标识那些组会被用于测试或者被排除在测试之外,其同级必然要包含一个<classes>标签或者<pakages>标签,用于指定groups来自于哪些包或者类; 如下即为包含一个group,排除一个group的例子: ``` <groups>   <run>      <include name = "includedGroupName" />      <exclude name = "excludedGroupName" />   </run> </groups> ``` 高级应用: ``` <test name="Regression1">   <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>      <classes>     <class name="test.sample.Test1"/>   </classes> </test> ``` 4、其他 其他的话就是测试脚本的选择了,有三种方式: (1)选择一个包 ``` <packages>     <package name = "packageName" /> </packages> ``` (2)选择一个类 ``` <classes>     <class name = "className" /> </classes> ``` (3)选择一个方法 ``` <classes>     <class name = "className" />        <methods>           <include name = "methodName" />        </methods>     </class> </classes> ``` 这里也支持正则表达式,例如: ``` <test name="Test1">   <classes>     <class name="example1.Test1">       <methods>         <include name=".*enabledTestMethod.*"/>         <exclude name=".*brokenTestMethod.*"/>       </methods>      </class>   </classes> </test> ```