使用 @pytest.mark.xxx 標記測試用例:
- 可以標記測試方法、測試類,標記名可以自定義,最好起有意義的名字;
- 同一測試類/方法可同時擁有多個標記;
# test_login_logout.py
import pytest
@pytest.mark.login
class TestLogin:
"""登陸功能測試類"""
@pytest.mark.smoke
@pytest.mark.success
def test_login_sucess(self):
"""登陸成功"""
# 實現登陸邏輯
pass
@pytest.mark.failed
def test_login_failed(self):
"""登陸失敗"""
# 實現登陸邏輯
pass
@pytest.mark.logout
class TestLogout:
"""登出功能測試類"""
@pytest.mark.smoke
@pytest.mark.success
def test_logout_sucess(self):
"""登出成功"""
# 實現登出功能
pass
@pytest.mark.failed
def test_logout_failed(self):
"""登出失敗"""
# 實現登出功能
pass
運行標記的用例:
- 使用 -m 參數運行標記的測試用例;
- -m 參數支持 and、or 、not 等表達式;
# 運行登陸功能的用例
pytest.main(['-m login'])
# 運行登出功能的用例
pytest.main(['-m logout'])
# 運行功能成功的用例
pytest.main(['-m success'])
# 運行功能失敗的用例
pytest.main(['-m failed'])
# 運行登陸功能但是不運行登陸失敗的測試用例
pytest.main(['-m login and not failed'])
# 運行登出功能但是不運行登出成功的測試用例
pytest.main(['-m logout and not success'])
# 運行登陸和登出的用例
pytest.main(['-m login or logout'])
註冊、管理 mark 標記:
當使用 -m 參數執行 mark 標記的用例時,pytest 會發出告警信息 “PytestUnknownMarkWarning: Unknown pytest.mark.login - is this a typo? ”,告訴你這是一個 pytest 未知的一個標記!爲了消除告警,我們需要在 pytest 的配置文件中註冊 mark 標記!
註冊 mark 標記:
- 首先在項目根目錄創建一個文件 pytest.ini ,這個是 pytest 的配置文件;
- 然後在 pytest.ini 文件的 markers 中寫入你的 mark 標記, 冒號 “:” 前面是標記名稱,後面是 mark 標記的說明,可以是空字符串;
- 注意:pytest.ini 文件中只能使用純英文字符,絕對不能使用中文的字符(尤其是冒號和空格)!
# pytest.ini
[pytest]
markers =
login : 'marks tests as login'
logout : 'marks tests as logout'
success : 'marks tests as success'
failed : 'marks tests as failed'
規範使用 mark 標記:
註冊完 mark 標記之後 pytest 便不會再告警,但是有時手殘容易寫錯 mark 名,導致 pytest 找不到用例,一時想不開很難debug,尤其是團隊協作時很容易出現類似問題,所以我們需要 “addopts = --strict” 參數來嚴格規範 mark 標記的使用!
- 在 pytest.ini 文件中添加參數 “addopts = --strict”;
- 注意要另起一行,不要在 markers 中添加;
- 添加該參數後,當使用未註冊的 mark 標記時,pytest會直接報錯:“ 'xxx' not found in `markers` configuration option ”,不執行測試任務;
- 注意:pytest.ini 配置文件不支持註釋,不支持註釋,不支持註釋...
# pytest.ini
[pytest]
markers =
login : 'marks tests as login'
logout : 'marks tests as logout'
success : 'marks tests as success'
failed : 'marks tests as failed'
addopts = --strict