@ pytest.fixture()デコレータを使用して、pytestフレームワークの下でテストケースの環境初期化およびクリーンアップ操作を実装します。
(1)フィクスチャのデフォルトは機能レベル、使用可能なレベル:機能、クラス、モジュール、セッション
(2)複数の初期化およびクリア関数を記述できます。テスト関数を使用する必要があり、対応する関数名のみを渡す必要があります。
import pytest
# 默认函数级别
@pytest.fixture()
def start_func1(request):
# 初始化代码
print("------------初始化操作--------------")
def fin():
# 清除代码
print("--------------环境清除操作------------")
request.addfinalizer(fin)
1.機能レベル:
(1)初期化およびクリーンアップ操作は、テスト関数が渡されている限り、実行されます。
(2)初期化操作はテストケース実行前に実行され、クリア操作はテストケース実行後に実行されます。
import pytest
@pytest.fixture()
def start_func1(request):
# 初始化代码
print("------------初始化操作--------------")
def fin():
# 清除代码
print("--------------环境清除操作------------")
request.addfinalizer(fin)
def test_01():
print("-----test01-----")
def test_02(start_func1):
print("-----test02-----")
def test_03(start_func1):
print("-----test03-----")
if __name__ == '__main__':
pytest.main(["func-fixture.py", "-s"])
演算結果:
2.クラスレベル:
(1)scope = "class"
(2)同じテストクラス内:同じ初期化およびクリア機能は1回だけ実行され、このクラスのすべてのテストケースが実行された後にクリア操作が実行されます。
import pytest
"""
@pytest.fixture(scope="class")
1.class级别
2.初始化方法是写在类外面的
3.可以作用于多个类,多个方法
4.一个方法可以传入多个初始化函数
5.跟函数级别的区别是:函数传入就会执行,类内只会执行一次
"""
@pytest.fixture(scope="class")
def start_func1(request):
print("----初始化操作1------")
def fin():
print("-----环境清除操作1------")
request.addfinalizer(fin)
@pytest.fixture(scope="class")
def start_func2(request):
print("----初始化操作2------")
def fin():
print("-----环境清除操作2------")
request.addfinalizer(fin)
class TestClass1:
def test_01(self, start_func1):
print("-----test01----")
def test_02(self):
print("-----test02-----")
class TestClass2:
def test_03(self, start_func1, start_func2):
print("-----test03----")
def test_04(self, start_func1):
print("-----test04-----")
if __name__ == '__main__':
pytest.main(["class-fixture.py", "-s"])
演算結果:
3.モジュールレベル:
(1)score = "module"
(2)モジュール内に初期化関数を呼び出す必要のあるテスト関数とテストクラスがある場合、デコレータレベルをモジュールに合わせて調整する必要があります
(3)初期化操作は、パラメータが最初に渡されたときに1回だけ実行され、クリア操作は、すべてのテストケースが実行された後に1回実行されます。
import pytest
"""
@pytest.fixture(scope="module")
1.module级别
2.初始化方法是写在类外面的
3.初始化方法可作用在测试函数和测试类上
4.只会执行一次
"""
@pytest.fixture(scope="module")
def start_func1(request):
print("----初始化操作1----")
def fin():
print("------环境清除操作-------")
request.addfinalizer(fin)
class TestClass1:
def test_01(self):
print("-----test01----")
def test_02(self, start_func1):
print("-----test02-----")
def test_func(start_func1):
print("----我是一个函数--------")
if __name__ == '__main__':
pytest.main(["module-fixture.py", "-s"])
演算結果:
4.セッションレベル(パッケージレベル):
(1)パッケージパッケージを作成する必要があります
(2)パッケージパッケージの下にファイルを作成します:conftest(ファイル名は変更できません)、その中に環境の初期化と操作を書き込みます
import pytest
@pytest.fixture(scope="session", autouse=True)
def start_func1(request):
print("-----初始化操作------1")
def fin():
print("---------测试完成的环境清除操作--------------")
request.addfinalizer(fin)
(3)初期化操作は、パッケージ内のテストモジュールの実行前に1回だけ実行されます。
(4)クリア操作は、パッケージ内のテストモジュールの実行が完了した後に実行され、1回だけ実行されます。
(5)autouse = True、パッケージ内のモジュールは手動でパラメーターを渡す必要はありません