一、pytest概述
pytest 是一個流行的 Python 測試框架,其具有易於使用,簡化測試編寫和擴展性強的優點。pytest 使用了 Python 自帶的 assert 語句,幫助開發者編寫簡單的測試用例,同時它還提供了眾多的插件,可以擴展 pytest 的功能。
二、測試用例選擇
測試執行速度是一個很重要的問題,特別是當測試用例數量很多的時候。然而,測試用例選擇很可能成為性能瓶頸,因為所有未被選擇的測試用例仍需調用 setUp 和 tearDown 方法。pytest -k 選項提供了一個簡便快捷的方式,可以按照名稱對基礎測試用例進行選擇。
三、pytest -k 用法
pytest -k 選項可以按照測試用例名稱對測試套件進行選擇。具體來說,這個選項可以通過以下方式來使用:
pytest -k "expression"
其中,”expression” 是可以通過 Python 語言進行編寫的字符串,它可以包含 Python 運算符和函數的調用,且對大小寫敏感。pytest -k 選項會匹配用例名稱中的 “expression” 子串,從而執行與匹配項相關的測試用例。
例如,如果我們有以下測試用例:
def test_add(): assert 1+1 == 2 def test_subtract(): assert 2-1 == 1 def test_divide(): assert 4/2 == 2
可以通過以下命令行語句來執行單元測試:
pytest -v test_sample.py
結果如下:
test_sample.py::test_add PASSED test_sample.py::test_subtract PASSED test_sample.py::test_divide PASSED
如果我們只想運行包含 add 的測試用例,在命令行中使用 -k 參數:
pytest -v -k "add" test_sample.py
結果如下:
test_sample.py::test_add PASSED
通過這種方式,我們可以迅速、有效的選擇和執行特定的測試用例,從而幫助我們更快的了解測試用例的運行結果。
四、pytest -k 高級用法
在 pytest 中,-k 參數不僅僅可以用單個測試用例名稱進行匹配,還支持使用 Pyhon 表達式進行匹配。匹配表達式的格式為:”
pytest -k "expression"
這裡的表達式可以是任意合法的 Python 表達式,包括運算符、函數調用等。pytest -k 會按照表達式的規則對測試用例進行匹配。
例如,我們有以下三個測試用例:
def test_add(): assert 1+1 == 2 def test_subtract(): assert 2-1 == 1 @mark.parametrize("x, y, expected", [(3, 2, 5), (1, 2, 3)]) def test_add_param(x, y, expected): assert x + y == expected
現在我們想運行包含 “add” 單詞或參數數量大於等於3的用例。在命令行中使用 -k 參數:
pytest -v -k "add or len(parametrize.args)>=3" test_sample.py
結果如下:
test_sample.py::test_add PASSED test_sample.py::test_add_param[3-2-5] PASSED
以上方式體現了 pytests 的擴展性和靈活性。開發者可以根據具體需要自由組合和匹配測試用例,以便快速運行測試。
五、pytest -k 的其他應用
除了按名稱和表達式對用例進行選擇和過濾外,pytest -k 還可以用於:按類選擇,設置自定義標記(marker)過濾和更多自定義實現。
例如,我們有一個包含了兩個測試類的測試套件:
class TestMath: def test_add(self): assert 1 + 1 == 2 class TestStat: def test_mean(self): assert sum([1, 2, 3]) / 3 == 2.0
我們可以通過以下命令來選擇 TestMath 類中的測試用例:
pytest -v -k "TestMath" test_sample.py
結果如下:
test_sample.py::TestMath::test_add PASSED
除此之外,pytest -k 參數還可以用於支持一系列其他過濾操作,例如限制測試運行時間、錯誤報告等。因此,可以說 pytest -k 是一款功能強大的測試用例選擇工具。
原創文章,作者:NLBRR,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/330918.html