2013-06-08 24 views
15

Tel entegrasyon testi paketi üzerinden Nose kullanmak için bir isteğim var. Ancak, bu testlerin bazılarının yürütme sırası önemlidir.Birim test yürütme sırasını belirtmek için bir Burun eklentisi

dedi ki, ben yürütüldüğünde istiyorum ben sipariş ile bir test süslemek için birlikte hızlı bir eklenti atmak düşündüm: 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 

Düşündüğümden eklentileri inşa gözden geçirme konularını itibaren ben geçersiz kılma sadece could loadTestsFromTestCase ve dekore 'adım numarası' .:

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 

Bu yöntem testleri burun tarafından yürütülmektedir ancak onlar bu sırada idam edilmiyor, ben arzu sırayla testleri dönüyor tarafından testleri sipariş ?

Belki farklı bir konuma sipariş bu kavramı taşımak gerekir?

UPDATE: Yaptığım yoruma göre eklenti aslında beklendiği gibi çalışıyor. Pycharm test muhabirine güvenmem yanlıştı. Testler beklendiği gibi çalışıyor. Anladığım soruyu çözmektense onu bırakacağım. documentation itibaren

+1

Eh, bu soruyu göz ardı edilebilir sanırım eklenti beklendiği gibi çalışıyor ... Ben beyin osuruk vardı. Ancak, testler gerçekte yürütme sırasında beklendiği gibi sipariş ediliyor. – Jesse

+3

Kodunuzu bilmediğimden, ama otomatik test konusundaki tecrübelerime dayanarak, çok fazla bir şey düşünmek istemiyorum, en iyi uzun vadeli çözümün testlerinizi yeniden yapılandırmaya benzer şekilde yeniden yapılandırması olasıdır. Artık birbirlerine bağımlılık yok. Kurulum işlevlerinde veya gerçekten bağımlı olan olayların dizileri için gerekli önkoşulları tekrarlamayı, bunları tek bir sınamada birleştirmeyi düşünebilirsiniz. Ayrıca, bir birim testi olarak, genellikle işlevin ayrı "birimleri" ni test etmeniz ve mümkün olan her yerde harici IO'dan kaçınmanız gerektiğini unutmayın. – GrandOpener

cevap

16

:

[...] burun onlar modül dosyasında göründükleri sıraya fonksiyonel testler düzenler. TestCase'ten türetilen testler ve diğer test sınıfları alfabetik sırayla çalışır.

Yani basit bir çözüm test durumda testleri adlandırmak olabilir: Ben here sağlanan eklentisi PyTest sıralaması kullanma bunun için bir çözüm buldu

class Foo(unittest.TestCase): 

    def test_01_foo(self): 
     pass 

    def test_02_boo(self): 
     pass 
1

.

CLI py.test YourModuleName.py -vv deneyin ve test bunlar modül (ilk test_foo ardından test_bar)

ben aynı şeyi yaptı ve benim için çalışıyor yer almıştır sırayla çalışacaktır.

Not: PyTest paketini yüklemek ve ithal etmek gerekir. Test muhabir farklı şekilde sıralanabilir görmekte olduğu pychamr onu çalıştırırken