python-pytest學習(十五)-fixture詳解


一、前言

  fixture是pytest的核心功能,也是亮點功能,熟練掌握fixture的使用方法,pytest用起來才會得心應手!

二、fixture簡介

  fixture的目的是提供一個固定基線,在該基線上測試可以可靠地和重復地執行。fixture提供了區別於傳統單元測試(setup/teardown)有顯著改進:

(1)有獨立的命名,並通過聲明它們從測試函數、模塊、類或整個項目中的使用來激活;

(2)按模塊化的方式實現,每個fixture都可以相互調用;

(3)fixture的范圍從簡單的單元擴展到復雜的功能測試,允許根據配置和組件選項對fixture和測試用例進行參數化,或者跨函數function,類class,模塊module或整個測試會話session范圍。

三、fixture作為參數傳入

  定義fixture跟定義普通函數差不多,唯一區別就是在函數上加個裝飾器@pytest.fixture(),fixture命名不要用test_開頭,跟用例區分開。用例才是test_開頭的命名。

  fixture是可以有返回值的,如果沒return默認返回None。用例調用fixture的返回值,直接就是吧fixture的函數名稱當成變量名稱,如下案例

import pytest

@pytest.fixture()
def user():
    print("獲取用戶名")
    a = "admin"
    return a

def test_1(user):
    assert user == "admin"

if __name__ == "__main__":
    pytest.main(["-s","test_fixture1.py"])

運行結果:

 

 四、error和failed區別

測試結果一般有三種:passed、failed、error。(skip的用例除外)

如果在test_用例里面斷言失敗,那就是failed

import pytest

@pytest.fixture()
def user():
    print("獲取用戶名")
    a = "admin"
    return a

def test_1(user):
    assert user == "admin111"

if __name__=="__main__":
    pytest.main(["-s","test_fixture2.py"])

 

如果在fixture里面斷言失敗了,那就是error

import pytest

@pytest.fixture()
def user():
    print("獲取用戶名")
    a = "admin"
    assert a == "admin123"
    return a

def test_1(user):
    assert user=="admin"

if __name__=="__main__":
    pytest.main(["-s","test_fixture3.py"])

 

參考文章:https://www.jianshu.com/p/8b21deb27262

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM