在 PyCharm 里獲得代碼覆蓋率
當為源代碼添加測試代碼后,如何知道測試得是否充分呢?通常會通過代碼覆蓋(Code coverage)。代碼覆蓋是軟件測試中的一種度量,描述源代碼被測試的比例和程度,所得比例稱為代碼覆蓋率。在PyCharm內,可以在較低運行開銷下,對代碼執行覆蓋率進行測量。本節的主要內容是講解如何如何帶代碼覆蓋執行測試,如何查看結果等等。(這是PyCharm 專業版提供的功能)
1. 一些基本概念
代碼覆蓋率(Code Coverage)是反映測試用例對被測軟件覆蓋程度的重要指標,也是衡量測試工作進展情況的重要指標。它也是對測試工作進行量化的重要指標之一,根據其覆蓋內容的不同,又可以細分為:語句覆蓋、判定覆蓋、條件覆蓋、路徑覆蓋以及循環覆蓋等等,強度也是從弱到強。在所有這些覆蓋中語句覆蓋(Statement coverage)是最簡單的,也是最常用的,PyCharm 默認支持的就是語句覆蓋。
- 語句覆蓋/代碼行覆蓋:目標保證程序中每一條語句最少執行一次,其覆蓋標準無法發現判定中邏輯運算的錯誤。
- 判定覆蓋/分支覆蓋:是指選擇足夠的測試用例,使得運行這些測試用例時,每個判定的所有可能結果至少出現一次,但若程序中的判定是有幾個條件聯合構成時,它未必能發現每個條件的錯誤。
- 條件覆蓋:是指選擇足夠的測試用例,使得運行這些測試用例時,判定中每個條件的所有可能結果至少出現一次,但未必能覆蓋全部分支。
- 條件組合覆蓋:是使每個判定中條件結果的所有可能組合至少出現一次,因此判定本身的所有可能解說也至少出現一次,同時也是每個條件的所有可能結果至少出現一次。
- 路徑覆蓋: 是每條可能執行到的路徑至少執行一次,試圖覆蓋軟件中的所有路徑;
【補充說明】對于敏捷開發團隊而言,代碼覆蓋率是每個Sprint要完成的硬性質量標準(Exit Criteria)之一,覆蓋率高低根據項目的不同而不同:75%,80%甚至100%都是可能的。
2. 配置代碼覆蓋參數
主菜單:File/PyCharm -> Settings/Preferences dialog -> Build, Execution, Deployment -> Coverage.
Tips: 在執行前,確保 Use bundled coverage.py 選項是被選中的, 并安裝coverage 包。
3. 使用代碼覆蓋運行
我們依然以本章第一小節test_rectangle.py為例運行測試,PyCharm 提供了多種帶代碼覆蓋運行方式。
-
在編輯器內, 右鍵從上下文菜單選擇
Run <name> with Coverage
-
在 Project 工具窗口,右鍵從上下文菜單選擇
Run <name> with Coverage
-
選擇期望的 運行/調試 配置, 在主菜單選擇
Run -> Run <run/debug configuration name> with coverage.
-
在主工具欄, 點擊
Run <run/debug configuration name> with Coverage
按鈕
4. 查看代碼覆蓋結果
在程序結束運行后, 就會在 Project 與 Coverage 工具窗口顯示語句覆蓋結果
在編輯器中打開其中的文件,可以看到側邊框用綠色顯示了覆蓋的行,紅色顯示了未覆蓋的行。
除此以外,可以查看歷史的覆蓋率結果。 主菜單 Run -> Show Coverage Data
5. 生成覆蓋率報告
主菜單選擇 Run -> Generate Coverage Report
或者 在 Coverage 工具窗口點擊 Generate Coverage Report 按鈕。在"Generate Coverage Report"對話框中,指定將存儲生成報表的目錄就可以了。
6. 小結
本節內容是對執行測試內容的補充,通過代碼覆蓋的結果我們能快速查看到哪些代碼還沒被測試到,方便我們補充新的測試用例,幫助我們找到測試死角。