gpt4 book ai didi

python-3.x - 从 conftest.py 中的 cmdline 选项生成的列表的 Pytest 参数化测试

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

I am trying to parametrize a test which is being generated from the cmdline options in conftest.py.

#!/usr/bin/env python

import pytest
import test



def pytest_addoption(parser):
parser.addoption("--low", action="store", type=int, help="low")
parser.addoption("--high", action="store",type=int, help="high")


@pytest.fixture(scope="session", autouse=True)
def user(request):
return request.config.getoption("low")


@pytest.fixture(scope="session", autouse=True)
def rang(request):
return request.config.getoption("high")




#test_file.py

def data(low, high):
return list(range(low, high))

@pytest.mark.parametrize("num", data(10, 20))
def test(num):
assert num < 1000

我想运行类似“pytest --low=10 --high=100 test_file.py”的命令。对于 x 和 y 之间的值范围,代码可以与 @pytest.mark.parametrize("num", data(x, y)) 一起正常工作。除了低和高之外,我不想在参数化中提供任何值。如果我编写类似 @pytest.mark.parametrize("num", data(low, high)) 的代码,它会抛出错误。有什么办法可以让这个参数化工作?我知道当我们在方法之外生成列表时代码可以工作。但我想编写一个生成列表的方法并在参数化中使用该列表。

有什么方法可以在 test_file.py 中的任何位置访问这些低和高 cmdline 选项?

最佳答案

您可以使用 pytest_generate_tests 参数化测试钩。使用钩子(Hook),您将可以访问命令行参数。

# conftest.py
def pytest_addoption(parser):
parser.addoption("--low", action="store", type=int, help="low")
parser.addoption("--high", action="store",type=int, help="high")


def pytest_generate_tests(metafunc):
if 'num' in metafunc.fixturenames:
lo = metafunc.config.getoption('low')
hi = metafunc.config.getoption('high')
metafunc.parametrize('num', range(lo, hi))


# test_file.py

def test_spam(num):
assert num

另一种可能性是通过 pytest.config 访问 args,但请注意,这是一个即将被删除的已弃用功能:

import pytest


def data():
lo = pytest.config.getoption('low')
hi = pytest.config.getoption('high')
return list(range(lo, hi))


@pytest.mark.parametrize('num', data())
def test_spam(num):
assert num

关于python-3.x - 从 conftest.py 中的 cmdline 选项生成的列表的 Pytest 参数化测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54602959/

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