3.pytest 初始化和清除

Maple發表於2020-12-26

對自動化測試框架來說,setupteardown至關重要。

模組級別

模組級別的初始化、清除分別在整個模組的測試用例執行前後執行,並且 只會執行1次

建立test_03.py,定義 setup_moduleteardown_module 全域性函式

# filename:test_03.py
def setup_module():
print('\n====初始化模組====')

def teardown_module():
print('\n====清除模組====')


class TestDemo01():
def test_101(self):
print("\n測試用例test_101執行")
assert 1==1

def test_102(self):
print("\n測試用例test_102執行")
assert 1==1

def test_103(self):
print("\n測試用例test_103執行")
assert 1==1

執行命令 pytest test_03.py ,執行結果如下

============================= test session starts =============================
....
test_03.py
====初始化模組====

測試用例test_101執行
.
測試用例test_102執行
.
測試用例test_103執行
.
====清除模組====

============================== 6 passed in 0.06s ==============================

類級別

類級別的初始化、清除 分別在整個類的測試用例 執行前後執行,並且 只會執行1次

修改test_03.py檔案,定義 setup_classteardown_class類方法

....
class TestDemo01():
def setup_class(self):
print('\n====初始化類====')

def teardown_module(self):
print('\n====清除類====')

def test_101(self):
print("\n測試用例test_101執行")
assert 1 == 1

def test_102(self):
print("\n測試用例test_102執行")
assert 1 == 1

def test_103(self):
print("\n測試用例test_103執行")
assert 1 == 1

執行命令 pytest test_03.py ,執行結果如下

============================= test session starts =============================
....
test_03.py
====初始化模組====

====初始化類====

測試用例test_101執行
.
測試用例test_102執行
.
測試用例test_103執行
.
====清除類====

====清除模組====

============================== 6 passed in 0.06s ==============================

方法級別

方法級別 的初始化、清除 分別 在類的每個測試方法執行前後執行,並且 每個用例分別執行1次

修改test_03.py檔案,定義 setup_method和 teardown_method 類方法

....
class TestDemo01():
def setup_class(self):
print('\n====初始化類====')

def teardown_class(self):
print('\n====清除類====')

def setup_method(self):
print('\n====初始化方法====')

def teardown_method(self):
print('\n====清除方法====')

def test_101(self):
print("\n測試用例test_101執行")
assert 1 == 1

def test_102(self):
print("\n測試用例test_102執行")
assert 1 == 1

def test_103(self):
print("\n測試用例test_103執行")
assert 1 == 1

執行命令 pytest test_03.py ,執行結果如下

============================= test session starts =============================
....
test_03.py
====初始化模組====

====初始化類====

====初始化方法====

測試用例test_101執行
.
====清除方法====

====初始化方法====

測試用例test_102執行
.
====清除方法====

====初始化方法====

測試用例test_103執行
.
====清除方法====

====清除類====

====清除模組====

============================== 6 passed in 0.07s ==============================

目錄級別

目標級別的 初始化清除,就是針對整個目錄執行的初始化、清除。

在需要初始化的目錄下面建立 一個名為 conf.py 的檔案,裡面內容如下所示

import pytest 

@pytest.fixture(scope='package',autouse=True)
def st_emptyEnv():
print('\n#### 初始化-目錄')
yield

print('\n#### 清除-目錄')

執行命令 pytest test_03.py ,執行結果如下

============================= test session starts =============================
....
#### 初始化-目錄

====初始化模組====

====初始化類====

====初始化方法====

測試用例test_101執行
.
====清除方法====

====初始化方法====

測試用例test_102執行
.
====清除方法====

====初始化方法====

測試用例test_103執行
.
====清除方法====

====清除類====

====清除模組====

#### 清除-目錄

============================== 6 passed in 0.02s ==============================

但是我發現了pytest一個重要的bug: 清除操作並不一定會在該目錄最後一個測試用例執行完進行呼叫。

所以在這個問題解決前,推薦大家先不要使用這種 目錄級別 的初始化清除。

相關文章