2014-05-13 3 views
9

nosetests 환경을 설정하고 있지만 시간 초과가 제대로 작동하지 않는 것처럼 보입니다. 코에 의해 발견 된 각 테스트마다 x 초 (예를 들어 2) 시간 초과를 갖고 싶습니다. nosetests를 사용한 테스트의 시간 초과

나는 시도 다음

nosetests --processes=-1 --process-timeout=2 

이 잘 작동하지만 다음과 같은주의 :

  • 병렬 테스트
  • 코가 다시 때보고하지 않는 몇 가지 간단한을 testcases 더 오래 걸립니다 테스트가 시간 초과되었습니다 (따라서 실패했습니다)

어떻게 시간 제한을받을 수 있습니까? 병렬 테스트없이 작동하는 것이 좋지만 테스트가 시간 초과되었다는 피드백을받는 한 문제가되지는 않습니다.

답변

9

이 여러분의 인생을 더 쉽게 만드는 것인지 모르겠지만, 타임 아웃에 실패 nose.tools에서 비슷한 기능이있다, 당신이 그것을 병렬 테스트 할 필요는 없습니다 :

from nose.tools import timed 

@timed(2) 
def test_a(): 
    sleep(3) 

당신을 수동으로 속성을 추가하는 것이 문제라면 스크립트/플러그인을 사용하여 모듈의 모든 테스트를 자동으로 장식 할 수 있지만 필자는 개인적으로 마술에 비해 선명도를 선호합니다.

Lib/site-packages/nose/plugins/multiprocess.py 소스를 살펴보면 사용중인 process-timeout 옵션이 테스트 완료를 방해 할 수있는 "행잉"하위 프로세스를 관리하는 것과 관련이있는 것으로 보입니다.

+2

예상대로 작동합니다. 감사합니다. 모든 테스트 스크립트에 대해 타임 아웃을 설정하는 커맨드 라인 옵션을 선호 하겠지만이 접근법을 계속 사용할 것입니다. 이것은 실제로 내가 다른 사람보다 오래 걸릴 것으로 예상되는 특정 기능에 대한 시간 제한을 설정할 수 있습니다. – JustMe

+3

나는 이것을 시도하고 불행했습니다. 다음은 코드에 입력 한 내용입니다. import nose.tools.timed # 경고, 경고로 남겨 두었습니다. 사용하지 마십시오. 경고로 남았습니다. # nose.tools.timed는 시간을 제한하지 않습니다. 테스트가 실행되고 테스트가 실행되고 너무 오래 걸리면 # TimeExpired()를 발생시킵니다. 런타임에 바인딩이 없으며 확장하는 방법도 제공되지 않습니다. # 실행 시간 코 - 와이드 (coose-wide) 테스트 당 한도보다 더 오래 걸리는 테스트. 왜 아무도 이것을 사용하지 않았을까요? – Jim