測試工具 - IDEA - IDEA Code Coverage


  1. 概述

    1. 使用 idea 自帶的 code coverage 工具
  2. 背景

    1. 了解 白盒測試用例設計 和 測試覆蓋率 之后, 大概就需要 實踐 了
    2. 實踐的話, 還是需要 工具 來檢驗效果
  3. 工具選取

    1. 選項
      1. JaCoCo
      2. IDEA Code Coverage
    2. 結果
      1. 兩個都想試試

        1. 先看看 IDEA CC, 這個比較簡單
        2. JaCoCo 感覺更加復雜
          1. 指標
          2. 使用的場景都更加復雜
      2. 先講 IDEA Code Coverage

        1. 簡單
        2. Idea 自帶, 集成方便

1. 准備

  1. 理論基礎

    1. 白盒測試用例設計
    2. 測試覆蓋率
  2. 環境

    1. os
      1. win 10
    2. ide
      1. idea 2018.2
    3. 組件
      1. java
        1. jdk8
      2. testng
        1. 6.14.3
      3. maven
        1. 3.6.0
  3. 代碼

    1. maven architecture
      1. quickstart
  4. 其他

    1. idea 插件

      1. coverage
        1. 這個一定要有
        2. 有了, 一定要打開
        3. idea 添加插件, 我就不講了
    2. testng 的配置文件

      1. 這個我也不細講了
        1. 自動生成配置文件的插件, 我之前講過
        2. 配置文件里一些主要的配置, 我也講過

2. 觸發

  1. 概述

    1. 通過 執行測試, 觸發 Coverage 插件
  2. 步驟

    1. 執行測試
      1. 進入某個測試類
        1. 比如 maven 工程自帶的 AppTest 類
      2. 執行測試
        1. 在 類 中右鍵
        2. 選擇 'Run Apptest with Coverage'
      3. 當然, 執行方式有很多
        1. 方法
        2. 配置文件
  3. 結果

    1. 測試執行完畢
    2. 默認在 idea 右邊, 彈出一個 coverage 的插件
  4. 問題

    1. 如果沒有出現怎么辦
      1. 這個需要確認這些東西
        1. 插件是否下載
        2. 插件是否激活
        3. coverage 視圖是否激活
          1. File > Settings > Build, Execution, Deployment > Coverage
            1. Active coverage view 選項
              1. 記得打鈎

3. Coverage 視圖簡單介紹

  1. 概述

    1. 簡單說下視圖里的內容
      1. 其實沒啥好說的, 操作兩下, 就明白了
  2. 標簽

    1. 標題

      1. 你執行 測試, 所對應的 Configuration
        1. 這意味着, 你又可以有地方調參數了...
    2. 左邊一列的操作

      1. 向上
      2. 平鋪展示
      3. coverage 視圖焦點, 控制代碼展示窗口
      4. 代碼展示窗口, 控制 coverage 視圖焦點,
      5. 生成報告
        1. 選擇 文件路徑, 生成報告
        2. 報告內容, 並不會很多
        3. 自己看看, 就明白了了
      6. 關閉視圖
    3. 表格內容

      1. 元素

        1. 包或者文件
      2. class, %

        1. 類覆蓋率
      3. method, %

        1. 方法覆蓋率
      4. line, %

        1. 行覆蓋率
    4. 表格交互

      1. 單擊包
        1. 進入 包內, 並展示包內覆蓋率
      2. 單擊類
        1. 代碼會跳轉的類, 並且會聚焦到沒有覆蓋的位置

4. 代碼區域

  1. 概述

    1. 執行 帶覆蓋率的測試 后, 代碼區域也會發生變化
    2. 我這邊默認是的 coverage 模式是 simpling
      1. 所以我先按照這個講...
  2. 代碼窗口

    1. 側邊欄
      1. 色塊

        1. 紅色
          1. 沒有覆蓋
        2. 綠色
          1. 覆蓋至少一次
        3. 黃色
          1. 條件覆蓋不充分
        4. 鼠標點擊顏色
          1. 會出現 浮動的小窗
          2. 沒啥前端背景, 所以這些東西准確叫啥, 真的讓我很為難
      2. 浮動小窗

        1. 頂部控件
          1. 上下
            1. 在色塊之間上下移動
          2. 灰色文件夾
            1. 暫時不可用, 后來再講
          3. 字節碼展示
            1. 開啟新的小窗口, 展示 字節碼
              1. 高端功能暫時用不了
          4. 顏色設置
            1. 這個暫時用不了
              1. 默認顏色挺好的
          5. 紅叉
            1. 這個不是退出標簽
            2. 這個是清楚這一輪的覆蓋率數據
              1. 點的時候請注意
            3. 退出的話, 直接鼠標在別處點一下, 就行了

