Java - Test - TestNG: testng.xml 元素 package
2024-10-08 12:10:53
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 文件
最新文章
- MySQL Database on Azure新功能
- ubuntu12.04 gitlab搭建
- 替换CENTOS自带的yum源为网易163镜像源
- mysql中profile的使用
- Leetcode 21 Merge Two Sorted Lists 链表
- SDRAM 学习(三)之command
- 【Matlab】随机游走产生图像效果
- Java设计模式(学习整理)---单例模式
- window7下statsvn统计代码量
- JS正则表达式大全【转】
- Cocos2d-x 游戏存档
- NYoj289苹果(0-1背包)
- 运维面试题之linux基础
- js 获取get参数
- ubuntu下VS code如何调试C++代码
- Java-Method类常用方法详解
- 「CodeForces - 717E」Paint it really, really dark gray (dfs)
- 最近使用Navicat for MySQl访问远程mysql数据库,出现报错,显示“2003- Can&#39;t connect MySQL Server on &#39;localhost&#39;(10038)“。
- Single Number leetcode java
- hdu 2289 要二分的杯子