所以我一直试图让pytest根据一些命令行参数在不同的环境中运行selenium测试。但它一直在抛出这个错误:
TypeError: setup_class() takes exactly 2 arguments (1 given)
似乎理解setup_class
需要2个参数,但host
未被传递。这是setup_class
的代码:
def setup_class(cls, host):
cls.host = host
这是conftest.py文件:
def pytest_addoption(parser):
parser.addoption("--host", action="store", default='local',
help="specify the host to run tests with. local|stage")
@pytest.fixture(scope='class')
def host(request):
return request.config.option.host
奇怪的是函数可以看到host
(所以如果我创建一个test_function并将主机作为参数传递,它就可以了。)它只是setup
灯具那些不起作用。
我环顾四周,找到了这个pytest - use funcargs inside setup_module,但这似乎没有用(而且它已经过时了2.3。
有谁知道我做错了什么?使用py.test 2.3.2。
由于
答案 0 :(得分:19)
要从安装功能内部访问命令行选项,可以使用pytest.config对象。这是一个例子......根据需要进行调整。
import pytest
def setup_module(mod):
print "Host is %s" % pytest.config.getoption('host')
答案 1 :(得分:1)
setup_module / class / method和朋友无法直接使用pytest fixtures。 pytest-2.3做同等效的方法是使用autouse fixtures。如果可以,最好将fixtures明确地传递给测试函数或将usefixtures marker放在类或模块上。