天天看點

pytest測試架構pytest-cov插件生成代碼覆寫率

作者:與科雷對話ing

Pytest提供了豐富的插件來擴充其功能,本章介紹下pytest-cov插件,用于生成測試覆寫率報告,幫助開發者了解哪些部分的代碼被測試覆寫,哪些部分還需要進一步的測試。

pytest測試架構pytest-cov插件生成代碼覆寫率

pytest-cov 支援多種報告格式,包括純文字、HTML、XML 等,開發者可以根據需要選擇合适的報告格式。

并且可以配合之前文章介紹的pytest-xdist插件進行分布式測試。

官方文檔:https://pytest-cov.readthedocs.io/en/latest/index.html

适配版本說明:

python >= 3.6

pytest-cov安裝

使用pip指令安裝: pip install pytest-cov (安裝在pytest工程所運作的python環境,python的安裝目錄或者虛拟環境目錄,可以參考之前文章檢視運作環境pycharm配置pytest運作環境)

通過pycharm安裝:打開設定,按照如下圖中安裝插件(windows系統)

pytest測試架構pytest-cov插件生成代碼覆寫率

pytest-cov運作

使用時無需導入,直接在pytest運作指令中添加參數即可。主要有以下參數:

--cov=PATH:需要分析的代碼路徑。

--cov-report=type:要生成的報告類型:html,xml,json,lcov,term,term-missing等。

--cov-config=path覆寫範圍的配置檔案。預設.coveragerc。

--no-cov-on-fail:如果測試運作失敗,不要報告覆寫範圍。

--no-cov:完全禁用覆寫報告。

--cov-reset:重置迄今為止在選項中積累的cov源。

--cov-fail-under=MIN如果總覆寫率小于MIN,則失敗。

--cov-append:結果附加到現有的資料檔案中,而不是覆寫它。

--cov-branch啟用分支覆寫。

--cov-context選擇設定動态上下文的方法。

生成測試覆寫率報告

舉例:我們的測試工程目錄如下:src目錄有兩個python程式檔案,testcase目錄是測試用例。testcode.py和testclass.py中的内容如下:簡單的比較函數

pytest測試架構pytest-cov插件生成代碼覆寫率
pytest測試架構pytest-cov插件生成代碼覆寫率

在test_case2.py檔案中導入兩個python子產品,設計2條用例分别覆寫函數功能,通過參數化又不完全覆寫函數的所有代碼。test_case_1傳入2組參數,test_case_2傳入1組參數。

pytest測試架構pytest-cov插件生成代碼覆寫率
import pytest
import sys
sys.path.append('..')
from src import testcode,testclass

@pytest.mark.parametrize('a,b',((1,1),(2,1)))
def test_case_1(a,b):
     testcode.compare(a,b)

@pytest.mark.parametrize('a,b',((1,1),(3,3)))
def test_case_2(a,b):
      testclass.testclass().compare(a,b)           

在pytest執行語句中添加參數-cov=../src --cov-report=html,分析src目錄的代碼覆寫率,并生成html測試報告。

執行後預設在測試用例目錄下建立htmlcov的目錄,并生成html測試報告。

pytest測試架構pytest-cov插件生成代碼覆寫率

在浏覽器下打開index.html報告,報告内容如下:

Files顯示的是子產品的覆寫率資訊。

pytest測試架構pytest-cov插件生成代碼覆寫率

點選Functions檢視函數覆寫率:

pytest測試架構pytest-cov插件生成代碼覆寫率

點選Classes檢視類的覆寫率:

pytest測試架構pytest-cov插件生成代碼覆寫率

點進某個檔案檢視檔案内的行覆寫詳細資訊:綠色表示覆寫,紅色未覆寫

testclass檔案:

pytest測試架構pytest-cov插件生成代碼覆寫率

testcode檔案:

pytest測試架構pytest-cov插件生成代碼覆寫率

在一些大型的pytest工程中,用例很多,一般會使用分布式執行,比如開頭提到的使用pytest-xdist插件的分布式執行功能,參數中添加-n 2可以起兩個程序執行等。

其他參數的簡要介紹

--no-cov-on-fail:如果測試運作失敗,不要報告覆寫範圍。

舉例:設定用例會執行失敗(比如上面的用例中加上assert False),當執行參數帶上--no-cov-on-fail時,用例執行有失敗時,就不會産生覆寫率報告。

pytest測試架構pytest-cov插件生成代碼覆寫率

--no-cov:完全禁用覆寫報告。

當執行指令加上該參數後,不會生成代碼覆寫率報告。

--cov-fail-under=MIN如果總覆寫率小于MIN,則認為不達标。

舉例:執行指令增加參數--cov-fail-under=90要求覆寫率不低于90%

當執行後結果如下:覆寫率不達标,會有報錯資訊。

pytest測試架構pytest-cov插件生成代碼覆寫率

--cov-context:當我們在多個執行用例時希望累積這些代碼覆寫率時我們可以加上該參數--cov-context=test(參數設定其他值會報錯)。

共勉: 東漢·班固《漢書·枚乘傳》:“泰山之管穿石,單極之绠斷幹。水非石之鑽,索非木之鋸,漸靡使之然也。”

-----指水滴不斷地滴,可以滴穿石頭;

-----比喻堅持不懈,集細微的力量也能成就難能的功勞。

----感謝讀者的閱讀和學習,謝謝大家。

---祝願大家都能夠龍騰虎躍,步步高升!!!