視頻:pytest01-快速上手_嗶哩嗶哩_bilibili
資料:pytest 框架 - 白月黑羽
基于 Python 語言的自動化測試框架 最知名的 有如下 3 款unittest、pytest、robotframework
前兩款框架主要(或者說很大程度上)是 聚焦 在 白盒單元測試而 robotframework 主要聚焦在 系統測試。
pytest可以利用第三方插件,生成表報。
安裝:
安裝直接執行命令:pip install pytest
還需要產生測試報表,執行如下命令安裝:pip install pytest-html
快速上手:
測試用例代碼規格:我們編寫的測試用例代碼文件, 必須以?test_
?開頭,或者以?_test
?結尾
要求:類名(Class 類名)必須以Test為前綴,其中的類方法(def 類方法)必須以test為前綴。
pytest 中用例的檢查點 直接用 Python 的 assert 斷言。assert 后面的表達式結果 為 True ,就是 檢查點 通過,結果為False ,就是檢查點 不通過。和hytest中的check_point()方法不一樣。
執行:pytest? 或者pytest+對應目錄。直接執行?pytest
?命令不會將當前目錄設置為模塊搜索路徑
所以更推薦 執行命令?python -m pytest 。
目前 項目根目錄 中 只有一個cases 目錄用例存放測試用例, 將來還會有其他目錄,比如:lib目錄存放庫代碼、cfg目錄存放配置數據 等等。為了防止 pytest 到其他目錄中找測試用例項,執行測試時,我們可以在命令行加上目標目錄 cases ,就是這樣:python -m pytest cases
產生報告:python -m pytest cases --html=report.html --self-contained-html
初始化清除:
對自動化測試框架來說,初始化清除功能 至關重要。
模塊級別:模塊級別
?的初始化、清除 分別 在整個模塊的測試用例 執行前后執行,并且?只會執行1次
?。定義 setup_module 和 teardown_module 全局函數。和hytest中的名稱不一樣。
def setup_module():print('\n *** 初始化-模塊 ***')def teardown_module():print('\n *** 清除-模塊 ***')
類級別:類級別
?的初始化、清除 分別 在整個類的測試用例 執行前后執行,并且?只會執行1次。
定義 setup_class 和 teardown_class 類方法。主要是用來為該?類
?中的所有測試用例做?公共的
?初始化 和 清除。
def setup_module():print('\n *** 初始化-模塊 ***')def teardown_module():print('\n *** 清除-模塊 ***')class Test_錯誤密碼:@classmethoddef setup_class(cls):print('\n === 初始化-類 ===')@classmethoddef teardown_class(cls):print('\n === 清除 - 類 ===')
方法級別:方法級別 的初始化、清除 分別 在類的 每個測試方法 執行前后執行,并且?每個用例分別執行1次。
定義 setup_method 和 teardown_method 實例方法
class Test_錯誤密碼:@classmethoddef setup_class(cls):print('\n === 初始化-類 ===')@classmethoddef teardown_class(cls):print('\n === 清除 - 類 ===')def setup_method(self):print('\n --- 初始化-方法 ---')def teardown_method(self):print('\n --- 清除 -方法 ---')
目錄級別:目標級別的 初始化清除,就是針對整個目錄執行的初始化、清除。需要在初始化的目錄下面創建 一個名為?conftest.py
?的文件,里面內容如下所示
import pytest @pytest.fixture(scope='package',autouse=True)
def st_emptyEnv():print(f'\n#### 初始化-目錄甲')
//這里清除環境的代碼就是 yield 之后的代碼。 這是一個生成器yieldprint(f'\n#### 清除-目錄甲')
挑選用例執行:
指定一個模塊:python -m pytest cases\登錄\test_錯誤登錄.py
指定目錄:python -m pytest cases
指定模塊里面的函數或者類:python -m pytest cases\登錄\test_錯誤登錄.py::Test_錯誤密碼
根據名字:使用 命令行參數 -k 后面加名字來挑選要執行的測試項.
例如:python -m pytest -k C001001 -s
-k 后面的名字:可以是測試函數的名字,可以是類的名字,可以是模塊文件名,可以是目錄的名字;是大小寫敏感的;不一定要完整,只要能有部分匹配上就行;可以用 not 表示選擇名字中不包含。
根據標簽:需要先給標簽,然后再使用此方法-m。標簽也支持中文.
import pytestclass Test_錯誤密碼2:@pytest.mark.webtest //或者@pytest.mark.網頁測試def test_C001021(self):print('\n用例C001021')assert 1 == 1
然后,可以這樣運行指定標簽的用例:python -m pytest cases -m webtest -s
Pytest 助手:
大佬開發的助手。看看即可。
實戰案例:
這樣執行命令
python -m pytest cases -sv
因為?-m
?這種執行模塊的方式運行python, 會自動把當前工作目錄作為模塊搜索路徑,這樣就能避免Python解釋器 搜索不到 庫文件的問題?ModuleNotFoundError: No module named 'xxxx'
。
但是,實際上仍然會出現這種問題。如果以上方法沒能解決。可以嘗試使用:pip install pytest。
這樣就會在類方法旁邊形成一個可以運行的按鈕。直接點擊運行按鈕即可。