【pytest】使用 mark 標記及運行測試用例,註冊、管理 mark 標記

使用 @pytest.mark.xxx 標記測試用例:

  1. 可以標記測試方法、測試類,標記名可以自定義,最好起有意義的名字;
  2. 同一測試類/方法可同時擁有多個標記;
# 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

運行標記的用例:

  1. 使用 -m 參數運行標記的測試用例;
  2. -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 標記:

  1. 首先在項目根目錄創建一個文件 pytest.ini ,這個是 pytest 的配置文件;
  2. 然後在 pytest.ini 文件的 markers 中寫入你的 mark 標記, 冒號 “:” 前面是標記名稱,後面是 mark 標記的說明,可以是空字符串;
  3. 注意: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 標記的使用!

  1. 在 pytest.ini 文件中添加參數 “addopts = --strict”;
  2. 注意要另起一行,不要在 markers 中添加;
  3. 添加該參數後,當使用未註冊的 mark 標記時,pytest會直接報錯:“ 'xxx' not found in `markers` configuration option ”,不執行測試任務;
  4. 注意: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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章