如何强制Pytest执行参数化中的唯一功能?
How to force Pytest to execute the only function in parametrize?
我有 2 个测试。我要运行唯一一个:
pipenv run pytest -s tmp_test.py::test_my_var
但是pytest在@pytest.mark.parametrize中执行了两个函数(在两个测试中)
如果我 运行 唯一的 test_my_var,我如何强制 Pytest 执行唯一的 get_my_var() 函数?
如果我 运行 整个文件:
pipenv run pytest -s tmp_test.py
我希望 Pytest 按以下方式执行代码:
get_my_var()
test_my_var()
get_my_var_1()
test_my_var_1()
实际上,我在@pytest.mark.parametrize 中的函数进行了一些数据准备,并且两个测试都使用相同的实体。所以@pytest.mark.parametrize中的每个函数都会改变同一个测试数据的状态。
这就是为什么我强烈需要 运行ning 参数化函数在相应测试之前的顺序。
def get_my_var():
with open('my var', 'w') as f:
f.write('my var')
return 'my var'
def get_my_var_1():
with open('my var_1', 'w') as f:
f.write('my var_1')
return 'my var_1'
@pytest.mark.parametrize('my_var', get_my_var())
def test_my_var(my_var):
pass
@pytest.mark.parametrize('my_var_1', get_my_var_1())
def test_my_var_1(my_var_1):
pass
或者我怎样才能通过任何其他选项实现相同的目标?
例如,固定装置。我可以使用夹具进行数据准备,但我需要在不同的测试中使用相同的夹具,因为准备工作是相同的。所以我不能使用 scope='session'.
同时 scope='function' 为参数化测试的每个实例生成 fixture 运行s。
有没有办法 运行 在所有参数化实例的 运行 秒之前固定(或任何其他函数)唯一一次参数化测试?
看来只有这样才能解决问题。
import pytest
current_test = None
@pytest.fixture()
def one_time_per_test_init(request):
test_name = request.node.originalname
global current_test
if current_test != test_name:
current_test = test_name
init, kwargs = request.param
init(**kwargs)
我有 2 个测试。我要运行唯一一个:
pipenv run pytest -s tmp_test.py::test_my_var
但是pytest在@pytest.mark.parametrize中执行了两个函数(在两个测试中)
如果我 运行 唯一的 test_my_var,我如何强制 Pytest 执行唯一的 get_my_var() 函数?
如果我 运行 整个文件:
pipenv run pytest -s tmp_test.py
我希望 Pytest 按以下方式执行代码:
get_my_var()
test_my_var()
get_my_var_1()
test_my_var_1()
实际上,我在@pytest.mark.parametrize 中的函数进行了一些数据准备,并且两个测试都使用相同的实体。所以@pytest.mark.parametrize中的每个函数都会改变同一个测试数据的状态。
这就是为什么我强烈需要 运行ning 参数化函数在相应测试之前的顺序。
def get_my_var():
with open('my var', 'w') as f:
f.write('my var')
return 'my var'
def get_my_var_1():
with open('my var_1', 'w') as f:
f.write('my var_1')
return 'my var_1'
@pytest.mark.parametrize('my_var', get_my_var())
def test_my_var(my_var):
pass
@pytest.mark.parametrize('my_var_1', get_my_var_1())
def test_my_var_1(my_var_1):
pass
或者我怎样才能通过任何其他选项实现相同的目标?
例如,固定装置。我可以使用夹具进行数据准备,但我需要在不同的测试中使用相同的夹具,因为准备工作是相同的。所以我不能使用 scope='session'.
同时 scope='function' 为参数化测试的每个实例生成 fixture 运行s。
有没有办法 运行 在所有参数化实例的 运行 秒之前固定(或任何其他函数)唯一一次参数化测试?
看来只有这样才能解决问题。
import pytest
current_test = None
@pytest.fixture()
def one_time_per_test_init(request):
test_name = request.node.originalname
global current_test
if current_test != test_name:
current_test = test_name
init, kwargs = request.param
init(**kwargs)