2
我想運行一組測試函數,每次運行使用不同的燈具。通常,堆棧溢出,文檔和博客文章中提出的解決方案分爲兩類。其一是通過參數化夾具:由以產生多個測試呼叫metafunc.parametrizePytest:使用不同的輸入數據多次運行測試
@pytest.fixture(params=list_of_cases)
def some_case(request):
return request.param
另一種是:
def pytest_generate_tests(metafunc):
metafunc.parametrize('some_case', list_of_cases)
用這兩種方法的問題是在這情況下的運行順序。基本上它使用每個參數運行每個測試函數,而不是通過給定參數的所有測試函數,然後繼續下一個參數。這是一個問題,當我的一些設備是比較昂貴的數據庫調用。
爲了說明這一點,假定dataframe_x是屬於case_x的另一個燈具。 Pytest做到這一點
test_01(dataframe_1)
test_01(dataframe_2)
...
test_50(dataframe_1)
test_50(dataframe_2)
,而不是
test_01(dataframe_1)
...
test_50(dataframe_1)
test_01(dataframe_2)
...
test_50(dataframe_2)
的結果是,我會從DB 50倍,而不是隻取一次,每個數據集。由於我只能將燈具範圍定義爲'會話','模塊'或'功能',所以我無法弄清楚如何將我的測試分組到一起,以塊爲單位。
有沒有一種方法來組織我的測試,以便我可以順序運行每個數據集的所有測試函數?
爲什麼你想讓你的測試在塊中執行?您的測試是否需要按順序運行?如果是這樣,我認爲這並不理想,因爲每個測試應該能夠獨立運行。 – Cedric
它們是獨立的,但想象每個數據幀都非常大:我想加載一個,執行所有測試,將它扔掉,加載下一個,等等。這對我來說更直觀,而不是加載它幾次或者在整個測試過程中將所有數據保存在內存中。 – instant