2012-11-07 17 views
7

私は、いくつかのコマンドライン引数に基づいて異なる環境でセレンテストを実行するためにpytestを取得しようとしています。しかし、それはこのエラーを投げ続ける:セットアップでコマンドライン引数を理解するためにpytestを取得できません

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

setup_classは2つの引数を取りますが、hostが渡されていないことを理解しているようです。ここでsetup_classのためのコードは次のとおりです。

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とパスを作る場合ということです:

def setup_class(cls, host): 
     cls.host = host 

そして、ここではconftest.pyファイルがありますパラメータとしてホスト、それはちょうどそれを得る)、それは働いていないsetupフィクスチャだけです。

私は周りを見回したとこれを見つけ、それが、pytest - use funcargs inside setup_moduleが動作していないようです(と、それは2.3以来時代遅れされています。

は、誰もが私が間違ってやっている知っていますか?py.test 2.3.2を使用して。

おかげ

答えて

1

setup_module /クラス/メソッドや友人が直接pytest備品で作業することはできません。同等のものを行うためのpytest-2.3の方法は、autouse fixturesを使用することです。あなたは、テスト関数に明示的に備品を渡すために良いことをだことができればクラスまたはモジュールにusefixtures markerを置くことができます。

+0

【こちら】(http://pytest.org/latest/fixture.html#working-with-a-module-shared-fixture)それは、フィクスチャの名前が再び、SMTPであるとすることができます」と言います任意のテストまたはセットアップ機能で入力パラメータとして名前smtpを表示することでその結果にアクセスできます」。だから私はセットアップなどでそれを使用できますか?そして 'autouse'と' uses'はすべてのテストがそのコードを実行させるようにしています。 – Nacht

+0

私はあなたに答えをあげます。あなたが私の特定の答えに答えなかったとしても、あなたは私に回避策としてのアイデアを与えました。これは奇妙なことですが、ドキュメントはあなたがそれを行うことができると言いますが、そうではないようです。とにかく、ありがとう。 – Nacht

+1

あなたが正しいです、ドキュメントは誤解を招きます。または実際には、私はちょうど "フィクスチャ関数"と "セットアップ機能"を置き換える修正をアップロードしました。ごめんなさい! – hpk42

19

setup関数内からコマンドラインオプションにアクセスするには、pytest.configオブジェクトを使用します。ここに例があります...必要に応じて適応してください。

import pytest 

def setup_module(mod): 
    print "Host is %s" % pytest.config.getoption('host') 
+1

将来の訪問者には、受け入れられた回答をスキップしてこれを使用してください。これはうまくいって、受け入れられた答えよりも少ないステップを要します。 – pr4bh4sh

関連する問題