2016-04-09 31 views
9

Coverage.py modülünü kullanmaya başladım ve nasıl çalıştığını kontrol etmek için basit bir test yapmaya karar verdim.Python'da coverage.py'yi düzgün şekilde nasıl kullanabilirim?

Sample.py

def sum(num1, num2): 
    return num1 + num2 


def sum_only_positive(num1, num2): 
    if num1 > 0 and num2 > 0: 
     return num1 + num2 
    else: 
     return None 

test.py

from sample import sum, sum_only_positive 

def test_sum(): 
    assert sum(5, 5) == 10 

def test_sum_positive_ok(): 
    assert sum_only_positive(2, 2) == 4 

def test_sum_positive_fail(): 
    assert sum_only_positive(-1, 2) is None 

Gördüğünüz gibi, bütün kod testler ve py.test kaplıdır hepsini geçmek söylüyor. Coverage.py'nin% 100 kapsam göstermesini bekliyorum. Peki hayır.

Coverage.py results

Eh, Coverage.py test.py dosyayı göremeyebilirsiniz, bu yüzden sample.py dosyaya Test fonksiyonları kopyalanıp tekrar Kapsama ran:
Sonra enter image description here

kod bloğunu ekledi: Tüm test işlevlerini kaldırılmış ve kaldırılmıştır. Neden bu kadar

enter image description here

geçerli: Bundan sonra, Coverage.py% 100 gösteriyor? Coverage.py, kod yürütme kapsamını değil, yalnızca yürütme kapsamını göstermeli mi? Coverage.py için bir resmi F.A.Q. okudum, ancak çözümü bulamıyorum.
Pek çok SO kullanıcısı kod testi ve kod kapsamını bildiğinden, umarım nerede olduğunu söyleyebilirim.

Burada sadece bir düşüncem var: Coverage.py yalnızca hangi kod satırlarının yürütülmediğini izleyebilir, bu nedenle bu satırlar için sınamalar yazmalıyım. Ancak, daha önce yürütülen ancak testlerle ele alınmayan satırlar var. Bu nedenle Coverage.py burada başarısız olacaktır.

+0

Kapsama/pytest'i nasıl çağırıyorsunuz? –

+0

@Rogalski pytest: 'python -m py.test test.py' ve kapsam:' python -m kapsama koşusu sample.py' (Windows'ta) – Groosha

cevap

7

Kapsama görünüyor. Py.test kendi başına bir tane oluşturmaz. Sen kapsama py.test eklentisi gerekir: Zaten varsa

pip install pytest-cov 

, o zaman böyle bir kerede hem çalıştırabilirsiniz: koşma testi modülü test.py ve kayıt/ekran kapsama anlamına

py.test test.py --cov=sample.py 

sample.py hakkında rapor.Birden fazla test çalışır ve onların kaydedilen kapsama birikir ve daha sonra bir nihai raporu göstermek gerekirse

, böyle çalıştırabilirsiniz: Test modülü test.py ve kayıt (yalnızca) kapsama çalıştırmak demektir

py.test test.py --cov=sample.py --cov-report= 
py.test test.py --cov=sample2.py --cov-report= 
py.test test.py --cov=sample3.py --cov-report= 

sample.py numaralı telefondan - bir rapor gösterme.

Şimdi tam rapor için ayrı ayrı kapsama komutu çalıştırabilirsiniz:

coverage report -m 

Yukarıdaki komut sadece önceki test çalışır biriken .coverage veri dosyasına göre biçimlendirilmiş bir kapsama rapor görüntüler.

Name  Stmts Miss Cover Missing 
----------------------------------------- 
sample.py  6  0 100% 

Kapsama/include yolu kalıplarını kullanarak dosyaları dışlamak için --include ve --omit gibi daha anahtarlarını destekler: -m çizgili değil testler kapsamında yani çizgileri cevapsız anlamına gelir. Daha fazla bilgi için kendi dokümanlarına bakın: http://coverage.readthedocs.org/en/coverage-4.0.3/cmd.html#reporting

+0

Çalıştığını biliyorum .. – Groosha

+0

İncelenecek dosya testte içe aktarılan bir pakette bir alt modül ise işe yaramaz. -cov = <> '- sadece dosya adı, relativ e veya mutlak yol - "HATA: Rapor oluşturulamadı: Raporlanacak veri yok." –

+0

Tam olarak nitelenmiş modül adı belirtildi. –

6

Denemelerinizi ayrıştırmak biraz zor ve her denemede kullandığınız komut satırlarını dahil etmediniz. Eğer testler çalıştırırsanız: Ama

python -m py.test test.py 

sonra da birlikte coverage.py altında çalıştırabilirsiniz: Bir .coverage dosya okumak ve sizin için bu raporu oluşturmak için

coverage run -m py.test test.py 
+0

Bu arada, testleri ve kapsamı çalıştırmak için kullanılan komutları dahil ettik Benim yazı altında ikinci yorum: pytest: 'python -m py.test test.py' ve kapsamı:' python -m kapsama koşmak sample.py' (Windows). İkinci komutunun benimkilerden farklı olduğunu görüyorum, kontrol edeceğim, teşekkürler! – Groosha

+1

Belki de burada sorun basit bir yanlış anlaşılmadır: testleri ve kapsama alanını çalıştırmamanız gerekir. Testlerinizi yürütmek için kapsama kullanmanız (önerdiğim şekilde) veya testlerin çalışması sırasında kapsama alanını kullanmanız gerekir (örneğin test koşucu kapsama eklentisi ile). –

+0

Benim için çalışmıyor :('kapsama alanı -m' ->' Böyle bir seçenek yok -m'. 'Kapsama alanı py.test test.py' ->' Bilinmeyen komut py.test' (py.test yüklenir) – Groosha

İlgili konular