多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] Test.xml文件可以更方便的管理和执行测试用例 ## **一、Test.xml-suite:** suite为Test.xml的根节点 @name: suite的名称,必须参数,会体现在测试报告中。 @parallel:是否多线程并发运行测试 @configfailurepolicy:一旦Before/After Class/Methods这些方法失败后,是继续执行测试还是跳过测试;可选值 (skip | continue),默认"skip" @skipfailedinvocationcounts:是否跳过失败的调用,可选值(true | false),默认"false" @object-factory:一个实现IObjectFactory接口的类,用来实例测试对象 @preserve-order:顺序执行开关,可选值(true | false) "true" @group-by-instances:是否按实例分组,可选值(true | false) "false" <br> <br> ## **二、Test.xml-test:** @name:test的名字,必选参数,会体现在测试报告中。 @parallel:是否多线程并发运行测试 @enabled:设置当前test是否生效,可选值(true | false),默认"true" @skipfailedinvocationcounts:是否跳过失败的调用,可选值(true | false),默认"false" @preserve-order:顺序执行开关,可选值(true | false) "true" @group-by-instances:是否按实例分组,可选值(true | false) "false" <br> <br> ## **三、全局参数Parameter** 此属性在xml文件不是非必要的属性,如果测试用例中有使用@Parameter定义的参数,则需要填写此属性。 **xml文件** ``` <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="All Test Suite"> <!--测试套件--> <test verbose="2" preserve-order="true" name="/Users/XXXX/IdeaProjects/IdeAjava_test"><!--测试集--> <classes><!--测试类集合--> <class name = "Testng.day01testngTest"/><!--对应的每一个测试类--> <class name = "Testng.demo"/> </classes> </test> </suite> ``` **测试用例:** ``` public class day01testngTest { @Test public void testTestEmailGenerator() { demo str = new demo(); int res = str.add(10,20); int cc = 30; Assert.assertEquals(cc,res); } @Test public static void BeforeTe(){ System.out.println("我是【BeforeTest】注释的方法将在属于<test>标签内的类的所有测试方法运行之前运行。"); } ``` <br> <br> **四、调用测试方法** 调用测试用例,执行`Testng.day01testngTest`中所有方法 **调用测试类中的具体方法:执行**Testng.day01testngTest类中方法名为**BeforeTe的测试方法** ~~~ <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="All Test Suite"> <!--测试套件--> <test verbose="2" preserve-order="true" name="/Users/XXX/IdeaProjects/IdeAjava_test"><!--测试集--> <classes><!--测试类集合--> <!-- <class name = "Testng.day01testngTest"/>&lt;!&ndash;对应的每一个测试类&ndash;&gt;--> <class name = "Testng.day01testngTest"> <methods> <include name="BeforeTe"></include> </methods> </class> </classes> </test> </suite> ~~~ **关键部位** ``` <class name = "Testng.day01testngTest"> <methods> <include name="BeforeTe"></include> 具体的方法名 </methods> ``` **运行结果:** 我是【BeforeTest】注释的方法将在属于<test>标签内的类的所有测试方法运行之前运行。 =============================================== All Test Suite Total tests run: 1, Passes: 1, Failures: 0, Skips: 0 =============================================== Process finished with exit code 0 <br> <br> ## 五、testng.xml  配置详解 testng.xml的基本格式可以在[官网](https://testng.org/doc/index.html)上查看,基本格式如下: ``` <project default="test"> <path id="cp"> <pathelement location="lib/testng-testng-5.13.1.jar"/> <pathelement location="build"/> </path> <taskdef name="testng" classpathref="cp" classname="org.testng.TestNGAntTask" /> <target name="test"> <testng classpathref="cp" groups="fast"> <classfileset dir="build" includes="example1/*.class"/> </testng> </target> </project> ``` **结构如下:** \-结-构-树 **suite** **\--tests** **\----parameters** **\----groups** **\------definitions \------runs** **\----classes** **\--parameters** <br> <br> **详细的结构如下:** ``` <test name="xxxx">   <!-- 参数定义的方法 -->   <parameter name="first-name" value="Cedric"/>   <!-- groups的用法,前提是需要存在classes的组,否则所有方法不被运行 -->   <groups>   <!-- 定义组中组的方法 -->     <define name="groups_name">       <include name="group1"/>       <include name="group2"/>     </define>     <run>       <!-- 此处用组名来区别 -->       <inclue name="groups_name" />       <exclue name="groups_name" />       </run>   </groups>   <!-- classes的用法,classes中包含类名,类名底下可以包含方法名或排除方法名 -->   <classes>     <class name="class1">       <methods>         <!-- 此处用方法名来区别 -->         <inclue name="method_name" />         <exclue name="method_name" />       </methods>     </class>   </classes> </test> ``` <br> <br> **元素说明:** **![](https://img.kancloud.cn/64/40/64406042e4a8a493affb3de9d5c347ff_53x19.png)testng.xml文档中最上层的元素** 说明:一个xml文件只能有一个![](https://img.kancloud.cn/41/09/41092c60476dac0753490d42a9f9af1c_87x28.png),是一个xml文件的根级![](https://img.kancloud.cn/b9/b7/b9b7a798dadef8ac5018316968a9e95d_71x25.png)由![](https://img.kancloud.cn/e5/36/e536a67185f0c1722afbe2ae5a769265_66x31.png)和![](https://img.kancloud.cn/be/2f/be2f812f8f16ee38c9e0d1097154fbfd_135x28.png)组成 参数说明: **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"