7

所以我一直试图让 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 - 在 setup_module 中使用 funcargs但这似乎不起作用(自 2.3.3 以来它已经过时了。

有谁知道我做错了什么?使用 py.test 2.3.2。

谢谢

4

2 回答 2

19

要从设置函数内部访问命令行选项,您可以使用 pytest.config 对象。这是一个示例...根据需要进行调整。

import pytest

def setup_module(mod):
    print "Host is %s" % pytest.config.getoption('host')
于 2013-03-15T00:54:08.903 回答
1

setup_module/class/method 和朋友不能直接使用 pytest 固定装置。pytest-2.3 的等效方法是使用autouse fixtures。如果可以的话,最好将fixture 明确地传递给测试函数,或者在类或模块上放置一个usefixtures 标记。

于 2012-11-08T09:22:59.737 回答