2013-09-01 16 views
15

Yani, ben sadece py.test benim autouse, oturum kapsamlı kurulum ve söküm armatürleri gibi çalışmıyor nedenini bulmak için çalışan bir gün kaybetti. Sonunda (this SO comment için şapka ucu!) üzerinden tökezledi plugins documentation yılında bu küçük çerez: alet başlangıçta yüklenen varsayılan olarak, alt dizinleri dosyaları conftest.pyBir alt dizinde conftest.py tanımak için py.test nasıl edinilir?

Not. Projemde

, oldukça standart kurulum gibi görünüyor tests/ alt dizininde, benim py.test dosyaları (conftest.py ve testler dosyaları) aldık. Testler dizininde py.test çalıştırırsam her şey doğru şekilde çalışır. Proje kök dizininde py.test çalıştırırsam, sınamalar hala çalışır, ancak kurulum/yıpranma yordamları hiçbir zaman yürütülmez.

Sorular:

  • doğru proje kök dir gelen testler olanak sağlamak için "kanonik" yolu nedir

    ? Kök dizinde conftest.py koymak bana garip geliyor, çünkü tüm sınama ile ilgili dosyaların tests alt dizininde kalması gerektiğini hissediyorum.
  • Neden (tasarım bakımından) alt dizinlerinde değil conftest.py 'ın varsayılan olarak yüklenmez? Alt dizinlerdeki testlerinin varsayılan olarak keşfedildiğini düşünürsek, bu davranışı en azını söylemeye meraklı buluyorum, bu yüzden de en küçük dosyaları bulma konusunda çok az ek çaba var gibi görünüyor.
  • Son olarak, nasıl alt dizinleri yükte conftest.py (yani uzak varsayılan değiştirme) sahip olabilir? Bunu dokümanlar içinde bulamadım. Mümkünse ek konsol argümanlarından kaçınmak isterim, bu yüzden bir yapılandırma dosyasına veya notaya bir şey koyabilir miyim?

Herhangi bir fikir ve ipuçları çok takdir ediliyor, projem için yazım testleri yapabildiğimde bunu teşhis etmek için çok fazla zaman kaybettiğimi/kaybettiğimi hissediyorum. :-(

az örnek:

# content of tests/conftest.py 
# adapted from http://pytest.org/latest/example/special.html 
import pytest 
def tear_down(): 
    print "\nTEARDOWN after all tests" 

@pytest.fixture(scope="session", autouse=True) 
def set_up(request): 
    print "\nSETUP before all tests" 
    request.addfinalizer(tear_down) 

Test dosyası:

# content of tests/test_module.py 
class TestClassA: 
    def test_1(self): 
     print "test A1 called" 
    def test_2(self): 
     print "test A2 called" 

class TestClassB: 
    def test_1(self): 
     print "test B1 called" 

Konsol çıkışı: #pylib IRC kanalında bir yardım sonra

pytest_experiment$ py.test -s 
======================================================== test session starts ========================================================= 
platform linux2 -- Python 2.7.4 -- pytest-2.3.2 
plugins: cov 
collected 3 items 

tests/test_module.py test A1 called 
.test A2 called 
.test B1 called 
. 

====================================================== 3 passed in 0.02 seconds ====================================================== 
pytest_experiment$ cd tests/ 
pytest_experiment/tests$ py.test -s 
======================================================== test session starts ========================================================= 
platform linux2 -- Python 2.7.4 -- pytest-2.3.2 
plugins: cov 
collected 3 items 

test_module.py 
SETUP before all tests 
test A1 called 
.test A2 called 
.test B1 called 
. 
TEARDOWN after all tests 


====================================================== 3 passed in 0.02 seconds ====================================================== 
+0

Benim için iyi çalışıyor. http://ascii.io/a/5263 – falsetru

+0

evet, bu arada bunun zaten sabit bir hata olduğunu öğrendim. – Christoph

cevap

9

, bu çıkıyor Bu, py.test 2.3.4 numaralı telefonla giderilen bir hata oldu.

+1

Bu benim için çalışmıyor. Testlerde '' conftest.py' var, ancak hiçbir etkisi yok. – orome

+0

@raxacoricofallapatorius muhtemelen en iyi pitesteye karşı bir hatayı rapor etmek için en iyi: https://github.com/pytest-dev/pytest/issues – Christoph

+0

Aslında benim durumumda biraz farklı. Paket/projemin kökünde test/'yerine, paketimde (yalnız) modülün klasöründe var. Orada olmamalı mı? Anlayışım, her modülün kendi 'test /' klasörüne sahip olabileceğiydi (ve bu klasörlere yerleştirilmiş testler çalıştırılabilir). Durum böyle değil. Bir test/'klasörüne sahip olmalıyım (ya da benim anlaşmazlığım).py') paketimin kökünde? – orome