2009-07-29 5 views
5

우리는 buildbot을 사용하여 테스트를 시작하려는 python 프로젝트를 가지고 있습니다. 유닛 테스트에는 일부 플랫폼에서만 작동하는 테스트가 포함됩니다. 따라서 모든 플랫폼을 통과해야하는 테스트, 특정 플랫폼에서만 실행되는 테스트, 플랫폼 A, B, C에서 통과해야하는 테스트와 B와 D를 통과해야하는 테스트가 있습니다.플랫폼 별 단위 테스트를 배포하고 실행하는 방법은 무엇입니까?

이 일을하는 가장 좋은 방법은? 설명 된 것처럼 각 패키지마다 다른 대상 플랫폼 목록이있을 수 있으므로 단순한 스위트는 번거롭다. 메소드를 테스트 할 플랫폼과 일치하는 "@run_on"및 "@ignore_on"데코레이터를 추가하는 방법에 대해 생각했습니다. 더 좋은 점이 있습니까?

답변

0

, 그리고 단순히 통과시키지 않았다면 (파이썬 2.7은 이미 트립에서 SkipTest 예외를 가지고있는 것을 보았습니다. 그런 경우에는 테스트를 무시할 수 있습니다).

+1

SkipTest도 매우 편리합니다 - 건너 뛰기 옵션이 있습니다. – Almad

0

테스트 로더를위한 편리한 장소처럼 들립니다.

체크 아웃 http://docs.python.org/library/unittest.html#unittest.TestLoader.loadTestsFromName

당신은 아마 당신의 테스트 명명 규칙에 따라 스위트 룸을 만들 수있는 적절한 명명 규칙을 제공합니다.

AIX, Linux (모두) 및 32 비트 Windows에서 실행되는 테스트 A가 있고 Windows 64, Linux 64 및 Solaris에서 실행되는 테스트 B 및 HPUX 및 테스트 D를 제외한 모든 시스템에서 실행되는 테스트 C가있는 경우 모든 것을 실행하는 ... 가능한 이름 지정 규칙은 무엇입니까?

class TestA_AIX_Linux2_Win32(unittest.TestCase): 

class TestB_Win64_Linux64_Solaris(unittest.TestCase): 

class TestC_AIX_Linux2_Win32_Win64_Linux64_Solaris(unittest.TestCase): 

class TestD_All(unittest.TestCase): 

어려운 부분은 "HP/UX가 아닙니다"입니다. 부정 논리를 피하면 삶이 더 쉬워집니다. 이 경우 HP/UX가 아닌 모든 OS를 나열하면됩니다. 목록은 상당히 짧으며 서서히 커집니다.

"모든"테스트는 현재 플랫폼의 테스트 목록과 병합 된 별도의 텍스트 검색으로 완벽한 제품군을 만듭니다.

당신은 당신의 텍스트 매칭 규칙은 일반적으로 "_someOSName"입니다

class TextC_XHPUX(unittest.TestCase): 

같은 것을 시도해 볼 수도 있습니다; 귀하의 예외는 "_X" 이름으로 주위를 어지럽히는 별난 텍스트 필터가 될 것입니다.

"우리는 새로운 운영체제를 추가 할 때마다 명시 적으로 포함하도록 모든 테스트의 이름을 변경해야합니까?" 예. 새로운 운영 체제 시장은 진화 속도가 느려지므로 관리하기가 어렵지 않습니다.

대안은 각 클래스 (즉, 클래스 레벨 기능) 또는 데코레이터 내에 정보를 포함시키고 클래스 레벨 기능을 평가하는 맞춤형 클래스 로더를 사용하는 것이다.

몇 차례에
+0

정확히 어떻게 도움이 될지 모르겠다. AIX, Linux (모두) 및 32 비트 Windows에서 실행되는 테스트 A가 있고 Windows 64, Linux 64 및 Solaris에서 실행되는 테스트 B 및 HPUX를 제외한 모든 시스템에서 실행되는 테스트 C와 모든 시스템에서 실행되는 테스트 D가있는 경우 ... 가능한 명명 규칙은 무엇입니까? – abyx

2

나는 테스트 모듈이 매우 간단한 방법을 사용했다 : 우리는 플랫폼 모듈 등을 사용하여 테스트를 실행해야하는지 여부를 확인하는, 장식과 함께 이동하기로 결정했습니다

import sys 
import unittest 

if 'win' in sys.platform: 
    class TestIt(unittest.TestCase): 
     ... 

if 'linux' in sys.platform: 
    class TestIt(unittest.TestCase): 
     ... 
관련 문제