2017-03-04 19 views
2

내 장고 프로젝트에 대한 pytest와 셀레늄을 실행하고 고정물 설정/teardown을 실행하려고합니다.pytest.fixture 함수는``yield``를 사용할 수 없습니다. 대신 작성하고 내부 함수/생성기를 반환하고 소비자가 전화를 반복하고 그것을 반복하자. :

나는 yield를 사용하여 최고의 practice을 따라하려고 노력하지만 오류가 점점 오전 : 그것은 작동하지 않는 이유를

--- ERROR at setup of test_browsing_check --- 
pytest.fixture functions cannot use ``yield``. Instead write and return an inner function/generator and let the consumer call and iterate over it.: 

@pytest.fixture(scope="module") 
def browser(request): 
    selenium = webdriver.Firefox() 
    selenium .implicitly_wait(3) 
    yield selenium 
    selenium.quit() 

알고 계십니까? 내가 잘

@pytest.fixture(scope="module") 
def browser(request): 
    selenium = webdriver.Firefox() 
    selenium.implicitly_wait(3) 
    def teardown(): 
     selenium.quit() 
    request.addfinalizer(teardown) 
    return selenium 

작동 다른 코드를 사용했다 그러나이 방법은 사용하지 않는 것이 좋습니다 나중에 그런

:이 방법은 아직 완벽하게 지원됩니다

하지만 수익률은 2.10에서 권장 이후 때문에 자연스러운 코드 흐름을보다 간단하고 잘 설명하는 것으로 간주됩니다. 버전에 대한

참고 :

$ python -V 
$ Python 3.5.2 :: Anaconda 4.2.0 (64-bit) 

$ django-admin version 
$ 1.10.3 

$ pip show pytest 
$ Name: pytest 
$ Version: 2.9.2 
+1

문서에 따르면 : 버전 2.10 이전에는 yield 문을 사용하여 teardown 코드를 실행하려면 * yield_fixture 마커 *를 사용하여 조명기를 표시해야했습니다. 2.10 이후부터 일반 조명기는 yield를 직접 사용할 수 있으므로 yield_fixture 데코레이터는 더 이상 필요하지 않으며 더 이상 사용되지 않는 것으로 간주됩니다. –

+0

@FrancoSolleza 좋은 답변입니다! 답변을 추가해주세요. 투표를 해 보겠습니다. –

+0

예. 과연. 그것을 테스트하고 작동합니다. 고맙습니다. @DavorCubranic이 (가) –

답변

4

워드 프로세서에 따르면 : 버전 2.10 이전에, 분해 코드 하나를 실행 수율 문을 사용하기 위하여는 yield_fixture 마커를 사용하여 고정을 표시했다. 2.10 이후부터 일반 조명기는 yield를 직접 사용할 수 있으므로 yield_fixture 데코레이터는 더 이상 필요하지 않으며 더 이상 사용되지 않는 것으로 간주됩니다.