2011-01-12 60 views
29

Bazı durum değişkenlerini incelemek için test fonksiyonu içinde bazı günlük ifadeleri koymak istiyorum.Py.test testlerinde oturum açma

Aşağıdaki kod parçacığını vardır:

import pytest,os 
import logging 

logging.basicConfig(level=logging.DEBUG) 
mylogger = logging.getLogger() 

############################################################################# 

def setup_module(module): 
    ''' Setup for the entire module ''' 
    mylogger.info('Inside Setup') 
    # Do the actual setup stuff here 
    pass 

def setup_function(func): 
    ''' Setup for test functions ''' 
    if func == test_one: 
     mylogger.info(' Hurray !!') 

def test_one(): 
    ''' Test One ''' 
    mylogger.info('Inside Test 1') 
    #assert 0 == 1 
    pass 

def test_two(): 
    ''' Test Two ''' 
    mylogger.info('Inside Test 2') 
    pass 

if __name__ == '__main__': 
    mylogger.info(' About to start the tests ') 

    pytest.main(args=[os.path.abspath(__file__)]) 

    mylogger.info(' Done executing the tests ') 

aşağıdaki çıktıyı almak: '__name__ == __main__' bloktan sadece günlük mesajları konsola bulaşan olsun

[bmaryada-mbp:/Users/bmaryada/dev/platform/main/proto/tests/tpch $]python minitest.py 
INFO:root: About to start the tests 
======================================================== test session starts ========================================================= 
platform darwin -- Python 2.6.2 -- pytest-2.0.0 
collected 2 items 

minitest.py .. 

====================================================== 2 passed in 0.01 seconds ====================================================== 
INFO:root: Done executing the tests 

Bildirimi.

Test yöntemlerinden de konsolda günlüğe yayan iletmek için pitonu zorlamak için bir yol var mı? Benim için

+2

Py.test'in yaratıcısı tarafından yayınlanan [bu yanıt] 'a (http://stackoverflow.com/a/11877951/148680) bakabilirsiniz. Yüksek derecede çok yönlülük sağlayan bir pytest eklentisi önerir. – chb

cevap

17

İşleri, burada olsun çıkış var: [snip -> örnek yanlış]

Düzenleme: Size o stdout'u yakalamaz yüzden py.test için -s seçeneği geçmek zorunda gibi görünüyor. Burada (py.test yüklenmemiş), python pytest.py -s pyt.py'u kullanmak yeterliydi. Kodunuzdaki için

, tek ihtiyacınız argsmain için -s geçmektir:

pytest.main(args=['-s', os.path.abspath(__file__)]) 

capturing output üzerine py.test belgelerine bakın.

+0

Üzgünüm. Kodu acele ettim. Lütfen 'problemi' görmek için 'test_one' işlevinden 'assert 0 == 1' öğesini kaldırın. Sadece bazı hatalar olduğunda (yanlış bir iddiada bulunarak zorladım), py.test günlüğe kaydetme bilgisini yazdırır. – superselector

+0

Sorun değil, komut satırında nasıl düzeltileceğini öğrendim, programlı bir yol arıyorum. – TryPyPy

+1

Ayrıca, günlük çıktısını varsayılan örtük stderr yerine bir dosyaya yönlendirebilirsiniz. – hpk42