<< 返回目錄
1 pytest自動化測試 - 構造“預置條件”的幾種方式
1.1 使用夾具
構造預置條件
??在夾具章節中,我們介紹了夾具的作用,其中一項就是構造預置條件。@pytest.fixture
裝飾器中如果測試數據使用yield
返回,則yield
前的語句為預置條件語句。
import pytest@pytest.fixture
def setup_resource():# 準備資源resource = "This is a test resource"print("\n" + "="*65)print("BEGIN: 用例預置條件.")yield resource# 清理資源print("END: 用例后置條件.")def test_with_fixture(setup_resource):print("第一個用例開始".center(70))assert "test resource" in setup_resourceprint("第一個用例結束".center(70))def test_another_with_fixture(setup_resource):print("第二個用例開始".center(70))assert len(setup_resource) > 10print("第二個用例結束".center(70))
??夾具默認情況下是用例范圍生效,即夾具中的預置條件在每個用例都會執行。
1.2 在測試類中使用setup
方法構造預置條件
??類中的setup
函數用于構造預置條件,它在類的每個測試用例執行前都會執行一次。
import pytestclass TestExample:def setup_method(self):print("\n" + "=" * 65)print("預置條件")self.data = [4, 5, 6]def test_sum_in_class_001(self):print("第1個測試用例開始")assert sum(self.data) == 15print("第1個測試用例結束")def test_sum_in_class_002(self):print("第2個測試用例開始")assert 6 in self.dataprint("第2個測試用例結束")
輸出:
============================= test session starts =============================
platform win32 -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0
rootdir: D:\TYYSOFT\Study\Python\pytest
collected 2 itemstest_ft_setup_001.py
=================================================================
預置條件
第1個測試用例開始
第1個測試用例結束
.
=================================================================
預置條件
第2個測試用例開始
第2個測試用例結束
.============================== 2 passed in 0.02s ==============================
1.3 在模塊中使用setup
方法構造預置條件
??前一節介紹了如果在類中使用setup
方法構造預置條件,現在介紹模塊中的setup
方法,與類中的setup
方法不同的是模塊中的setup
函數名有講究,如下所示:
- 每個用例都執行的預置條件:函數名固定使用
def setup_function()
import pytestdata = [4, 5, 6]def setup_function():print("\n" + "=" * 65)print("預置條件")def test_sum_in_module_001():print("第1個測試用例開始")assert sum(data) == 15print("第1個測試用例結束")def test_sum_in_module_002():print("第2個測試用例開始")assert 6 in dataprint("第2個測試用例結束")
輸出:
============================= test session starts =============================
platform win32 -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0
rootdir: D:\TYYSOFT\Study\Python\pytest
collected 2 itemstest_ft_setup_002.py
=================================================================
預置條件
第1個測試用例開始
第1個測試用例結束
.
=================================================================
預置條件
第2個測試用例開始
第2個測試用例結束
.============================== 2 passed in 0.01s ==============================
??從報文可以看到,每個用例執行前都執行了預置條件。
- 模塊級的預置條件:即,本模塊中的第一個測試用例執行前執行一次,函數名固定使用``
import pytestdata = [4, 5, 6]def setup_module():print("\n" + "=" * 65)print("預置條件")def test_sum_in_module_001():print("第1個測試用例開始")assert sum(data) == 15print("第1個測試用例結束\n")def test_sum_in_module_002():print("第2個測試用例開始")assert 6 in dataprint("第2個測試用例結束")
輸出:
============================= test session starts =============================
platform win32 -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0
rootdir: D:\TYYSOFT\Study\Python\pytest
collected 2 itemstest_ft_setup_002.py
=================================================================
預置條件
第1個測試用例開始
第1個測試用例結束.第2個測試用例開始
第2個測試用例結束
.============================== 2 passed in 0.01s ==============================
??從報文中可以看到,預置條件只執行了一次,第2個用例執行時便沒有執行。
🕮忠告:??雖然pytest提供了函數范圍、類范圍、模塊范圍等的預置條件構造方法,但從作者多年的測試工作經驗來看,每個測試用例單獨構造預置條件和后置條件是一種更合理的安排方式!否則極易出現用例執行依賴,極大增加測試用例的排錯工作量!
作者聲明:本文用于記錄和分享作者的學習心得,可能有部分文字或示例來源自豆包AI,由于本人水平有限,難免存在表達錯誤,歡迎留言交流和指教!
Copyright ? 2022~2025 All rights reserved.
<< 返回目錄