无法通过pytest来了解设置上的命令行参数

时间:2012-11-07 18:20:25

标签: python unit-testing testing command-line-arguments pytest

所以我一直试图让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。

由于

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放在类或模块上。