2009-03-05 20 views
7

Django uygulamam için birim sınamaları geliştirirken, kendimi manage.py sınamasını tekrar tekrar ve tekrar çalıştırmakta buluyorum. Bir MySQL backend kullanıyorum ve projede birçok model var, bu yüzden tüm test veritabanlarını oluşturmak için rampa süresi yaklaşık 30 saniyedir.Django birim sınamalarını (manage.py) daha hızlı bir şekilde nasıl çalıştırabilirim?

Veritabanı tablolarını oluştururken ve "manage.py test" komutunun çalışma aralarındaki tüm kayıtları temizleyerek her birim testini daha hızlı nasıl kullanabilirim?

cevap

7

Not Her zaman tüm test paketini çalıştırmak zorunda değilsiniz. manage.py test appname'u (veya manage.py test app1 app2 ... ile aynı anda birden çok uygulama için) çalıştırarak tek bir uygulama için test paketini çalıştırabilirsiniz.

Her zamanki iş akışım, çalışmakta olduğum sırada üzerinde çalıştığım uygulamanın testlerini çalıştırmak ve bir sonraki değişiklik kümemi imzalamadan önce tam paketi çalıştırma.

+0

Yine de, her modül için INSTALLED_APPS'deki veritabanını oluşturur, bu da zamanın çoğunu gerektirir. – Bryce

1

MySQL veritabanım için bir ram-disk kullanıyorum, hızlı bir şekilde tanımlamıyor, sadece üzerinde çalıştığınız belirli uygulamada belirli testi test ederek test süresini önemli ölçüde azaltabiliyor. Veritabanınız için ramdisk'in oluşturulmasını otomatikleştirecek bazı betikler var, iş arkadaşlarımdan birinin pişirildiği mysql-ramdisk.py'u kullanıyorum, bu sürüm Mac OS X için. Ayrıca Linux here için bir versiyon var. Her şeyi django dev için ayarlamak için yaklaşık 30 saniye sürüyor ve testlerim bazen varsayılan test veritabanının oluşturulması da dahil olmak üzere beş saniyenin altında çalışıyor. ;)

0

Bu iş parçacığı makalede yayınlanan: How do I run a unit test against the production database?, Ben üretim db (yerel dev makinemde "manage.py kabuk" aracılığıyla) veya normal django "yönetmek için karşı çalıştırabilirsiniz bir test paketi oluşturun. "Test" testi paketi. Hızlı akıl kontrolünü yapmak ve geliştirme sırasında zaman geçerliliğini sağlamak için benim için gerçek bir zaman tasarrufu oldu. Her iki durumda da aynı db'ye (MySQL) karşı koşuyorum ve testlerimde django ORM alıyorum.

İlgili konular