2013-06-08 20 views
15

Mam chęć używać Nosa do zestawu testów integracyjnych. Jednak kolejność wykonywania niektórych z tych testów jest ważna.Wtyczka "Nos" określająca kolejność wykonywania testów jednostkowych

To powiedziawszy, myślałem, że chciałbym wrzucić razem szybki wtyczkę do dekoracji test z rzędu chcę wykonywany: https://gist.github.com/Redsz/5736166

def Foo(unittest.TestCase): 

    @step(number=1) 
    def test_foo(self): 
     pass 

    @step(number=2) 
    def test_boo(self): 
     pass 

od kontroli wbudowanej wtyczki myślałem, mogłem po prostu przesłanianie loadTestsFromTestCase i zamówić testy autorem zdobionej „numer kroku” .:

def loadTestsFromTestCase(self, cls): 
    """ 
    Return tests in this test case class. Ordered by the step definitions. 
    """ 
    l = loader.TestLoader() 
    tmp = l.loadTestsFromTestCase(cls) 

    test_order = [] 
    for test in tmp._tests: 
     order = test.test._testMethodName 
     func = getattr(cls, test.test._testMethodName) 
     if hasattr(func, 'number'): 
      order = getattr(func, 'number') 
     test_order.append((test, order)) 
    test_order.sort(key=lambda tup: tup[1]) 
    tmp._tests = (t[0] for t in test_order) 
    return tmp 

Ta metoda jest zwrócenie testy w kolejności pragnę jednak, gdy badania są wykonywane przez nos nie są one realizowane w tej kolejności ?

Być może muszę przenieść tę koncepcję zamawiania w inne miejsce?

UPDATE: Zgodnie z komentarzem, który zrobiłem, wtyczka działa właściwie zgodnie z oczekiwaniami. Myliłem się, aby zaufać reporterowi testu pycharm. Testy działają zgodnie z oczekiwaniami. Zamiast usunąć pytanie, doszedłem do wniosku, że zostawię to.

+1

Cóż, myślę, że to pytanie może być zignorowane, wtyczka działa zgodnie z oczekiwaniami ... Miałem pierdnięcie w mózgu podczas uruchamiania go z pychamr, gdzie testowy reporter był zamawiany inaczej. Jednak testy są faktycznie zamawiane zgodnie z oczekiwaniami podczas wykonywania. – Jesse

+3

Nie chcę zakładać zbyt wiele, ponieważ nie znam twojej bazy kodu, ale na podstawie mojego doświadczenia z testami automatycznymi jest bardzo prawdopodobne, że najlepszym długoterminowym rozwiązaniem jest ponowne zaprojektowanie testów w taki sposób, aby nie mają już wzajemnych zależności. Możesz rozważyć powtórzenie niezbędnych warunków wstępnych w funkcjach konfiguracyjnych lub sekwencjach zdarzeń, które naprawdę są zależne, łącząc je w jeden test. Należy również pamiętać, że jako test jednostkowy powinieneś ogólnie testować poszczególne "jednostki" funkcjonalności i unikać zewnętrznych IO, gdy tylko jest to możliwe. – GrandOpener

Odpowiedz

16

Z documentation:

[...] nos przeprowadza testy funkcjonalne w kolejności, w jakiej występują w pliku modułu. Testy pochodne TestCase i inne klasy testowe są uruchamiane w kolejności alfabetycznej.

Tak proste rozwiązanie może być zmiana nazwy testów w przypadku testu:

class Foo(unittest.TestCase): 

    def test_01_foo(self): 
     pass 

    def test_02_boo(self): 
     pass 
1

znalazłem rozwiązanie dla niego za pomocą PyTest zamawiania wtyczki pod warunkiem here.

Spróbuj py.test YourModuleName.py -vv w CLI i testy będą uruchamiane w kolejności, w jakiej pojawiały się w module (pierwszy test_foo a następnie test_bar)

zrobiłem to samo i działa dobrze dla mnie.

Uwaga: Należy zainstalować pakiet PyTest i zaimportować go.

Powiązane problemy