Python [求助] 小弟我又来题问题啦。关于 pytest 的数据驱动,动态插入 xfail 的参数的问题

流浪的武士 · August 15, 2019 · Last by 流浪的武士 replied at August 16, 2019 · 333 hits

背景如下:
pytest有一个数据驱动的装饰器

@pytest.mark.parametrize("test_input,expected", [
("3+5", 8),
pytest.param("6*9", 42, marks=pytest.mark.xfail),
])
def test_eval(test_input, expected):
assert eval(test_input) == expected

上面代码中我想把这一段 pytest.param("6*9", 42, marks=pytest.mark.xfail),我想动态生成。
大概思路就是 用python 的 importlib包,反射导入相关模块,

import importlib

mark_pytest = importlib.import_module('_pytest.mark')
pytest = importlib.import_module('pytest')
param_pytest_xfail_list = []
param_list = [['a', 'b'], ['c', 'd']] # 这个是我想判断失败的参数,想分别替换下面的aaa,bbb
for item in param_list:
item
param_pytest_xfail_list.append(mark_pytest.param(aaa, bbb, marks=pytest.mark.xfail))
# 我怎么才能把参数aaa,bbb 替换成item,其中param方法的定义为
# def param(*value,**kw):
# return ParameterSet.param(*values, **kw)

这个问题,卡了大半天了。问下论坛的各位大佬。有这样玩过吗。
我也想过改源码,param方法改成能接受list形式的,但是一改就各种报错,
所以小弟我就来求助了~~~

共收到 2 条回复 时间 点赞

python版本为3.7.1 pytest版本为5.0.1

解决了。

import importlib

mark_pytest = importlib.import_module('_pytest.mark')
pytest = importlib.import_module('pytest')
param_pytest_xfail_list = []
param_list = [['a', 'b'], ['c', 'd']] # 这个是我想判断失败的参数,想分别替换下面的aaa,bbb
for item in param_list:
param_pytest_xfail_list.append(mark_pytest.param(*item, marks=pytest.mark.xfail))
# 我怎么才能把参数aaa,bbb 替换成item,其中param方法的定义为
# def param(*value,**kw):
# return ParameterSet.param(*values, **kw)

这里直接*item就完事。
还是基础不牢固问题,😂

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up