2017-02-27 5 views
0

젠킨스의 통합 테스트의 일부로 git 커밋간에 변경된 파일에서만 테스트를 실행하려고합니다.bash의 조건부 nosetests

의 코드는 필터가 모든 파일 결과를 제거하지 않는 한 작동합니다. 그런 다음 모든 테스트가 코에 의해 실행됩니다. 이 경우에는 아무 테스트도 실행하지 않을 것입니다.

if [ $GIT_PREVIOUS_SUCCESSFUL_COMMIT != $GIT_COMMIT ]; then 
    git diff --name-only --diff-filter=d $GIT_PREVIOUS_SUCCESSFUL_COMMIT $GIT_COMMIT | grep .py | xargs nosetests -vv 
fi 

의견이 있으십니까?

+1

코드가 전혀 작동하지 않아야합니다. 'if' 문의 조건은'test "$ GIT_PREVIOUS_SUCCESSFUL_COMMIT"! = "$ GIT_COMMIT"'또는 이와 동등한 것이어야합니다. – chepner

+0

당신은 완전합니다. 나는 읽기 쉽도록 스 니펫을 단순화하려고했지만, 대신 깨진 코드를 작성했습니다! 수정 중 ... –

+1

'x '접두어는 필요하지 않습니다. '''의 오래된 버기 버전을 수용하기위한 오래된 해킹입니다. 최신 버전의''''[['. – chepner

답변

0

나는 그것을 얻었습니다. nosetests를 호출하기 전에 초기 결과를 분할하고 목록이 비어 있는지 확인해야합니다.

if [ $GIT_PREVIOUS_SUCCESSFUL_COMMIT != $GIT_COMMIT ]; then 
    TESTFILES=$(git diff --name-only --diff-filter=d $GIT_PREVIOUS_SUCCESSFUL_COMMIT $GIT_COMMIT | grep .py) 
    if [ -z "$TESTFILES" ]; then 
     echo "No test files found" 
    else 
     nosetests -vv $TESTFILES 
    fi 
fi 
0

이렇게 테스트하면 안됩니다. 너무 오류가 발생하기 쉽습니다.

먼저 mark your tests을 건너 뛰어도 좋다고 생각합니다. 그런 다음 Jenkins 빌드에서 실행하려는 것을 선택하여 선택할 수 있습니다. 오랜 시간이 걸리는 수백 또는 수천 개의 테스트가있는 경우 pytest-xdist를 사용하여 테스트를 병행해야합니다. 이미 알고 있듯이 모든 테스트는 독립적으로 실행되어야합니다.

제 철학은 모든 것을 시험하거나 신경 쓰지 않습니다.

+0

아니요, 저는이 방법을 독점적으로 테스트하지 않겠습니다. 파이썬의 unittest를 기능적인 회색 박스 시스템 테스트를 실행하기 위해 약간 남용하고 있습니다. 이는 통합에서 모든 테스트를 실행하기 전에 테스트 코드가 변경된 가장 불안한 테스트를 실행하는 스크립트의 일부입니다. –

+0

나는 본다. 회색 상자 테스트의 경우 RobotFramework를 살펴보십시오. 그것은 놀라운 일입니다. 죄송합니다. 원래 질문에 대해 많이 알지 못합니다. – NinjaGaiden