1、前言 在自動化測試過程中經常需要進行初始化和後期處理等工作,如電商加購物車測試需要先登錄,測試完畢需要關閉瀏覽器等。Pytest提供了5種類型的setup和teardown的方法,具體如下: 模塊級別:setup_module,teardown_module 函數級別:setup_functio ...
目錄
1、前言
在自動化測試過程中經常需要進行初始化和後期處理等工作,如電商加購物車測試需要先登錄,測試完畢需要關閉瀏覽器等。Pytest提供了5種類型的setup
和teardown
的方法,具體如下:
- 模塊級別:
setup_module
,teardown_module
- 函數級別:
setup_function
,teardown_function
- 類級別:
setup_class
,teardown_class
- 類方法級別:
setup_method
,teardown_method
- 函數或類方法級別(相容unittest):
setup
,teardown
2、各級別詳解
- 模塊級別:是全局的,在模塊運行前執行一次
setup_module()
方法,在模塊運行後執行一次teardown_module()
方法
def setup_module():
print("【初始化...】")
def teardown_module():
print("【後期處理】")
class Test_1:
def test_1_a(self):
print("這是類方法test_1_a")
def test_1_b(self):
print("這是類方法test_1_b")
class Test_2:
def test_2_a(self):
print("這是類方法test_2_a")
def test_2_b(self):
print("這是類方法test_2_b")
def test_3():
print("這是函數test_3")
"""
執行結果
setupAndteardown/test_module.py::Test_1::test_1_a 【初始化...】
這是類方法test_1_a
PASSED
setupAndteardown/test_module.py::Test_1::test_1_b 這是類方法test_1_b
PASSED
setupAndteardown/test_module.py::Test_2::test_2_a 這是類方法test_2_a
PASSED
setupAndteardown/test_module.py::Test_2::test_2_b 這是類方法test_2_b
PASSED
setupAndteardown/test_module.py::test_3 這是函數test_3
PASSED【後期處理】
"""
- 函數級別:只對函數用例生效,在每個函數用例前後執行,不包括類中方法
def setup_function():
print("【初始化...】")
def teardown_function():
print("【後續處理】")
class Test_1:
def test_1_a(self):
print("這是類方法test_1_a")
def test_1_b(self):
print("這是類方法test_1_b")
def test_2():
print("這是函數test_2")
def test_3():
print("這是函數test_3")
"""
執行結果
setupAndteardown/test_function.py::Test_1::test_1_a 這是類方法test_1_a
PASSED
setupAndteardown/test_function.py::Test_1::test_1_b 這是類方法test_1_b
PASSED
setupAndteardown/test_function.py::test_2 【初始化...】
這是函數test_2
PASSED【後續處理】
setupAndteardown/test_function.py::test_3 【初始化...】
這是函數test_3
PASSED【後續處理】
"""
- 類級別:只在類中運行。在類的全部方法前執行一次
setup_class()
,全部方法後執行一次teardown_class()
class Test_1:
def setup_class(self):
print("【初始化...】")
def teardown_class(self):
print("【後續處理】")
def test_1_a(self):
print("這是類中方法test_1_a")
def test_1_b(self):
print("這是類中方法test_1_b")
class Test_2:
def test_2_a(self):
print("這是類中方法test_2_a")
def test_2_b(self):
print("這是類中方法test_2_b")
def test_3():
print("這是函數test_3")
"""
執行結果
setupAndteardown/test_class.py::Test_1::test_1_a 【初始化...】
這是類中方法test_1_a
PASSED
setupAndteardown/test_class.py::Test_1::test_1_b 這是類中方法test_1_b
PASSED【後續處理】
setupAndteardown/test_class.py::Test_2::test_2_a 這是類中方法test_2_a
PASSED
setupAndteardown/test_class.py::Test_2::test_2_b 這是類中方法test_2_b
PASSED
setupAndteardown/test_class.py::test_3 這是函數test_3
PASSED
"""
- 類方法級別:只在類中運行。類中每個方法級別的測試用例之前先執行一次
setup_method()
,執行後再執行一次teardown_method ()
class Test_1:
def setup_method(self):
print("【初始化...】")
def teardown_method(self):
print("【後續處理】")
def test_1_a(self):
print("這是類方法test_1_a")
def test_1_b(self):
print("這是類方法test_1_b")
def test_1_c(self):
print("這是類方法test_1_c")
def test_1_d(self):
print("這是類方法test_1_d")
"""
執行結果
setupAndteardown/test_method.py::Test_1::test_1_a 【初始化...】
這是類方法test_1_a
PASSED【後續處理】
setupAndteardown/test_method.py::Test_1::test_1_b 【初始化...】
這是類方法test_1_b
PASSED【後續處理】
setupAndteardown/test_method.py::Test_1::test_1_c 【初始化...】
這是類方法test_1_c
PASSED【後續處理】
setupAndteardown/test_method.py::Test_1::test_1_d 【初始化...】
這是類方法test_1_d
PASSED【後續處理】
"""
- 函數或類方法級別:
setup()
和teardown()
放類裡面就會對類方法前後置,放在類外面就會對函數前後置,同unittest中效果。
# 類外前後置
def setup():
print("【函數初始化...】")
def teardown():
print("【函數後期處理】")
class Test_1:
# 類中前後置
def setup(self):
print("【類方法初始化...】")
def teardown(self):
print("【類方法後期處理】")
def test_1_a(self):
print("這是類方法test_1_a")
def test_1_b(self):
print("這是類方法test_1_b")
def test_2():
print("這是函數test_2")
def test_3():
print("這是函數test_3")
"""
執行結果
setupAndteardown/test_setup.py::Test_1::test_1_a 【類方法初始化...】
這是類方法test_1_a
PASSED【類方法後期處理】
setupAndteardown/test_setup.py::Test_1::test_1_b 【類方法初始化...】
這是類方法test_1_b
PASSED【類方法後期處理】
setupAndteardown/test_setup.py::test_2 【函數初始化...】
這是函數test_2
PASSED【函數後期處理】
setupAndteardown/test_setup.py::test_3 【函數初始化...】
這是函數test_3
PASSED【函數後期處理】
"""
3、總結
從各級別詳解中的模塊級別例子中可以看到,優先順序最高的是模塊級別,從其他例子中可以看到類級別,類方法級別和函數級別互不影響。類級別是在類中所有方法前後置,類方法級別是類中所有測試方法前後置,函數級別是所有測試函數前後置。setup和teardown在類中等同於setup_method
和teardown_method
,在類外等同於setup_function
和teardown_function
,與unittest中的setup
和teardown
作用及用法均相同