gpt4 book ai didi

python - 从 args 动态设置 pytest fixture 的范围

转载 作者:行者123 更新时间:2023-12-04 16:45:52 25 4
gpt4 key购买 nike

一点背景:

  • 在 fixture 中,我正在配置浏览器并在拆卸部分将其关闭。
  • 由于与 Saucelabs 的集成, fixture 的范围可以是动态的。
  • 背后的原因是 SauceLabs 中配置的浏览器超时。
  • 这意味着如果我有太多测试用例,我必须提供 scope="function",否则 "class"会起作用。

我想动态配置fixture的作用域,如何实现?

是否可以配置像“--scope={scope}”这样的 pytest args 并将其提供给 fixture。?

伪代码片段:

@pytest.fixture(scope="function")
def test_helper(request):
# Configure browser

browser = # Saucelab browser
yield browser
browser.quit()

最佳答案

您可以为您的 fixture 创建一个选项来使用并告诉 pytest 使用 kwarg scope=callable 使其动态化

https://docs.pytest.org/en/6.2.x/fixture.html#dynamic-scope

def pytest_addoption(parser):
parser.addoption('--precious', default=None, help='cli to set scope of fixture "precious"')

def myscope(fixture_name, config):
scope = config.getoption(fixture_name) or 'function'
return scope

ring_count = Counter()

@fixture(scope=myscope)
def one_ring(request):
response = Object()
yield response
ring_count[id(response)] += 1
# do something here to assert about the id of precious
if request.config.option.precious:
assert len(ring_count) == 1

def test_lord(precious):
"""a test about dynamic scope."""

def test_owner(precious):
"""if --precious, then precious is the one ring that all tests get."""

关于python - 从 args 动态设置 pytest fixture 的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56592852/

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