Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 向pytest设置函数添加参数_Python 2.7_Pytest - Fatal编程技术网

Python 2.7 向pytest设置函数添加参数

Python 2.7 向pytest设置函数添加参数,python-2.7,pytest,Python 2.7,Pytest,我正在努力学习pytest,但我遇到了一个障碍。我需要在setup_方法中定义一个通过命令行参数定义的变量。我可以在单独的测试中做到这一点,没有问题,但是在setup方法中尝试做同样的事情失败了。我收到这个信息- TypeError: setup_method() takes exactly 3 arguments (2 given) 我做错什么了吗?任何帮助都将不胜感激 这是我的conftest.py # Conftest.py import pytest def pytest_addop

我正在努力学习pytest,但我遇到了一个障碍。我需要在setup_方法中定义一个通过命令行参数定义的变量。我可以在单独的测试中做到这一点,没有问题,但是在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
实际运行测试时,我这样做-

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
.setup\u method()
.teardown\u method()
函数是机头兼容性选项,它们不接受夹具作为参数。最好在类上使用自动使用装置:

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
一起使用