pytest那些強大的標記功能

何為冒煙測試,在某些場景下,可能需要先跑一些特定的測試用例來驗證系統的穩定性,一般就把這些用例成為冒煙用例。比如開發同學提測的時候,測試會提供一些核心業務的測試用例保證交付的功能是可用的,核心流程可以跑通,以此提高提測質量。還有就是一般在系統上線後,也需要一些用例在線上環境跑一下,驗證新上線的功能不會引起系統錯誤,保證上線質量,提早暴露缺陷,維持系統穩定。

如果我們要針對這些單獨寫一些用例去跑,無疑是會增加測試的工作量,但是這些用例又必不可少,最好的方式是從測試人員已有的測試用例裡挑一些用例出來,通過特定的命令去運行,這樣既能減少工作量又能達到要求。

剛好pytest強大的標記功能可以完全滿足我們的需求。

pytest的標記功能

pytest提供了豐富的標記功能,允許使用marker對測試函數做標記,一個測試函數可以有多個標記,一個標記也可以作用於多個測試 函數。

pytest內置的標記都有那些?

  • skip 標記不希望運行的case,直接跳過
  • skipif 給不希望運行的case添加判斷條件
pytest那些強大的標記功能

pytest那些強大的標記功能

運行時可以指定-rs參數顯示跳過的理由

  • xfail 標記預期會失敗的case
<code>@pytest.mark.xfail()def test_unique_id_is_a_duck():    uid = tasks.unique_id()    assert uid == 'a duck'  # 這個斷言會失敗/<code>

pytest通過自定義標記實現冒煙測試

pytest那些強大的標記功能

圖中是我自定義的兩個標記smoke和get,然後在命令運行測試,通過-m marker指定

pytest那些強大的標記功能

<code> pytest -v -m 'smoke' test_api_exceptions.py /<code>

在test_api_exceptions.py文件中是存在三個測試函數的,通過指定標記運行,是隻運行了兩個表smoke標記的測試函數。如果這裡指定 get標記,就只會運行一個。

截圖中有幾個警告提示我們,將自定義的標記註冊一下,註冊的方式是在測試文件根目錄下新建一個pytest.ini文件,在這個文件裡進行配置

<code>[pytest]markers =    smoke: 用於冒煙測試    get/<code>

冒號後面用於對標記的描述,是可選的。在運行的時候需要指定這個文件

<code>pytest -v -m 'smoke' test_api_exceptions.py -c pytest.ini/<code>

這樣運行後就沒有警告了。

-m後面也可以使用表達式,可以在標記之間使用and、or、not關鍵字

<code> pytest -v -m 'smoke and get' test_api_exceptions.py /<code>

意思是會運行被這兩個標記同時標記的case

<code> pytest -v -m 'smoke and not get' test_api_exceptions.py /<code>

意思是隻運行被smoke標記,但沒有get標記的case

pytest那些強大的標記功能


分享到:


相關文章: