거의 동일한 설정을 필요로하는 여러 개의 pytest 테스트 케이스가 있으므로 DRT를 유지하기 위해 fixture를 다시 사용하도록하고 싶습니다. 설정은 외부 티켓 추적 시스템에 새 티켓을 작성한 다음 테스트 케이스가 데이터를 기반으로 티켓과 상호 작용하고 최종적으로 티켓을 닫아 클린업합니다. 여기서의 도전 과제는 각 테스트 케이스가 티켓에서 준비되는 약간 다른 데이터를 필요로한다는 것입니다.pytest yieldt fixture에서 request.function을 사용할 때 AttributeError
각 테스트 케이스는 서로 다른 호출과 서로 다른 어설 션을 가지므로 단일 테스트 픽스처로 단일 매개 변수화 된 테스트 케이스에 모두 결합 할 수는 없습니다. 조명기 자체를 파라미터 화하면 모든 테스트 케이스가 조명기 데이터의 모든 순열을 실행하게되어 무관 한 테스트 실패로 끝납니다.
테스트 케이스에 변수를 설정 한 다음 해당 변수를 사용하여 티켓을 만들 때 테스트 데이터를 설정합니다. 나는 pytest fixture docs에 지정된 request.function
을 사용하려했지만 내가 점점 계속 :
=================================== ERRORS ===================================
____________________ ERROR at setup of TestMCVE.test_stuff ___________________
request = <SubRequest 'ticket' for <Function 'test_stuff'>>
@pytest.yield_fixture
def ticket(request):
> ticket_summary = getattr(request.function, "summary")
E AttributeError: 'function' object has no attribute 'summary'
tests\test_mcve.py:11: AttributeError
내 코드는 다음과 같습니다
import pytest
def ticket_system_api(summary):
# stub for MCVE purposes
return summary
@pytest.yield_fixture
def ticket(request):
ticket_summary = getattr(request.function, "summary")
new_ticket = ticket_system_api(summary=ticket_summary)
yield new_ticket
class TestMCVE:
def test_stuff(self, ticket):
summary = 'xyz'
# do real things here, except MCVE
assert 'xyz' == ticket
내가 request.node
대신 request.function
뿐만 아니라 binding the summary variable per this answer를 사용하여 시도했다, 변경 summary = 'xyz'
to test_stuff.summary = 'xyz'
하지만 여전히 동일한 AttributeError로 실패합니다.
어떻게 함수 레벨 데이터를 조명기에 전달할 수 있습니까?
문은 "티켓"고정에 항복하기 전에 다음 "요약"개체 – AlokThakur
의 창조 이전에 실행 될'ticket' 테스트 기능보다 먼저 실행됩니다. 조명기 실행이 완료되면'summary'가 초기화됩니다. 당신은 fixture 대신에'ticket '을 일반적인 함수로 사용할 수 없습니까? –