2011-12-13 20 views
5

Çeşitli argümanları alabilen bir sürücü komut dosyasıyla birlikte çalıştırılan birkaç test modülüne sahibim. Testler python unittest modülü kullanılarak yazılır.Python betiği argümanlarını test modüllerine geçirme

import optparse 
import unittest 
import sys 
import os 

from tests import testvalidator 
from tests import testmodifier 
from tests import testimporter 

#modify the path so that the test modules under /tests have access to the project root 
sys.path.insert(0, os.path.dirname(__file__)) 

def run(verbosity): 
    if verbosity == "0": 
      sys.stdout = open(os.devnull, 'w') 

    test_suite = unittest.TestSuite() 
    test_suite.addTest(unittest.TestLoader().loadTestsFromTestCase(testvalidator.TestValidator)) 
    test_suite.addTest(unittest.TestLoader().loadTestsFromTestCase(testmodifier.TestModifier)) 
    test_suite.addTest(unittest.TestLoader().loadTestsFromTestCase(testimporter.TestDataImporter)) 

    unittest.TextTestRunner(verbosity=int(verbosity)).run(test_suite) 

if __name__ == "__main__": 

    #a simple way to control output verbosity 
    parser = optparse.OptionParser() 
    parser.add_option("--verbosity", "--verbosity", dest="verbosity", default="0") 
    (options, args) = parser.parse_args() 

    run(options.verbosity) 

Sorunum Bu test modülleri içinde, ben sürücüye geçirilen farklı parametrelere dayalı atlamak istediğiniz belirli testler var, yani. Unittest'in bunu yapmak için bir dekoratörler ailesi sağladığının farkındayım, ancak bu bilgiyi bireysel modüllere iletmenin en iyi yolunu bilmiyorum. Örneğin, bir --skip-slow argümanım olsaydı, daha sonra nasıl testlere yavaşça not ekleyebilir ve atlandırabilirler?

Zaman ayırdığınız için teşekkür ederiz.

+0

Kullanabileceğiniz bir çözüm bulmuş olabilir. Cevabımı kontrol et. –

cevap

2

Aslında bunu kendim merak ediyordum ve sonunda çözümü buldum.

from __main__ import args 

print args 

bunu dışarı test, ve o güzel yerine çalıştı:

... 
if __name__ == '__main__': 
    args = argparser() 

    from tests import * 

    ... 

Ve test modüllerde

ana dosya ..., sadece yap. Güzel olan, ne kadar basit, ve çok fazla bir kesmek değil.

1

nose test tepsisini, özniteliklere göre sınama durumlarını seçmenizi sağlayan attrib eklentisiyle kullanabilirsiniz. Özellikle, eklenti belgesindeki örnek, yavaş test durumlarını işaretlemek için @attr(slow) kullanır. Komut satırından Bundan sonra

:

$ nosetests -a slow

  • değil slow olarak işaretlenen tüm test durumları seçmek için:

    • tüm test durumları seçmek için slow olarak işaretlenen:

      $ nosetests -a '!slow'

  • +0

    Belki de kendimi burun ile tanıştırmam gerekiyor, çünkü bu durumun en iyi şekilde görünmeyebilir. Umudumu tutuyordum, bağımlılık eklemek zorunda kalmam. – zchtodd

    +1

    'unittest.skipIf'/'unittest.skipUnless' ve atlama çözücülerinin kontrol ettiği koşulda kullanılan bazı ortam değişkenlerine dayanarak' attr 'dekoratörünüzü kendiniz oluşturabilirsiniz, ancak bu tür Zaten kutudan çıkan bir şey var. – jcollado

    İlgili konular