7

そのため、コマンドライン引数に基づいて、さまざまな環境でseleniumテストを実行するようにpytestを取得しようとしています。しかし、それはこのエラーをスローし続けます:

TypeError: setup_class() takes exactly 2 arguments (1 given)

setup_class2つの引数を取ることは理解しているようですが、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以降は古くなっています。

誰かが私が間違っていることを知っていますか?py.testの使用2.3.2。

ありがとう

4

2 に答える 2

19

setup 関数内からコマンド ライン オプションにアクセスするには、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 フィクスチャを使用することです。可能であれば、関数をテストするために明示的にフィクスチャを渡すか、クラスまたはモジュールにusefixtures マーカーを配置することをお勧めします。

于 2012-11-08T09:22:59.737 に答える