2012-12-18 4 views
9

두 개의 간단한 테스트 설정이 있습니다. 하나의 픽스쳐로 그룹화하고 테스트 함수가 조명기에 '매개 변수'로 전달되기를 원합니다.pytest fixture로 전달 된 매개 변수를 변수로 전달할 수 있습니까?

내 질문에 대한 설명은 다음과 같습니다. 내가 다음 pytest기구가 말 : 그래서

@pytest.fixture(scope="module", params=['param1','param2']) 
def myFixture(request): 
    if request.param == 'param1': 
     p = 5 
    elif request.param == 'param2': 
     p = 10 
    return p 

# would like to set request.param = ['param1'] for myFixture 
def test_madeup(myFixture): 
    assert myFixture == 5 

# would like to set request.param = ['param2'] for myFixture 
def test_madeup2(myFixture): 
    assert myFixture == 10 

내가 그것을 만들 수를 위의 test_madeup 함수의 입력으로 전달하는 PARAMS? 그래서, 다음과 같은 일이 :

@pytest.fixture(scope="module", params=fixtureParams) 
def myFixture(request): 
    if request.param == 'param1': 
     return 5 
    elif request.param == 'param2': 
     return 10 


def test_madeup(myFixture, ['param1']): 
    assert myFixture == 5 

위, 물론 작동하지 않습니다. 실제 사례는 조금 더 복잡합니다. test_madeup 함수에서 params=['param1','param2'] 을 조명기에 전달할 수 있는지 알고 싶습니다.

답변

14

, 당신은 기본적으로 실행하기위한 매개 변수화기구의 하나 개의 인스턴스를 선택합니다 테스트에 대한 정보를 제공하여 테스트합니다. 메커니즘에 대해 생각할 수도 있지만 불가능합니다.

import pytest 

@pytest.fixture(scope="module") 
def myFixture1(): 
    return 5 

@pytest.fixture(scope="module") 
def myFixture2(): 
    return 2 

@pytest.fixture(scope="module", params=["param1", "param2"]) 
def myFixture(request): 
    if request.param == 'param1': 
     return request.getfuncargvalue("myFixture1") 
    elif request.param == 'param2': 
     return request.getfuncargvalue("myFixture2") 

def test_1(myFixture1): 
    assert myFixture1 == 5 

def test_2(myFixture2): 
    assert myFixture2 == 2 

def test_all(myFixture): 
    assert myFixture in (2,5) 

이 네 개의 테스트를 실행하는 test_all이 두기구로 두 번 실행되기 때문에, 다음 솔루션은 전체 문제에 매핑하지만, 여기에 위의 콘크리트 사건을 해결하는 하나의 방법입니다 있는지 확실하지 않다.

조명기의 설정이 무겁지 않은 경우 목록을 생성하는 조명기와 매개 변수화 된 "반복"조명기가있을 수 있습니다. 그런 다음 테스트를 통해 전체 목록을 가져 와서 목록에 넣을 수 있습니다.

3

이 당신이 원하는이지만, 예를 들어 케이스는 다음과 같이 구현 될 수 있는지 확실하지 : 제가 제대로 질문을 이해한다면

@pytest.mark.parametrize(('param', 'expected'), [('param1', 5), ('param2', 10)]) 
def test_madeup(param, expected): 
    assert param == expected 
관련 문제