找不到py.test参数化`pytest.param`?

时间:2017-05-30 09:54:07

标签: python pytest

在尝试进行单元测试(使用py.test)时,我会以编程方式生成测试。 - 我有一个函数可以导出参数和测试结束时保持的不变量。

现在为了保持整洁,我也希望传递一个ID进行测试。查看pytest的官方(?)文档,我注意到:

import pytest

from datetime import datetime, timedelta

# ...

@pytest.mark.parametrize("a,b,expected", [
    pytest.param(datetime(2001, 12, 12), datetime(2001, 12, 11),
                 timedelta(1), id='forward'),
    pytest.param(datetime(2001, 12, 11), datetime(2001, 12, 12),
                 timedelta(-1), id='backward'),
])
def test_timedistance_v3(a, b, expected):
    diff = a - b
    assert diff == expected

在示例中显示different ways to parametrize

上面的方法正是我想做的(给每个参数提供参数和ID):我的函数只输出pytest.param个对象的列表。但是当我运行上面的代码片段(或者来自pytest.org的完整代码段)时,我遇到了以下错误(同时pycharm ide突出显示了这种语法错误):

E AttributeError: module 'pytest' has no attribute 'param'

文档错了吗?我错过了一些我没有正确设置环境的东西吗?

1 个答案:

答案 0 :(得分:3)

pytest.param只有recently been implemented。要使用它,请确保使用py.test版本3.1.0或更高版本。

pip install -U "pytest>=3.1.0"