2010-10-08 21 views
15

Şu anda bir uygulamada birim testi yapmak için PHPUnit ile birlikte Zend Framework kullanıyorum. Hudson, PHPUnit kabuk komutunu çalıştırdığında, kod kapsama oluşturma sırasında bir kerede maksimum PHP bellek limitine ulaşılır. Şu anda 334 iddia ile toplam 41 test var.PHPBu kapsama alanı oluşturma bellek tükenmesine neden oluyor

-d memory_limit=768M anahtarını kullanarak 768M'ye memory_limit ayarını yükselterek bu hatayı başarıyla giderdim; Ancak, karmaşıklık arttıkça, toplam test/iddia sayısı arttıkça, kod kapsamı istatistikleri için HTML üretecek kadar belleğim olmadığından endişeleniyorum.

OS: CentOs 5.5
Kontrol Paneli: WHM/cPanel
CI Sunucusu: Hudson benim değişiklikleri yapılıyor ve Hudson gerisini izin Önce

/usr/local/bin/phpunit 
    --verbose 
    -d memory_limit=512M 
    --log-junit ../../build/logs/phpunit.xml 
    --coverage-clover ../../build/logs/coverage/clover.xml 
    --coverage-html ../../build/logs/coverage-html/ 

Fatal error: Allowed memory size of 536870912 bytes exhausted

, ben geliştirme için Windows 7'yi kullanın. W7'de aynı komut çalıştırılırken bellek kullanımı 340MB'ı aşmadı.

+0

Tüm test durumlarınız bir sınıfta mı? – allnightgrocery

+0

Hayır, testler dört farklı dosya arasında bölünmüştür. Bu testler nispeten basittir, özellikle. planladığımızla karşılaştırıldı. –

+0

:) Çözümünüzü gönderdiğiniz için teşekkür ederiz. Listelediğin problemi yaşadım ve gerçekten hackledim. Her seferinde bir şey ortaya çıkacaktı (bellek 1999'da /pear/phpunit/framework/whatever.php dosyasında bitkin tükendi) 'sudo vi /.../ whatever.php' yazıp' ​​set_ini ("memory_limit") satırına eklerdim ", "1000M") '. Muhtemelen en iyi uygulama değil;) –

cevap

15

Kod kapsamı dahilindeki dosya sayısını azaltarak ve genel bellek sınırını artırarak PHP'de, bu hatayı temel olarak öldürebiliyordum. Tüm Zend Framework, çok geniş olan kod kapsamına dahil edildi.

+0

Bunu kolaylaştırmak için, bunları bir XML yapılandırmasına koydum, ör. " MY_LIBRARY". Bu phpunit.xml adını ve mevcut çalışma dizininizde iseniz, php birimi bunu otomatik olarak uygular. –

+0

Burada iki ilgili bağlantı vardır: [code-kapsama-analiz.including-excluding-files] (http://www.phpunit.de/manual/current/en/code-coverage-analysis.html#code-coverage-analysis .kullanıcı-dışlama-dosyaları) ve [XML yapılandırma dosya kodu kapsamı beyaz liste filtre sözdizimi] (http://www.phpunit.de/manual/current/en/appendixes.configuration.html#appendixes.configuration.blacklist-whitelist) – KajMagnus

+1

Öncelikle phpunit'i testlerin hatasız yürütmeyi durdurduğunu ve "Returned: 255" –

1

Eğer xdebug profilleme etkinleştirilmişse, eğer devre dışı bırakmayı deneyin. Bu sorunu daha önce yaşadım ve php (özellikle xdebug profilleme ve/veya Dahil edilen heirarchy görüntüleyici) uzantılarına geldiler.

+0

Yeni işaretliyim ve bu konuyla ilgilenmeyi umuyordum, ancak profil kapatıldı. Cevabınız için teşekkürler. Başka fikirlerin var mı? –

+0

Kod tabanını bilmeden anlatmak zor. Normalde bir problem olmayan kırmızı bayraklar (örneğin, aşırı derecede __otomatik yükleme, bellekte önbelleğe alma, vb.) Için bir göz atmak istiyorum, ancak çok sayıda örnekleme nedeniyle sınama sırasında sorunlara neden olabilir. Ayrıca, tearDown'dan da faydalanabilirsiniz.) Eğer mümkünse. –

İlgili konular