2012-08-07 40 views
24

Kısa bir süre önce python sınaması için py.test'e geçtik (fantastik btw). Ancak, günlük çıktısını nasıl kontrol edeceğimi anlamaya çalışıyorum (örn. Yerleşik python günlüğü modülü). Biz pytest-capturelog yüklü ve bu beklendiği gibi çalışır ve biz --nologcapture seçeneği geçebilir günlükleri görmek istediğimizde. Ancak, günlüğe kaydetme düzeyini (örneğin, bilgi, hata ayıklama vb.) Nasıl denetlersiniz ve ayrıca günlüğe kaydetmeyi filtrelersiniz (yalnızca belirli bir modülle ilgileniyorsanız). Bunu elde etmek için pir.test için mevcut eklentiler var mı, yoksa kendimizi mi sarmalıyız?py.test günlüğe kaydetme denetimi

sayesinde Jonny

+0

pytest-capturelog Bu, aşağıdaki yorumların bir dizi belirtilen https://pypi.python.org/pypi/pytest-catchlog/ yerini almış görünüyor, ama başlangıçta bu bilgileri cevapsız ve kullanmayı denedi pytest-capturelog. Bu yorumu bırakarak daha görünür olacağını ve bir sonraki adamı hatayı yapmasını sağladım. – cledoux

cevap

9

Yükleme ve pytest/günlük ihtiyaçlarının en tatmin olabilir pytest-capturelog plugin kullanarak. Bir şey eksikse, onu nispeten kolay bir şekilde uygulayabilmelisiniz.

+0

Sadece pytest 3.0.6 ile bu çalıştı. iyi çalıştı ama çok barks: /pytest_capturelog.py:171 'pytest_runtest_makereport' hook kullanımdan kaldırılmış __multicall__ argümanı WC1 Yok pytest_funcarg__caplog: "pytest_funcarg__" önekini kullanarak fiks bildirme, kullanımdan kaldırıldı ve pytest 4.0'da kaldırılması planlanıyor. Lütfen öneki kaldırın ve bunun yerine @ pytest.fixture dekoratörünü kullanın. ... – mark

+1

Bu sorunu gideren bir çatal var gibi görünüyor: https://pypi.python.org/pypi/pytest-catchlog/ –

8

Holger sen pytest-capturelog kullanabilirsiniz dediği gibi: Eğer günlük yapılandırmasında stdout'u StreamHandler kullanabilirsiniz pytest-capturelog kullanmak istemiyorsanız

def test_foo(caplog): 
    caplog.setLevel(logging.INFO) 
    pass 

yüzden pytest günlük çıkışını yakalayacaktır. İşte bir örnek basicConfig

logging.basicConfig(level=logging.DEBUG, stream=sys.stdout) 
+3

pytest-capturelog göz ardı ediliyor gibi görünüyor ve uyarıları atar. Bu sorunu gideren bir çatal var gibi görünüyor: https://pypi.python.org/pypi/pytest-catchlog/ –

7

geç bir katkının Biraz, ama basit bir damla-in günlüğü yakalama çözümü için pytest-logging tavsiye edebilir. pip install pytest-logging sonra ...

$ py.test -s -v tests/your_test.py 
$ py.test -s -vv tests/your_test.py 
$ py.test -s -vvvv tests/your_test.py 

vs ile NB (ekranda) Günlüklerinizin ayrıntı kontrol edebilirsiniz - -s bayrak önemlidir, bu py.test tüm sys.stderr bilgileri dışarıda bırakır olmadan.

1

daha sonra katkısının Biraz: Eğer pytest-logger deneyebilirsiniz. bu eklentinin Yenilikçi dosya sistemi giriş yapıyorken: pytest testi oturumu kayıt dizinini düzenlemek için kullanılabilecek her test öğesi için nodeID sağlar (pytest TMPDIR tesis yardımı ile ve/bitiş kancaları başlamak dizge var).

Sen terminal ve dosya sistemi için (düzeyleriyle) birden fazla işleyici ayrı ayrı yapılandırmak ve bunların belirli bir test ortamı için çalışmasını sağlamak için kaydedicileri/seviyelerini filtrelemek için kendi komut_satırı seçenekleri sağlayabiliriz - örneğin varsayılan olarak, dosya sistemi ve küçük kesirleri terminallere kaydedebilirsiniz; bu, gerektiğinde oturum başına --log seçeneği ile değiştirilebilir. Kullanıcı hiçbir kanca tanımlamazsa, eklenti varsayılan olarak hiçbir şey yapmaz.

İlgili konular