Java - Test - TestNG: testng.xml 元素 package
1. 概述
- 简介 package 元素
- packages
- package
- exclude
- include
2. 背景
-
准备
- 自动生成了 testng.xml 文件
- 已经基本了解了 testng.xml 的结构
-
问题
- 如何约束测试范围
- 假设我有很多的测试用例
- 我想一次执行所有
- 或者一次执行一部分
- 假设我有很多的测试用例
- 如何约束测试范围
3. 环境
-
ide
- idea
- 2018.2
- idea
-
配置文件
- testng.xml
-
测试包结构
- com.test01.Test1
- com.test02.Test2
- com.test03.Test3
-
约定
- 配置文件, 我只截取 suite 以下的部分
4. 场景
1. 场景1: 我想执行所有测试类
-
概述
- 执行所有测试类
-
配置文件
<suite name="All Test Suite"> <test verbose="2" preserve-order="true" name="test 1"> <packages> <package name="com.test01" /> <package name="com.test02" /> <package name="com.test03" /> </packages> </test> </suite>
-
解释
-
packages
-
概述
- 包的根元素
-
本质
- 就是个 容器类元素
- 告诉 testng, 这下面都是 package
- 感觉这么设计, 可能是为了效率吧
- package, class, group 执行的机制有不同
- 来回切换损失性能
- 所以尽量集中到一起
- 就是个 容器类元素
-
注意
- 一个 test 只能有一个
- 多了会报错
- 一个 test 只能有一个
-
-
package
-
概述
- 包元素
-
本质
- 指定需要执行的包
-
属性
- name
- 测试类的名字
- name
-
其他
- 使用
- 需要几个包, 直接写几个包就行了
- 使用
-
-
2. 场景2: 要执行的包有点多, 我能不能偷个懒
-
概述
- 执行所有测试类
- 想偷懒
-
配置文件
<suite name="All Test Suite"> <test verbose="2" preserve-order="true" name="test 1"> <packages> <package name="com.*" /> </packages> </test> </suite>
-
解释
- package
-
概述
- 这里使用了 正则
-
com.*
- 正则
- 用 正则 匹配了 包名
- 注意
- testng 没有 通配符
- 没有 wildcard
- testng 没有 通配符
- 正则
-
- package
3. 场景3: 要执行的包有点多, 但我又不想执行所有的包
-
概述
- 执行大部分测试
- 但有那么些类, 我又不想执行
-
配置文件
<suite name="All Test Suite"> <test verbose="2" preserve-order="true" name="test 1"> <packages> <package name="com.*" > <exclude name="com.test03" /> </package> </packages> </test> </suite>
-
解释
- exclude
- 概述
- 黑名单机制
- 名单里的 包, 不会再执行
- 黑名单机制
- 概述
- exclude
4. 场景4: 要执行的包有点多, 但我又不想执行所有的包
-
概述
- 执行少部分测试
- 好像和上次又有那么点不同
- 执行少部分测试
-
配置文件
<suite name="All Test Suite"> <test verbose="2" preserve-order="true" name="test 1"> <packages> <package name="com.*" > <include name="com.test03" /> </package> </packages> </test> </suite>
-
解释
- include
- 概述
- 白名单机制
- 只会执行 白名单里 的包
- 正则
- 白名单机制
- include 和 exclude 都支持正则
- testng 不支持通配符
- wildcard
- 概述
- 其他
- 在同一个 package 下, 最好不要和 exclude 混用
- include 和 exclude 都是支持正则的
- include
5. 一些问题
- 概述
- 想到的一些问题
1. 问题1: 一个类同时出现在多个 package标签 里, 执行几次
-
场景
- 同一个 包
- 出现在了 多个 package 元素里
-
结果
- 包里的测试方法, 只执行一次
2. 问题2: 连续两次 include 相同内容
-
场景
- 同一个类, include 两次
-
结果
- 包里的测试方法, 只执行一次
3. 问题3: 连续两次 exclude 相同内容
-
场景
- 同一个类, exclude 两次
-
结果
- 包里方法不执行
- 测试正常执行
4. 问题4: 先 include 再 exclude
-
场景
- 同一个包, 先 include 再 exclude
-
结果
- 包被 exclude
- 用例正常执行
5. 问题5: 先 exclude 再 include
-
场景
- 同一个包, 先 exclude 再 include
-
结果
- 包被 exclude
- 感觉是 exclude 后, 无法再 include 回来
- 用例正常执行
- 包被 exclude
6. 结论
- 相同操作, 多次执行
- 只算执行一次
- include 和 exclude 同时存在
- exclude 优先级高
- 实战建议
- 先想清楚, 自己需要什么样的范围
- 感觉可以作为注释写在配置里
- 先 include, 再 exclude
- 简化逻辑, 增强可读性
- 只对同一个包 做最多一次 include 和 一次 exclude
- 先想清楚, 自己需要什么样的范围
ps
- 文档和参考
-
文档
- 官方文档
- 老实说就一个页面
- 从头拉到尾
- 东西是都讲了, 但是只能当个字典来查
- 你需要有些基础才行
- 但是基础怎么来呢
- 好些东西还是没讲
- 东西是都讲了, 但是只能当个字典来查
- 官方文档
-
书籍
- testng beginner's guide
- 书不错
- 13 年的
- 没有中文
- 书不错
- testng beginner's guide
-
dtd
- testng.xml 的 dtd 文件
-
概述
- xml 的描述文件
- 正确性没问题
- 毕竟 testng 就是按照这个来解析的
- 注释上也相对清晰
- 可以和 官网 或者 参考书 形成互补
- 当然看起来有点麻烦
- 需用知道 dtd 的语法
-
内容
- 元素
- 元素的意义
- 元素的属性
- 元素的子元素
- 元素
-
- testng.xml 的 dtd 文件
-
尽量尝试解释清楚; 自己校对能力有限, 如果有错误欢迎指出