加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 如何参数化测试,从参数化夹具中获取参数?

发布时间:2020-12-16 22:50:02 所属栏目:Python 来源:网络整理
导读:我提前道歉重复1000次单词参数.我的用例如下. 我正在使用pytest来测试解析器,该解析器从在线商店中解析产品页面中的字段. 我已经参数化了一个夹具,因此每个夹具都会导入一个产品的数据.根据数据,我的意思是HTML源代码和带有预期值的字段列表.在线下我有一个

我提前道歉重复1000次单词参数.我的用例如下.

我正在使用pytest来测试解析器,该解析器从在线商店中解析产品页面中的字段.

我已经参数化了一个夹具,因此每个夹具都会导入一个产品的数据.根据数据,我的意思是HTML源代码和带有预期值的字段列表.在线下我有一个参数化测试,它接受一个元组列表(字段,期望值),以便每个字段都有自己的测试.

基本上,“裸骨”问题会像这样:

from pytest import fixture,mark

products = [
    {
    'text': 'bla bla','fields': [('bla',0),('foo',-1)]
    },{
    'text': 'foo bar',-1),('bar',4)]
    }
]

@fixture(params=products)
def product(request):
    return request.param


@mark.parametrize('field_key,field_value',product['fields'])
def test_parser(product,field_key,field_value):
    assert product['text'].find(field_key) == field_value

在@ mark.parametrize装饰器的上下文中,产品不会被解释为fixture,因此pytest返回:

TypeError: 'function' object has no attribute '__getitem__'

pytest正在进行大量的内省魔术,我无法找到解决方案.我看了this question,但这不是我想要的.有没有办法实现这个目标?谢谢.

最佳答案
我认为你不需要固定装置来实现你的目标.

根据您的示例数据,这是一种可能的方式:

from pytest import mark


products = [
    {
        'text': 'bla bla',{
        'text': 'foo bar',4)]
    }
]

possible_params = []
for product in products:  # Iterate over the products to build all desired invocations
    for field_key,field_value in product['fields']:
        possible_params.append((product['text'],field_value))

@mark.parametrize('text,possible_params)
def test_parser(text,field_value):
    assert text.find(field_key) == field_value

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读