SORU
7 EYLÜL 2010, Salı


Büyük bir Rails uygulamasında RSpec testlerini hızlandırmak

RSpec benim testlerde 2000'in üzerinde örnekler ile Raylar bir uygulama var. Söylemeye gerek yok, büyük bir uygulama ve test edilecek bir sürü şey var. Bu noktada bu testleri çok verimsiz ve çok uzun sürer, çünkü, neredeyse yeni bir yapı itmeden önce bunları yazma cesaretini olma noktasına geldik. Benim spec-profil ekledim.seçmesi en uzun soluklu örnekler bulmak ve ortalama 10 saniyede koşmak için en az 10 tanesi var. Bu uzmanlar arasında RSpec normal mi? 10 saniye çok uzun bir örneğin? 2,000 örneklerle, zaman önemsiz bir miktar, her şeyi iyice test alacak farkındayım ama bu noktada 4 saat biraz gülünç.

Ne tür bir zamanların en uzun çalışan örnekler için görüşüyor musun? Ben sorunları çözmeye ve işleri hızlandırmaya yardımcı olmak için mevcut benim görüşler gidermek için ne yapabilirim. Her dakika çok bu noktada yardımcı olacaktır.

CEVAP
23 ŞUBAT 2011, ÇARŞAMBA


10 saniye çalıştırmak için tek bir test için çok uzun bir süre. Benim hislerime spec hedefin aynı anda her iki birim ve entegrasyon testleri çalıştıran. Bu proje birkaç aşamada içine düşüyorsunuz bu tipik bir şeydirbu teknik borç aşmak gerekireğer daha fazla üretmek istiyorsanız, daha hızlı. Size bu konuda yardımcı olabilir hangi stratejileri vardır... ve geçmişte kullandığım bir kaç önerim olacak.

1. Entegrasyon Testleri Ayrı Birim

İlk yapacağım şey bütünleşme testi birim ayırmaktır. Ya da: bunu yapabilirsiniz

  1. Onları (spec dizininde ayrı bir klasör içine) taşıma ve komisyon değiştirmeyi hedefliyor
  2. Onları (rspec testlerinizi etiketi sağlar) etiketleme

Felsefe senin normal oluşturur hızlı olmak istediğini, aksi takdirde insanlar sık sık onları çalıştırmak için çok mutlu olmayacak. Böylece toprakları geri almak. Düzenli testler hızlı çalıştırmak ve sürekli entegrasyon sunucu daha tam inşa çalıştırmak için kullanılır.

Entegrasyon testi dış bağımlılıklar (örneğin, Veritabanı, Java eklentisi, Sıra ve bazı Dosya sistemi iddia ediyorum) içeren bir testtir. Birim testi sadece kontrol istediğiniz kod belirli madde testleri. Hızlı çalışmalıdır (9000 45 saniye mümkün değildir), yani en hafızasında çalıştırmak gerekir.

2. Birim Testler Entegrasyon Testleri Dönüştürmek

Eğer birim testleri toplu entegrasyon, test takımı daha küçük ise, bir sorun var. Bu ne demek tutarsızlıkları daha kolay görünmeye başlar. Buradan, entegrasyon testleri yerine daha fazla birim testleri oluşturma başlayın. Bu süreçte yardımcı olmak için yapabileceğiniz şeyler vardır:

  1. Gerçek kaynak yerine alaycı bir çerçeve kullanın. Rspec dahili alaycı bir çerçevesi vardır.
  2. Birim test suite rcov çalıştırın. Bu kadar kapsamlı birim test suite ölçmek için kullanın.

Entegrasyon testi yerine - bütünleşme testi kaldırmak için uygun bir birim test(ler) var bir kere. Test sadece kötü bakım yapar yinelenen.

3. Fikstür kullanmayın

Fikstür kötü. Bir fabrika yerine (makinist) factory_girl kullanın. Bu sistemler verilerin daha uyarlanabilir grafikler oluşturabilirsiniz, ve daha da önemlisi, bellek içi kullanabileceğiniz nesneleri oluşturmak yerine, bir dış veri kaynağından şeyler yükleyebilir.

4. Çekler Birim Testler Entegrasyon Testleri Olma Durdurmak İçin Ekleyin

Yerine daha hızlı test var şimdi, koymak için zaman tekrar meydana gelen bu DURDURMAK için kontrol eder.

Veritabanına erişmek için çalışırken bir hata atmak için (UnitRecord) hangi kütüphaneler var.

Ayrıca takımın daha hızlı testleri yazmak için zorlamak yardımcı olabilir: eşleştirme ve TDD deneyebilirsiniz

  1. Birisi kimse tembel oluyor kontrol
  2. Uygun TDD hızlı geri bildirim gerektirir. Yavaş test, her şey acı.

5. Diğer Kütüphaneler Bu Sorunun Üstesinden Gelmek İçin Kullanın

Biri kaşık bahsedilen hızlandırır rails3 altında test paketi için kat yük), paralel (çoklu çekirdek üzerinde), birim testleri çalıştırmak için/parallel_tests - hydra.

Belki de bu SON kullanılmalıdır. Gerçek sorun, adım adım bütün yolu 1, 2, 3. Ve daha iyi bir pozisyonda işe ek altyapı rolü olacağını çözmek.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ★TheCrono Official Channel★

    ★TheCrono

    3 Mayıs 2014
  • BuzzFeedVideo

    BuzzFeedVide

    10 AĞUSTOS 2011
  • max2sims2

    max2sims2

    19 Kasım 2008