5. Project 區域

  1. 概述

    1. Project 區域的覆蓋率展示
  2. 驚喜

    1. 眼瞼的同學, 已經有了新的發現
      1. Project 欄里的包樹形圖, 右側已經出現了一些關於 覆蓋率的信息
        1. package
          1. 類覆蓋率
          2. 行覆蓋率
        2. class
          1. 方法覆蓋率
          2. 行覆蓋率
  3. 疑問

    1. 問題1: 我不想要這東西, 有辦法嗎?
      1. 當然有啦
        1. 路徑
          1. ctrl + alt + f6
          2. Analyze > show coverage data
        2. 操作
          1. 勾選你想要顯示 覆蓋率的路徑
          2. 然后確定

6. configuraion 配置

  1. 概述

    1. 覆蓋率這個東西, 也是可以配置的
  2. 路徑

    1. 打開 run configuration
    2. 找到你執行測試的那個 configuration
    3. 切換到 coverage tab
  3. 選項說明

    1. choose coverage runner
      1. 現在用 idea
      2. 講 jacoco 的時候, 應該要換的
    2. sampling & tracing
      1. 模式
        1. 針對 idea 的選項
        2. 其他 runner, 只有 sampling
      2. sampling
        1. 簡單模式
          1. 就是上面講的東西
      3. tracing
        1. 追蹤模式
          1. 概述
            1. 會對 判定 做更細致的追蹤
          2. 變化
            1. 后面會描述
    3. packages and classes to record coverage data
      1. 概述

        1. 追蹤覆蓋率的類
      2. 建議

        1. 最好勾選一下
          1. 如果默認的話, 所有的包都會出現在 coverage 那個窗口里
            1. 雖然沒 覆蓋率, 但是看着好煩的...
  4. tracing 模式的變化

    1. 概述

      1. tracing 模式有所增強
    2. 增強內容

      1. 對 if 的判斷, 有了增強
        1. 會統計 if 里 各個條件 真假執行次數
    3. 具體表現

      1. 單擊 左側的色塊
        1. if 條件那行, 會有更加明確的信息
    4. 選項: track per test coverage

      1. 概述

        1. 追蹤測試方法
      2. 回顧

        1. 之前色塊的小彈窗里, 有個不可執行的灰色文件夾, 還記得嗎?
      3. 勾選之后

        1. 單擊那個 灰色文件夾
          1. 有新彈窗出現
          2. 內容是 執行這個代碼的 測試方法
        2. 感覺是個 很不錯的功能
  5. 問題

    1. 嘗試配置修改中, 我有過多次執行同一個 configuration
      1. 執行完后, 會有一個彈窗
        1. 看得我一臉懵逼
          1. 這玩意是什么鬼, 能設置嗎?o
      2. 當然能啦

7. settings 配置

  1. 概述

    1. settings 里的配置
  2. 路徑

    1. 開始提到過的一個路徑
      1. File > Settings > Build, Execution, Deployment > Coverage
  3. 配置

    1. when new coverage is gathered

      1. 概述

        1. 配置 新的覆蓋率 是否聚合
      2. 選項

        1. active coverage view

          1. 概述

            1. 展示 coverage 窗口
          2. 作用

            1. 執行 run test with coverage 時, 展示 coverage 窗口
          3. 這次一定要先講下面這個...

            1. 首先要窗口出現, 才能出發后面的東西吧
        2. 一個 radio

          1. 選項

            1. show options before applying coverage to the editor
              1. 已經彈出 coverage 視圖后, 再次執行, 會彈出一個 選項框
                1. 詢問的選項, 就是下面三種
            2. do not apply collected coverage
              1. 丟棄 這次的 代碼覆蓋率結果
            3. replace active suites with the new one
              1. 丟棄 上次的 代碼覆蓋率結果
              2. 將 這次的 代碼覆蓋率結果, 填充到 coverage 窗口
            4. add to the active suites
              1. 保留 上次的 代碼覆蓋率結果
              2. 將 這次的 代碼覆蓋率結果, 疊加到 coverage 窗口
          2. 問題

            1. 大部分時候都好用, 但是碰到過幾次失靈的情況
              1. 直接用了 選項3
              2. 問題需要我 確認
    2. java coverage

      1. 選項

        1. 不統計 普通類 的默認構造函數
          1. 統計也沒啥意義
        2. 不統計 工具類 的私有構造函數
          1. 工具類不需要實例化
            1. 所以通常做一個 私有構造, 防止有開發把這個類實例化
      2. 解釋

        1. 這來選項我就翻譯一下, 意義就不解釋了, 大家應該都懂

ps

  1. ref

    1. Code coverage
      1. 官方文檔
        1. 就這一個吧, 其他的基本是自己邊嘗試邊整理
  2. 后續

    1. jacoco
      1. ide
      2. maven
      3. jenkins
  3. 為啥不直接講 jacoco

    1. jacoco 其實有點復雜
      1. 數據
      2. 配置
    2. idea 簡單好理解
    3. 兩者有些東西, 本質上是相通的
      1. 理解了簡單的 idea, 后面依葫蘆畫瓢, 學習曲線會更加平滑
  4. 遺漏

    1. 生成的結果報表
      1. 這個不太難, 基本都能看懂


免責聲明!

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



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