将参数添加到pytest设置功能

时间:2014-08-18 19:47:45

标签: python-2.7 pytest

我正在努力学习pytest,而且我遇到了麻烦。我需要在setup_method中定义一个通过命令行参数定义的变量。我可以在单独的测试中做到这一点没有问题,但尝试在setup方法中做同样的事情失败了。我收到了这条消息 -

TypeError: setup_method() takes exactly 3 arguments (2 given)

我做错了吗?任何帮助,将不胜感激。

这是我的conftest.py

# Conftest.py
import pytest

def pytest_addoption(parser):
    parser.addoption("--var_one", action="store", default=False)
    parser.addoption("--var_two", action="store", default=False)

@pytest.fixture
def var_one(request):
    var_one_param = request.config.getoption("--var_one")
    return var_one

@pytest.fixture
def var_two(request):
    var_two_param = request.config.getoption("--var_two")
    return var_two_param

Actualy运行测试我这样做 -

py.test --var_one=True --var_two==True tests.py 

这是文件,我希望在执行文件时定义和调用变量 -

import pytest

class Tests:

    def setup_method(self, method, var_one):
        if var_one == True:
            # do stuff
        else:
            # do other stuff

    def test_one(self, var_two):
        assert var_two == True

    def teardown_method(self):
        #Not needed here
        pass

1 个答案:

答案 0 :(得分:2)

.setup_method().teardown_method()函数是鼻子兼容性选项,它们不接受灯具作为参数。更好的方法是在课堂上使用autouse灯具:

class Tests:

    @pytest.fixture(autouse=True)
    def do_stuff_based_on_var_one(self, var_one):
        if var_one:
            # do stuff
        else:
            # do other stuff

    def test_one(self, var_two):
        assert var_two is True

作为旁注,请注意将布尔值与==进行比较被认为是不好的做法,在条件中只使用它的隐含真值。如果你真的需要比较,它会承认它的单身性质,并使用is对象身份。