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

Nac*_*cht 7 python testing unit-testing command-line-arguments pytest

所以我一直试图让pytest根据一些命令行参数在不同的环境中运行selenium测试.但它不断抛出这个错误:

TypeError: setup_class() takes exactly 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

似乎理解是setup_class接受2个参数,但是host没有被传递.这是以下代码setup_class:

def setup_class(cls, host):
        cls.host = host
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

奇怪的是,host函数正在看到它(因此,如果我创建一个test_function并将主机作为参数传递,它就会很好),它只是setup不起作用的灯具.

我环顾四周,发现这个,pytest - 在setup_module中使用funcargs,但这似乎不起作用(并且它已经过时了2.3.

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

谢谢

小智 19

要从安装功能内部访问命令行选项,可以使用pytest.config对象.这是一个例子......根据需要进行调整.

import pytest

def setup_module(mod):
    print "Host is %s" % pytest.config.getoption('host')
Run Code Online (Sandbox Code Playgroud)


hpk*_*k42 1

setup_module/class/method 和朋友不能直接使用 pytest 装置。pytest-2.3 做同样的事情的方法是使用autousefixtures。如果可以的话,最好明确地传递固定装置来测试函数或在类或模块上放置usefixtures 标记。