[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"/><!–对应的每一个测试类–>-->
<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"
- Java自动化测试
- 第一章:Java:基础内容
- 1.1:Java:Hello Word
- 1.2:Java:热身
- 1.3:Java:注释
- 1.4:Java:标识符
- 1.5:Java:常量
- 1.6:Java:基本数据类型
- 1.7:Java:引用类型
- 1.8:Java:String类
- 第二章:Java:运算符
- 2.1:Java:算数运算符
- 2.2:Java:关系运算符
- 2.3:Java:逻辑运算
- 2.4:Java:赋值运算符
- 2.5;Java:三元运算符
- 2.6:Java:位运算符
- 第三章:Java:循环控制语句
- 3.1:Java:for循环
- 3.2:Java:while循环
- 3.3:Java:switch
- 3.4:Java:if else
- 3.5:Java:练习题
- 第四章:Java:函数与全局/局部变量
- 4.1:Java:局部变量
- 4.2:Java:全局变量
- 第五章:Java:方法
- 5.1:Java:初识方法
- 5.2:Java:方法调用
- 5.3:Java:方法重载
- 5.4:Java:构造方法
- 5.5:Java:方法的注意事项
- 第六章:Java:面向对象
- 6.1:Java:小案例
- 6.2:Java:this 关键字
- 6.3:Java:super 关键字
- 6.4:Java:static 关键字
- 6.5:Java:final关键字
- 6.6:Java:instanceof 运算符
- 6.7:Java:面向对象之封装
- 6.8:Java:面向对象之继承
- 6.9:Java:面向对象之多态
- 第七章:Java:面向对象高级进阶
- 7.1:Java:抽象类
- 7.2:Java:Java中String类
- 7.3:Java:interface接口
- 7.4:Java:ArrayList
- 7.5:Java:HashSet
- 7.6:Java:HashMap
- 7.7:Java:反射(reflection)
- 第八章:Java:日志以及异常捕获
- 8.1:Java:log4j
- 8.2:Java:异常初识基础
- 8.3:Java:未被捕获的异常
- 8.4:Java:try和catch的使用
- 8.5:Java:多重catch语句的使用
- 8.6:Java:throws/throw 关键字
- 8.7:Java:finally关键字
- 8.8:Java:自定义异常
- 第九章:Java:xml and IO
- 9.1:Java:IO基本概念
- 9.2:java:properties
- 9.3:Java:xml基本介绍
- 9.4:Java:xml操作实例
- 第十章:Java:JDBC编程
- 10.1:Java:JDBC介绍
- 10.2:Java:JDBC查询
- 10.3:Java:JDBC插入
- 10.4:Java:Batch
- 10.5:Java:JDBC连接池
- 第十一章:Java:TestNG
- 11.1:java:TestNG简介
- 11.2:Java:TestNG小实例
- 11.3:Java:TestNG.xml文件配置
- 11.4:Java:TestNG基本注解
- 11.5:Java:TestNG注解代码
- 11.6:Java:TestNG预期异常
- 11.7:Java:TestNG忽略测试
- 11.8:Java:TestNG超时测试
- 11.9:Java:TestNG分组测试