目錄
1、setUp()和tearDown()函式介紹
之前學過Unittest
測試框架,知道前置setup()
函式和後置teardown()
函式非常好用,在每次用例開始前和結束後都去執行一次。
當然還有更高階一點的setupClass()
函式和teardownClass()
函式,需配合classmethod
裝飾器一起使用,在做Selenium自動化的時候,它的效率尤為突出,可以只啟動一次瀏覽器執行多個用例。
2、setUp()和tearDown()函式作用
setup()
函式主要是進行測試前的初始化工作,比如:在介面測試前面做一些前置的引數賦值,資料庫操作等等。teardown()
函式是測試後的清除工作,比如:引數還原或銷燬,資料庫的還原恢復等。
總結:setup()
函式表示測試類中每個測試方法執行前都需要執行的操作,teardown()
函式表示每個測試方法執行後都需要執行的操作。
3、setUp()和tearDown()函式說明
Pytest框架也有前置setup()
函式和後置teardown()
函式,並且還不止四個。
Pytest框架setUp()
函式和tearDown()
函式主要分為:模組級,類級,方法級,函式級。
說明每個級別的含義:
模組級:指的是一個
.py
檔案。類級:一個
.py
檔案中可以寫多個類。(一般情況下只寫一個類)方法級:類中定義的方法叫方法。
函式級:類外定義的方法叫函式。
Pytest框架提供的setUp()
函式和tearDown()
函式如下:
1)模組級與函式級,不定義在測試類中。
- 模組級:
setup_module()/teardown_module()
:開始於模組始末,全域性的。 - 函式級:
setup_function()/teardown_function()
:只對函式用例生效(不在類中)。
2)類級與方法級,定義在類中。
- 類級:
setup_class()/teardown_class()
:只在類中前後執行一次(在類中)。 - 方法級:
setup_method()/teardown_method()
:開始於方法始末(在類中)。 - 自由的:
setup()/teardown()
:直接使用感覺和方法級前後置函式一樣。
4、示例
(1)方法級
"""
setup_method()和 teardown_method()函式
需要定義在測試類中,定義在類外不起作用。
setup_method()定義場景,如:開啟瀏覽器,載入網頁等
teardown_method()場景,如:關閉瀏覽器等
"""
import pytest
# 測試類
class Test_setUp_tearDown:
# 方法級,前置函式
def setup_method(self):
print("setup_method(self):在每個測試方法之前執行")
# 方法級,後置函式
def teardown_method(self):
print("teardown_method(self):在每個測試方法之後執行\n")
# 測試用例a
def test_a(self):
print("test_a方法")
assert True
# 測試用例b
def test_b(self):
print("test_b方法")
assert True
if __name__ == '__main__':
pytest.main()
"""
執行結果:
setup_method(self):在每個測試方法之前執行
test_a方法
teardown_method(self):在每個測試方法之後執行
PASSEDsetup_method(self):在每個測試方法之前執行
test_b方法
teardown_method(self):在每個測試方法之後執行
"""
(2)類級
"""
setup_class()和 teardown_class()函式
需要定義在測試類中,定義在類外不起作用。
setup_class()定義場景,比如:建立日誌物件,建立資料庫的連線,建立介面的請求物件等。
teardown_class()定義場景,比如:銷燬日誌物件,銷燬資料庫的連線,銷燬介面的請求物件。
"""
import pytest
class Test_setUp_tearDown:
# 方法級,前置函式
def setup_method(self):
print("setup_method(self):在每個測試方法之前執行")
# 方法級,後置函式
def teardown_method(self):
print("teardown_method(self):在每個測試方法之後執行\n")
# 類級,前置函式
def setup_class(self):
print("setup_class(self):每個測試類之前執行一次\n")
# 類級,後置函式
def teardown_class(self):
print("teardown_class(self):每個測試類之後執行一次")
# 測試用例a
def test_a(self):
print("test_a方法")
assert True
# 測試用例b
def test_b(self):
print("test_b方法")
assert True
if __name__ == '__main__':
pytest.main()
"""
執行結果:
setup_class(self):每個測試類之前執行一次
setup_method(self):在每個測試方法之前執行
test_a方法
teardown_method(self):在每個測試方法之後執行
PASSEDsetup_method(self):在每個測試方法之前執行
test_b方法
teardown_method(self):在每個測試方法之後執行
teardown_class(self):每個測試類之後執行一次
"""
(3)函式級
"""
setup_function()和 teardown_function()函式
需要定義在測試類外面,只負責函式的前後置。
對類中定義的方法,不起作用。
"""
import pytest
# 函式級,前置函式
def setup_function():
print("setup_function: 每個函式開始前都會執行")
# 函式級,後置函式
def teardown_function():
print("teardown_function: 每個函式結束都會執行\n")
# 測試用例a
def test_a():
print("test_a函式")
assert True
# 測試用例b
def test_b():
print("test_b函式")
assert True
# 測試類
class Test_setUp_tearDown:
# 測試用例a
def test_c(self):
print("test_c方法")
assert True
# 測試用例b
def test_d(self):
print("test_d方法")
assert True
if __name__ == '__main__':
pytest.main()
"""
執行結果:
setup_function: 每個函式開始前都會執行
test_a函式
teardown_function: 每個函式結束都會執行
PASSEDsetup_function: 每個函式開始前都會執行
test_b函式
teardown_function: 每個函式結束都會執行
PASSEDtest_c方法
PASSEDtest_d方法
PASSED
"""
(4)模組級
"""
setup_module()和 teardown_module()函式
需要定義在測試類外面,
對函式和類中定義的方法,都不起作用。
"""
import pytest
# 模組級,前置函式
def setup_module():
print("setup_module():在模組最之前執行\n")
# 模組級,後置函式
def teardown_module():
print("teardown_module:在模組之後執行")
# 函式級,前置函式
def setup_function():
print("setup_function: 每個函式開始前都會執行")
# 函式級,後置函式
def teardown_function():
print("teardown_function: 每個函式結束都會執行\n")
# 測試用例a
def test_a():
print("test_a函式")
assert True
# 測試用例b
def test_b():
print("test_b函式")
assert True
# 測試類
class Test_setUp_tearDown:
# 測試用例a
def test_c(self):
print("test_c方法")
assert True
# 測試用例b
def test_d(self):
print("test_d方法")
assert True
if __name__ == '__main__':
pytest.main()
"""
setup_module():在模組最之前執行
setup_function: 每個函式開始前都會執行
test_a函式
teardown_function: 每個函式結束都會執行
PASSEDsetup_function: 每個函式開始前都會執行
test_b函式
teardown_function: 每個函式結束都會執行
PASSEDtest_c方法
PASSEDtest_d方法
teardown_module:在模組之後執行
PASSED
"""
參考:https://blog.csdn.net/weixin_42550871/article/details/109107673