2017-08-28 20 views
0

私は、テストスイートでフィクスチャを利用する必要がある機能を持っています。これは完全なURLを生成するのに役立つちょっとしたヘルパー関数です。PyTestのヘルパー関数にフィクスチャを渡しますか?

def gen_url(endpoint): 
    return "{}/{}".format(api_url, endpoint) 

私はURLを返しconftest.pyでの治具があります。

@pytest.fixture(params=["http://www.example.com"]) 
def api_url(request): 
    return request.param 

@pytest.fixture(params=["MySecretKey"]) 
def api_key(request): 
    return request.param 

最後に、私のテスト機能では、私が呼び出す必要がありますが、私のgen_url

def test_call_action_url(key_key): 
    url = gen_url("player") 
    # url should equal: 'http://www.example.com/player' 
    # Do rest of test here... 

私はこれを行いますしかし、gen_urlが呼び出されたときにapi_urlが定義されていないというエラーが発生します。 2番目のパラメータとしてapi_urlを追加すると、2番目のパラメータとして渡す必要があります。それは...私がしたいことではありません。

gen_urlに2番目のパラメータとしてapi_urlを追加してテストから渡す必要はありませんか? 機能でapi_keyのように使用できないのはなぜですか?

+3

'api_url'を' gen_url'に渡したくないのですか? –

答えて

0

コードに複数の問題がある場合、テストコードでフィクスチャが表示されず、テストパラメータとして使用しない限り、フィクスチャ(api_urlおよびapi_key)をテスト関数に渡してから、ヘルパー機能。ここ あなたがgen_url治具を作る場合は、それが明示的にそれを渡さずapi_urlを要求することができます修正コード(未テスト)

def gen_url(api_url, endpoint): 
    return "{}/{}".format(api_url, endpoint) 

def test_call_action_url(api_url, api_key): 
    url = gen_url(api_url, "player") 
    # url should equal: 'http://www.example.com/player' 
    # Do rest of test here with api_key here... 
1

次のとおりです。また

@pytest.fixture 
def gen_url(api_url): 
    def gen_url(endpoint): 
     return '{}/{}'.format(api_url, endpoint) 
    return gen_url 


def test_call_action_url(api_key, gen_url): 
    url = gen_url('player') 
    # ... 

api_keyのみリクエストを作成するために使用されている場合、 TestClientクラス がカプセル化できるため、テストメソッドではクライアントのみが必要です。

関連する問題