pytest - 参数化测试时如何通过夹具
问题描述
我正在尝试参数化我的测试。在返回列表的设置方法中,我调用了一个夹具(app_config)。
现在,我想调用设置,以便列表可以用作测试中的参数值。
我遇到的问题是在参数化装饰器中调用 setup 时我无法传递 app_config 固定装置。
def setup(app_config):
member = app_config.membership
output = app_config.plan_data
ls = list(zip(member, output))
return ls
@pytest.mark.parametrize('member, output', setup(app_config))
def test_concentric(app_config, member, output):
....
....
是否有一种优雅的方法可以在参数化装饰器中传递设置方法或任何其他方法来解决这个问题?
解决方案
不幸的是,从 pytest 版本 4 开始,像常规函数一样调用固定装置变得不可能了。
- https://docs.pytest.org/en/latest/deprecations.html#calling-fixtures-directly
- https://github.com/pytest-dev/pytest/issues/3950
在您的情况下,我建议您不要使用固定装置并切换到正常功能。例如,它可能看起来像这样:
import pytest
def app_config():
membership = ['a', 'b', 'c']
plan_data = [1, 2, 3]
return {'membership': membership,
'plan_data': plan_data}
def setup_func(config_func):
data = config_func()
member = data['membership']
output = data['plan_data']
ls = list(zip(member, output))
return ls
@pytest.mark.parametrize('member, output', setup_func(app_config))
def test_concentric(member, output):
print(member, output)
....
注意!避免使用setup()函数/夹具名称,因为它会与 pytest.runner 的内部冲突。
推荐阅读
- python-3.x - 抓取数据并存储到字典
- python - 使用无限循环不断轮询 SQS 队列
- python - 找到输入字符串中重复出现的搜索字符串之间的最小单词数(距离)
- python - 按 ID 计算每个代码的份额
- r - 有没有办法将 1.00M 转换为 1,000,000?
- pyaudio - 此平台不支持 PyAudio 错误
- java - 两个具有“有”关系的 Java 实体可以使用同一个表吗
- python - 使用布尔列表沿给定维度进行 numpy 索引
- kubernetes - Kubernetes 上的 Apache Ignite 未加入集群
- autocomplete - 自动完成组件可以有不同的值和选项类型吗?