【pytest系列】- mark標記功能詳細介紹

mark標記

​ 在實際工做中,咱們要寫的自動化用例會比較多,也不會都放在一個py文件中,若是有幾十個py文件,上百個方法,而咱們只想運行當中部分的用例時怎麼辦?python

​ pytest提供了一個很是好用的mark功能,能夠給測試用例打上各類各樣的標籤,運行用例時能夠指定運行某個標籤。mark功能做用就是靈活的管理和運行測試用例。函數

​ 標籤既能夠打到方法上,也能夠打到類上,標記的兩種方式:測試

  • 🍊 直接標記類或方法或函數:@pytest.mark.標籤名
  • 🍊 類屬性:pytestmark = [pytest.mark.標籤名, pytest.mark.標籤名],須要注意的是屬性名稱是固定的
import pytest


@pytest.mark.beta	# 能夠給類打標籤
class TestLogin:	# 標記類

    @pytest.mark.qc
    @pytest.mark.beta	# 也能夠多個標籤
    def test_login(self):	# 標記方法
        pass

@pytest.mark.smoke		# 單個標籤
def test_register():	# 標記函數
        pass

class TestClass:
    # 加一個 pytestmark的類屬性
    pytestmark = [pytest.mark.qc, pytest.mark.beta]	# 標籤存放在一個列表

pytest.main()

註冊標籤名

​ 咱們要想運行已經打好標記的函數,還須要對標籤名進行註冊,告訴pytest有哪些標籤,若是不進行註冊運行時(pytest的高級版本)可能會報警告讓你進行註冊。命令行

​ 咱們只須要在項目根目錄下建立一個pytest.ini文件,注意文件名是不可修改的,不然pytest會找不到。內容格式以下:code

# pytest.ini
# 只能修改=右邊的值
[pytest]	
python_files = demo_*.py	# 模塊名以demo_開頭
python_functions = demo_*	# 方法名以demo_開頭
python_classes = Demo*	# 類名名以Demo開頭

# 註冊標籤
markers =
    qc
    beta
    smoke

運行指定的標籤

經過命令行執行

​ 單個標籤:pytest -m "標籤名" (-m意思是執行標籤mark),不想執行某個標籤能夠用not來取反,即pytest -m "not 標籤名"blog

​ 多個標籤:能夠加上判斷,pytest -m "qc and beta" 或者 pytest -m "qc or beta" 效果是同樣的ip

注意:標籤名必定要加雙引號,單引號是會報錯的。自動化

經過代碼執行

​ 這裏普及一下,main()方法是能夠接收不定長參數的,所以能夠把要執行的命令放在一個列表中io

if __name__ == '__main__':
    pytest.main(['-m qc and beta', '-s'])	# 標籤名不須要加引號

​ 關於pytest的指令,能夠經過控制檯執行pytest --help查看,上面舉例中-s命令是指打印更加詳細的信息,若是程序運行過程中的print()信息打印不出來,能夠加上-s可選參數,它是-- capture=no的縮寫。function

skip跳過標記

​ 在維護測試用例的過程當中,可能在一個階段某些用例已經不須要了,或者在指定條件下是不須要運行的,那麼咱們就能夠經過mark.skip跳過這些函數或者類,兩種跳過方式:

  • 🍑直接跳過: @pytest.mark.skip(reason = 「緣由」) ,這裏緣由是可選參數
  • 🍑條件跳過,即知足某個條件才跳過:@pytest.mark.skipif(a == 1, reason = 「緣由」)
db_host = 'localhost'

@pytest.mark.skip("和如今的需求不符合")	# 不知足當下了,或別人編寫的暫時不能刪的
def test_yuz(self):
    pass

@pytest.mark.skipif(db_host == 'localhost', reason='只測試線上環境,不測試本地環境')
def test_develop_env(self):
    pass
相關文章
相關標籤/搜索