Java - Test - TestNG: testng.xml 元素 package


1. 概述

  1. 簡介 package 元素
    1. packages
    2. package
    3. exclude
    4. include

2. 背景

  1. 准備

    1. 自動生成了 testng.xml 文件
    2. 已經基本了解了 testng.xml 的結構
  2. 問題

    1. 如何約束測試范圍
      1. 假設我有很多的測試用例
        1. 我想一次執行所有
        2. 或者一次執行一部分

3. 環境

  1. ide

    1. idea
      1. 2018.2
  2. 配置文件

    1. testng.xml
  3. 測試包結構

    1. com.test01.Test1
    2. com.test02.Test2
    3. com.test03.Test3
  4. 約定

    1. 配置文件, 我只截取 suite 以下的部分

4. 場景

1. 場景1: 我想執行所有測試類

  1. 概述

    1. 執行所有測試類
  2. 配置文件

     <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>
    
  3. 解釋

    1. packages

      1. 概述

        1. 包的根元素
      2. 本質

        1. 就是個 容器類元素
          1. 告訴 testng, 這下面都是 package
          2. 感覺這么設計, 可能是為了效率吧
            1. package, class, group 執行的機制有不同
            2. 來回切換損失性能
            3. 所以盡量集中到一起
      3. 注意

        1. 一個 test 只能有一個
          1. 多了會報錯
    2. package

      1. 概述

        1. 包元素
      2. 本質

        1. 指定需要執行的包
      3. 屬性

        1. name
          1. 測試類的名字
      4. 其他

        1. 使用
          1. 需要幾個包, 直接寫幾個包就行了

2. 場景2: 要執行的包有點多, 我能不能偷個懶

  1. 概述

    1. 執行所有測試類
    2. 想偷懶
  2. 配置文件

     <suite name="All Test Suite">
         <test verbose="2" preserve-order="true" name="test 1">
             <packages>
                 <package name="com.*" />
             </packages>
         </test>
     </suite>
    
  3. 解釋

    1. package
      1. 概述

        1. 這里使用了 正則
      2. com.*

        1. 正則
          1. 用 正則 匹配了 包名
        2. 注意
          1. testng 沒有 通配符
            1. 沒有 wildcard

3. 場景3: 要執行的包有點多, 但我又不想執行所有的包

  1. 概述

    1. 執行大部分測試
    2. 但有那么些類, 我又不想執行
  2. 配置文件

     <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>
    
  3. 解釋

    1. exclude
      1. 概述
        1. 黑名單機制
          1. 名單里的 包, 不會再執行

4. 場景4: 要執行的包有點多, 但我又不想執行所有的包

  1. 概述

    1. 執行少部分測試
      1. 好像和上次又有那么點不同
  2. 配置文件

     <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>
    
  3. 解釋

    1. include
      1. 概述
        1. 白名單機制
          1. 只會執行 白名單里 的包
        2. 正則
      2. include 和 exclude 都支持正則
      3. testng 不支持通配符
        1. wildcard
    2. 其他
      1. 在同一個 package 下, 最好不要和 exclude 混用
      2. include 和 exclude 都是支持正則的

5. 一些問題

  1. 概述
    1. 想到的一些問題

1. 問題1: 一個類同時出現在多個 package標簽 里, 執行幾次

  1. 場景

    1. 同一個 包
    2. 出現在了 多個 package 元素里
  2. 結果

    1. 包里的測試方法, 只執行一次

2. 問題2: 連續兩次 include 相同內容

  1. 場景

    1. 同一個類, include 兩次
  2. 結果

    1. 包里的測試方法, 只執行一次

3. 問題3: 連續兩次 exclude 相同內容

  1. 場景

    1. 同一個類, exclude 兩次
  2. 結果

    1. 包里方法不執行
    2. 測試正常執行

4. 問題4: 先 include 再 exclude

  1. 場景

    1. 同一個包, 先 include 再 exclude
  2. 結果

    1. 包被 exclude
    2. 用例正常執行

5. 問題5: 先 exclude 再 include

  1. 場景

    1. 同一個包, 先 exclude 再 include
  2. 結果

    1. 包被 exclude
      1. 感覺是 exclude 后, 無法再 include 回來
    2. 用例正常執行

6. 結論

  1. 相同操作, 多次執行
    1. 只算執行一次
  2. include 和 exclude 同時存在
    1. exclude 優先級高
  3. 實戰建議
    1. 先想清楚, 自己需要什么樣的范圍
      1. 感覺可以作為注釋寫在配置里
    2. 先 include, 再 exclude
      1. 簡化邏輯, 增強可讀性
      2. 只對同一個包 做最多一次 include 和 一次 exclude

ps

  1. 文檔和參考
    1. 文檔

      1. 官方文檔
        1. 老實說就一個頁面
        2. 從頭拉到尾
          1. 東西是都講了, 但是只能當個字典來查
            1. 你需要有些基礎才行
            2. 但是基礎怎么來呢
          2. 好些東西還是沒講
    2. 書籍

      1. testng beginner's guide
        1. 書不錯
          1. 13 年的
          2. 沒有中文
    3. dtd

      1. testng.xml 的 dtd 文件
        1. 概述

          1. xml 的描述文件
          2. 正確性沒問題
            1. 畢竟 testng 就是按照這個來解析的
          3. 注釋上也相對清晰
            1. 可以和 官網 或者 參考書 形成互補
          4. 當然看起來有點麻煩
            1. 需用知道 dtd 的語法
        2. 內容

          1. 元素
            1. 元素的意義
            2. 元素的屬性
            3. 元素的子元素


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM