2011-08-13 14 views
18

Bunun cevabını bilmeli, ama yok: Eğer böyle bir Django projesinin kapsamını ölçmek çalışırsanız:Neden yayınlama.py Django'nun runserver komutunu doğru şekilde ölçmez?

coverage run manage.py runserver 

Eğer gerçek tüm kodu özlüyor kapsama ölçümü olsun. Süreçte erken bir şey ölçümü durdurmakta ya da tüm gerçek iş, hiç ölçülmeyen yeni bir bağlamda gerçekleşmektedir.

Birisi, ölçümün bozulduğu süreçteki belirli bir noktaya işaret edebilir. Böylece, kapsamlı bir şekilde insanların beklediği şekilde ölçecek şekilde cover.py'yi düzeltmeye çalışabilirim.

+0

cevabımı güncelleme: Aşağıdaki ekstresi ile gösterildiği gibi --noreload ile benim çok kısa testte, benim bakış kod kapsama aldık. –

cevap

22

Aşağıdaki gibi çalıştırırsanız aynı sorunu alır mısınız? --noreload olmadan

coverage run manage.py runserver --noreload 

, başka süreç perde arkasında başlatılır. Bir işlem sunucuyu çalıştırır, diğeri kod değişikliklerini arar ve değişiklik yapıldığında sunucuyu yeniden başlatır. Şansınız, kapsama alanından ziyade izleme süreci üzerinde kapsama alanı yapıyorsunuz.

django/core/management/commands/runserver.py ve django/utils/autoreload.py'a bakın.

Güncelleme

: Sonra, kapsama komutu ran neler olduğunu bakmak için ps ve lsof kullandı.

ps output: 

UID  PID PPID C STIME TTY   TIME CMD 

vinay 12081 2098 0 16:37 pts/0 00:00:00 /home/vinay/.virtualenvs/watfest/bin/python /home/vinay/.virtualenvs/watfest/bin/coverage run manage.py runserver 
vinay 12082 12081 2 16:37 pts/0 00:00:01 /home/vinay/.virtualenvs/watfest/bin/python manage.py runserver 

lsof output: 

python 12082  vinay 5u  IPv4  48294  0t0  TCP localhost:8000 (LISTEN) 

IOW, hatta herhangi bir yüklemeden önce iki süreç vardır ve TCP bağlantı noktasında dinleme bir kapsama üzerinde çalıştığı biri değil: İşte gözlenen budur.

Burada --noreload göremediğimiz ne: kapsama --noreload durumda işe yaramaz neden

ps output: 

UID  PID PPID C STIME TTY   TIME CMD 

vinay 12140 2098 5 16:44 pts/0 00:00:00 /home/vinay/.virtualenvs/watfest/bin/python /home/vinay/.virtualenvs/watfest/bin/coverage run manage.py runserver --noreload 

lsof output: 

coverage 12140  vinay 4u  IPv4  51995  0t0  TCP localhost:8000 (LISTEN) 

Yani belli değil.

festival/__init__ 8  7 13% 
manage    9  4 56% 
settings   33  1 97% 
+0

Evet, şu sorudan bahsetmeyi unuttum: --noreload sorunu değiştirmiyor. Ve kesinlikle konuşmak gerekirse, otomatik yükleme, yeniden yüklenene kadar yeni bir süreç başlatmaz: ilk başta, dosyaların değişmesi için izlenen başka bir iş parçacığıdır ve eğer yaparlarsa, başka bir süreç ortaya çıkarır (bence). –

+0

Ayrıntılar için teşekkürler, autoreload aklımda her zaman bulanık oldu ve nasıl çalıştığını gösterdiniz. Bazı nedenlerden dolayı, daha önce yaptığım testler, --noreload'ın yardım etmediğini gösterdi, ama şimdi tekrar denedim, işe yarıyor! –

+0

çok güzel! dış entegrasyon testleri kapsamını çalıştırmak için harika. – stantonk

İlgili konular