2017-05-18 8 views
3

がpytest器具が提供するパラメータの値を保存する方法、あります:ここでpytestフィクスチャパラメータの値を取得

がconftest.pyここ

# content of conftest.py 

import pytest 

def pytest_addoption(parser): 
    parser.addoption("--parameter", action="store", default="default", 
        help="configuration file path") 

@pytest.fixture 
def param(request): 
    parameter = request.config.getoption("--parameter") 
    return parameter 

の例れることは一例です - すべてが正常に動作しますが、テストの外paramの値を取得する方法がある - 例えば、いくつかのビルドでpytest機能で

# content of my_test.py 

def test_parameters(param): 
    assert param == "yes" 

はOK:pytestモジュールの

編集 - 私はモジュールを書いています

ACHIEVしたいのか詳細な説明は、それが展開し、それがテストにパラメータを提供した後、pytestで書か。

class TestApproachI: 
    @load_params_as_kwargs(parameters_A) 
    def setup_class(cls, param_1, param_2, ... , param_n): 
     # code of setup_class 

    def teardown_class(cls): 
     # some code 

    def test_01(self): 
     # test code 

そして、この誰かが私は(いくつかの他のスクリプトで)それらのパラメータを分析すると、私は意志、私に彼のコードを実行するためにどのようなパラメータで説明した構成ファイルを、与える:誰かのテストはそのように見える場合は私の考えですpytest --parameters=path_to_serialized_python_tuple test_to_runというコマンドでテストを実行します。このタプルには、この人のパラメータの値が正しい順序で含まれます。そして私はその男に(テストで)このデコレータを追加して、私がパラメータを提供したいすべてのテストに追加するように指示します。このデコレータは次のようになります。

class TestApproachI: 
    # this path_to_serialized_tuple should be provided by 'pytest --parameters=path_to_serialized_python_tuple test_to_run' 
    @load_params(path_to_serialized_tuple) 
    def setup_class(cls, param_1, param_2, ... , param_n): 
     # code of setup_class 

    def teardown_class(cls): 
     # some code 

    def test_01(self): 
     # test code 

デコレータ関数はそのようになります。

def load_params(parameters): 
    def decorator(func_to_decorate): 
     @wraps(func_to_decorate) 
     def wrapper(self): 
      # deserialize the tuple and decorates replaces the values of test parameters 
      return func_to_decorate(self, *parameters) 
     return wrapper 
    return decorator 
+1

どうしたいですかテストの外で値を取得しますか? –

+0

@Nils Werner説明が複雑ですが、私の質問を編集したい場合は –

+0

うまくいきました。何をしようとしているのではなく、うまくいかない。 –

答えて

1

が設定されていることをparameter OS環境変数として、そしてos.getenv('parameter')

を通して、あなたのテストの任意の場所でそれを使用するよりも、

だから、あなたのように使用することができます

@pytest.fixture 
def param(request): 
    parameter = request.config.getoption("--parameter") 
    os.environ["parameter"]=parameter 
    return parameter 

@pytest.mark.usefixtures('param') 
def test_parameters(param): 
    assert os.getenv('parameter') == "yes" 
+0

それはうまく動作しません - 'os.getenv( 'parameter')'はNoneを返します: 'AssertionError:assert None == 'yes'' –

+0

@ stefan.stt更新されたものを試してください。 –