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 文件
-