我正在努力学习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
答案 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
对象身份。