gpt4 book ai didi

python - 如何通过测试正确设置和拆卸我的 pytest 类?

转载 作者:IT老高 更新时间:2023-10-28 21:45:22 24 4
gpt4 key购买 nike

我正在使用 selenium 进行端到端测试,但我不知道如何使用 setup_classteardown_class 方法。

我需要在 setup_class 方法中设置浏览器,然后执行一系列定义为类方法的测试,最后在 teardown_class 方法中退出浏览器。

但从逻辑上讲,这似乎是一个糟糕的解决方案,因为实际上我的测试不适用于类,而是对象。我在每个测试方法中传递 self 参数,所以我可以访问对象的变量:

class TestClass:

def setup_class(cls):
pass

def test_buttons(self, data):
# self.$attribute can be used, but not cls.$attribute?
pass

def test_buttons2(self, data):
# self.$attribute can be used, but not cls.$attribute?
pass

def teardown_class(cls):
pass

为类创建浏览器实例似乎也不正确。应该为每个对象分别创建它,对吗?

那么,我需要使用 __init____del__ 方法,而不是 setup_classteardown_class

最佳答案

根据Fixture finalization / executing teardown code ,当前设置和拆卸的最佳实践是使用 yield 而不是 return:

import pytest

@pytest.fixture()
def resource():
print("setup")
yield "resource"
print("teardown")

class TestResource:
def test_that_depends_on_resource(self, resource):
print("testing {}".format(resource))

运行结果

$ py.test --capture=no pytest_yield.py
=== test session starts ===
platform darwin -- Python 2.7.10, pytest-3.0.2, py-1.4.31, pluggy-0.3.1
collected 1 items

pytest_yield.py setup
testing resource
.teardown


=== 1 passed in 0.01 seconds ===

另一种编写拆解代码的方法是接受 request-context object进入您的 fixture 函数并使用执行一次或多次拆卸的函数调用其 request.addfinalizer 方法:

import pytest

@pytest.fixture()
def resource(request):
print("setup")

def teardown():
print("teardown")
request.addfinalizer(teardown)

return "resource"

class TestResource:
def test_that_depends_on_resource(self, resource):
print("testing {}".format(resource))

关于python - 如何通过测试正确设置和拆卸我的 pytest 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26405380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com