首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在pytest中使用关键字参数化

在pytest中使用关键字参数化
EN

Stack Overflow用户
提问于 2014-05-02 00:17:34
回答 2查看 9.2K关注 0票数 7

我正在学习pytest,并尝试使用pytest.mark.parametrize作为关键字参数。

这是一个没有pytest.mark.parametrize的简单示例:

代码语言:javascript
复制
G = 10
H = 2

def f(g=G, h=H):
    return 5 * g + h

def test_f1():
    assert f(h=4) == 54
    assert f(g=20) == 102

这是我使用pytest.mark.parametrize的一条不成功之路。它不起作用,但它有助于理解我想要实现的目标:

代码语言:javascript
复制
import pytest

G = 10
H = 2

def f(g=G, h=H):
    return 5 * g + h  

@pytest.mark.parametrize("arg, expected", [
    ("h=4", 54),
    ("g=20", 102),
    ])

def test_f2(arg, expected):
    assert f(eval(arg)) == expected
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-02 06:52:00

函数f接受关键字参数,因此需要将测试参数分配给关键字。幸运的是,Python提供了一种将关键字参数传递给function...the字典的非常方便的方法:

代码语言:javascript
复制
d = {'h': 4}
f(**d)

**前缀在d之前将“解包”字典,将每个键/值对作为关键字参数传递给函数。

对于您的pytest示例,这意味着您只需要用字典替换字符串参数,用关键字解包替换test_f2中的eval

代码语言:javascript
复制
@pytest.mark.parametrize("arg,expected", [
    ({'h':4}, 54),
    ({'g':20}, 102),
    ])

def test_f2(arg, expected):
    assert f(**arg) == expected
票数 19
EN

Stack Overflow用户

发布于 2018-10-16 18:58:37

扩展马修的回答,同时喂养args和kwargs:

代码语言:javascript
复制
@pytest.mark.parametrize("args, kwargs, expecting", [
    ([100,10], {'is_test':True} , [90, 110]),
    ([100, .2], {'is_test':False} , [80, 120]),
])
def test_fn(args, kwargs, expecting):
    print(args, kwargs)
    assert fn(*args, **kwargs) == expecting

def fn(a, b, c=False):
   if c:
      return a-c, a+c
   else:
      return a - (a*c), a+ a*c
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23418844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档