2024年12月9日 星期一

Pytest - Fixtures (Part 4: Request)


Pytest提供一種內建fixture函式 - request,允許我們存取有關測試函式及環境的資訊,進一步實現測試環境的動態設定。透過request,我們能獲取以下資訊:
  • 呼叫測試函式的名稱:利用 request.function.__name__ 獲取執行的測試函式名稱。
  • 呼叫測試模組的名稱:利用 request.module.__name__ 獲取執行的測試模組名稱。
  • Fixture的作用域:透過 request.scope 獲知fixture的作用域,e.g. function, module, session。

範例

@pytest.fixture()  
def setup04(request): #使用request來獲取測試函式的資訊
    mon = getattr(request.module, "months") #從當前測試模組 (request.module)中動態取得名為"months"的屬性
    print("\n in Fixture setup04")
    print("\n Fixture Scope:" + str(request.scope)) #輸出fixture的作用域
    print("\n Calling function:" + str(request.function.__name__)) #輸出呼叫此fixture的測試函式名稱
    print("\n Calling module:" + str(request.module.__name__)) #輸出當前測試模組的名稱
    mon.append("April")
    yield mon #將處理後的`mon`(即修改過的`months`列表) 返回給測試函式
*getattr(object, name):Python的內建函式,用來動態取得物件中指定名稱的屬性
#測試函式
months = ["Jan", "Feb", "Mar" ]

def test_checkrequest(setup04):
    assert "April" in setup04
    assert len(setup04) == 4

沒有留言:

張貼留言