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

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

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

@user1ize("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