我有一個項目大約10k線,我試圖確保一切都被覆蓋。如何確保我的測試觸及我的代碼庫的每一行?
我知道有很多更復雜的考慮因素,但作爲基準,我想知道是否有辦法讓pytest
告訴我有多少行,以代碼庫中行數的百分比表示。例如,如果在if/else控制結構中,測試只覆蓋True情況,或者根本不運行某個函數,它可以通知我。
這當然偏向於笨重的單元測試,而不是精確的單元測試,但在這個階段我仍然會發現它很方便。
我想這是可能的,因爲工具如line_profiler
可以提供信息。
我有一個項目大約10k線,我試圖確保一切都被覆蓋。如何確保我的測試觸及我的代碼庫的每一行?
我知道有很多更復雜的考慮因素,但作爲基準,我想知道是否有辦法讓pytest
告訴我有多少行,以代碼庫中行數的百分比表示。例如,如果在if/else控制結構中,測試只覆蓋True情況,或者根本不運行某個函數,它可以通知我。
這當然偏向於笨重的單元測試,而不是精確的單元測試,但在這個階段我仍然會發現它很方便。
我想這是可能的,因爲工具如line_profiler
可以提供信息。
Coverage可能是你正在尋找的工具:
Coverage.py措施代碼覆蓋率,通常在測試執行。 它使用Python標準庫中 中提供的代碼分析工具和跟蹤鉤子來確定哪些行是可執行的,並且已經執行了 。
覆蓋率可以衡量您所覆蓋的線條,並幫助您識別待處理線條。例如,在coverage documentation中,您可以看到它生成的報告類型:
$ coverage report -m
Name Stmts Miss Cover Missing
-------------------------------------------------------
my_program 20 4 80% 33-35, 39
my_other_module 56 6 89% 17-23
-------------------------------------------------------
TOTAL 76 10 87%
優秀 我最終使用的特定命令是 'python2 -m coverage運行--source mymod test_mymod.py && python2 -m覆蓋報告' – user3557216 2014-09-18 22:18:54
您是否在搜索覆蓋率測量工具? – Sebastian 2014-09-18 21:53:25
我做過了,但沒有使用「覆蓋率」一詞。我想這就是所有結果都隱藏起來的地方。 – user3557216 2014-09-18 21:55:52
請記住,coverage是一個有用的指標,但不能*證明*你的代碼是好的,只是你已經記下了所有的路徑。如果你的測試不正確,你的代碼可能仍然是錯誤的。 – 2014-09-18 22:29:03