2012-11-13 2 views
5

Tox을 사용하고 있습니다. 신선한 환경에 설치했을 때 시스템이 제대로 작동하는지 확인하려면 setup.py 파일을 점검하십시오. 그러나 시스템은 memcached 서버를 사용하며 이상적으로는 Tox 실행마다 새 것을 생성하고 싶습니다.Python/tox, 테스트 전에 프로세스를 시작하고 종료하면 시스템을 종료하십시오

테스트를 실행하기 전에 프로그램을 시작한 다음 (나중에 종료해야합니다) 또는 사용자 지정 러너를 작성해야합니까?

편집 : 테스트 러너 난 당신이 paver 사용하는 것이 좋습니다 py.test

+1

_tox_와 함께 사용하는 실제 단위 테스트 프레임 워크 (_py.test_, _nose_, _unittests_, ...)의 _setup_ functions/메소드에서이를 수행해야합니다. –

+0

좋은 아이디어! 구현은'서브 프로세스 (subprocess) '를 사용한 바람이였습니다. 답을하면 받아 들일거야. –

+0

구현상의주의 :'conftest.py'의'pytest_configure'와'pytest_unconfigure'는 스폰/종료하기에 좋은 장소였습니다. –

답변

2

이것은 실제로 tox의 작업이 아닙니다. 내 추천은 tox과 함께 사용중인 실제 단위 테스트 프레임 워크 (py.test, nose, unittests, ...)의 setup 함수/메소드에서 수행하는 것이 좋습니다.

원래 포스터의 코멘트 : conftest.py에서

pytest_configurepytest_unconfigure이/산란을 종료하는 좋은 장소였다.

+0

pytest_configure/unconfigure는 분산 테스트 (pytest-xdist plugin)와 잘 작동하지 않기 때문에 가장 적합하지 않습니다. py.test 2.3 릴리스는이 문제를 해결하기 위해 향상된 조명기 API를 도입했으며, @ pytest.fixture (scope = 'session')로 조명기를 표시하여 세션 범위의 조명기를 만들었습니다. – flub

1

입니다 - http://paver.github.com/paver/ - 위 산란하고 memcached 서버 또는 당신이 필요 추가 "기타 시스템 관리 작업"의 종료하는 setup.py 실행시 tox까지 수행하십시오.

+0

하지만 더 이상 tox없이 테스트를 실행할 수는 없습니다. 근본적인 테스트 주자와 함께하는 것이 더 낫다고 생각합니다. – hpk42

6

flub의 의견에 py38est를 사용하는 가장 좋은 방법은 fixture mechanism입니다. 이 내용으로 conftest.py 파일을 만듭니다

# content of conftest.py 

import pytest, subprocess 

@pytest.fixture(scope="session", autouse=True) 
def startmemcache(request): 
    proc = subprocess.Popen(...) 
    request.addfinalizer(proc.kill) 

은 "autouse"플래그가이기구는 시험에서 참조를 필요로하지 않고 각 테스트 실행 활성화된다는 것을 의미합니다. 그러나 실제로는 테스트에서 사용할 수있는 하위 프로세스에 대한 연결 세부 정보를 만들면 마법 포트 번호로 작업하지 않아도됩니다. "autouse"를 사용하지 않고 오히려 Memcache에 연결하기위한 fixture 객체를 반환하여 테스트 구성을 한 곳 (정착 기능)에 멋지게 캡슐화합니다. 더 많은 예제를 보려면 문서를 참조하십시오.

+0

처음 구현 한 것보다 훨씬 좋았습니다. 내가 갈거야. –

관련 문제