2013-05-07 4 views
24

py.test의 반복 실행 속도를 향상시키는 방법이 있습니까? 명령 줄에서 실행할 파일을 지정하더라도 테스트 수집에 많은 시간을 소비하는 것 같습니다. 모든 .py 파일에서 pyflakes를 실행하는 것이 매우 빠르기 때문에 디스크 속도 문제가 아니라는 것을 알고 있습니다.py.test를 가속화하는 방법

+1

"수집 중"단계가 느립니까? py.test를'--collectonly'와 함께 실행 해보십시오. – alecxe

+1

예, 느린 컬렉션입니다. 나는 collect count start가 0에서 2, 7로 이동하는 것을 볼 수있다. 나는 이것을'--collectonly'로 다시 확인했다. 수집을 게시하면 거의 즉시 실행됩니다. –

+1

400 개가 넘는 테스트 및 수집 단계의 프로젝트가 매우 빠릅니다. 또한 conftest.py는 많은 마법을 추가했으며, 많은'parametrize', fixtures,'pytest_generate_tests'를 사용하여 수집 속도가 느리다는 것을 느낄 수 있습니다. pytest 수집 단계와 상호 작용하고 느리게 만드는 코드가 없는지 확인하십시오. 그렇지 않은 경우 라인 프로파일 러와 같은 프로파일 러를 실행하여 느린 코드를 확인할 수 있습니다. – spinus

답변

9

pytest.ini 또는 tox.ini에서 norecursedirs 옵션을 사용하면 작업 디렉토리에있는 다른 파일의 종류에 따라 많은 시간을 절약 할 수 있습니다. 내 수집 시간은 300 개의 테스트 세트에 대해 반으로 줄었습니다 (0.34 초 대 0.64 초).

내가처럼 이미 tox를 사용하는 경우, 당신은 단지 당신의 tox.ini에 다음을 추가해야합니다

[pytest] 
norecursedirs = docs *.egg-info .git appdir .tox 

당신은 또한 독립 pytest.ini 파일에 추가 할 수 있습니다.

pytest 설명서에는 more details on py.test configuration files이 있습니다.

+0

추가적으로 (또는 대신에)'testpaths', 즉'testpaths = src/tests'를 설정해야합니다. 그렇다면'.git','.tox' 등을 건너 뛰지 않아도됩니다. – blueyed

4

내 프로젝트의 루트에서 py.test을 호출하는 것과 동일한 문제가 있었으며 테스트 결과 세 개의 하위 디렉토리가있었습니다. 컬렉션은 실제 테스트 실행 0.4 초 전에 6-7 초 걸렸습니다.

내 솔루션은 처음 시험에 대한 상대 경로로 py.test 전화를했다 :

py.test src/www/tests/ 

그 또한 컬렉션을 가속화하고있는 것은, 당신은 addopts의 끝에 시험에 상대 경로를 추가 할 수 있습니다

[pytest] 
addopts = --doctest-glob='test_*.md' -x src/www/tests/ 

이 두 번째에 대해 아래로 컬렉션 + 실행 시간을 감소 내가 예전으로 나는 여전히 py.test를 호출 할 수 있습니다 : 예 - 당신의 pytest.ini에 설정.

+1

더 좋은 방법은'testpaths' 즉'testpaths = src/www/tests'를 사용하여 설정하는 것입니다. – blueyed

1

xdist을 사용하면 py.test를 병렬 처리 할 수 ​​있습니다. 원격 컴퓨터에 테스트를 제공 할 수도 있습니다. 설정에 따라 상당히 빨라질 수 있습니다 :)

2

cygwin의 python에서 실행되는 특별한 경우에는 유닉스 스타일의 파일 처리가 느립니다. 해당 특수 상황에서 속도를 높이는 방법은 pytest.py test very slow startup in cygwin을 참조하십시오.

0

일부 바이러스 백신 소프트웨어가 실행중인 경우 해제 해보십시오. 나는이 똑같은 문제를 안고 있었다. 수집 테스트가 엄청나게 천천히 진행되었습니다. 문제를 일으키는 바이러스 백신 소프트웨어 (Avast)로 판명되었습니다. 바이러스 백신 소프트웨어를 사용하지 않도록 설정하면 테스트 컬렉션이 약 5 배 빠르게 실행됩니다. 바이러스 백신을 켜고 끄는 것을 여러 번 테스트했기 때문에 그것이 내 경우에 원인인지 의심의 여지가 없습니다.

관련 문제