2010-10-08 12 views
15

Obecnie używam Zend Framework w połączeniu z PHPUnit do przeprowadzania testów jednostkowych w aplikacji. Kiedy Hudson wykonuje polecenie powłoki PHPUnit, maksymalny limit pamięci PHP jest osiągany podczas generowania pokrycia kodu. Obecnie mam w sumie 41 testów z 334 twierdzeniami.Generowanie pokrycia kodu PHPUnit powodującego wyczerpanie pamięci

Udało mi się wyeliminować ten błąd, podnosząc ustawienie memory_limit do 768M przy użyciu przełącznika -d memory_limit=768M; obawiam się jednak, że wraz ze wzrostem złożoności oraz całkowitą liczbą testów/stwierdzeń, nie będę miał wystarczającej ilości pamięci do wygenerowania kodu HTML dla statystyk zasięgu kodu.

OS: CentOS 5.5
Panel sterowania: WHM/cPanel
CI Server: Hudson

/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

Przed podjęciem moje zmiany i pozwalając Hudson zajmiemy się resztą, ja korzystaj z Windows 7 do programowania. Wykorzystanie pamięci nigdy nie przekroczyło 340 MB podczas uruchamiania tego samego polecenia w W7.

+0

Czy wszystkie twoje przypadki testowe należą do jednej klasy? – allnightgrocery

+0

Nie, testy są podzielone na cztery różne pliki. Te testy są stosunkowo proste, szczególnie. w porównaniu z tym, co zaplanowaliśmy. –

+0

:) dziękuję za opublikowanie rozwiązania. Mam problem, który wymieniłeś i naprawdę go hackowałeś. Za każdym razem, gdy coś się pojawi (pamięć wyczerpana w /pear/phpunit/framework/whatever.php na linii 1999), wpisuję 'sudo vi /.../ whatever.php' i dodaję wiersz' set_ini ("memory_limit "," 1000M ")'. Prawdopodobnie nie najlepsza praktyka;) –

Odpowiedz

15

ZmniejszajĘ ... c liczbę plików zawartych w pokryciu kodu, jak również zwię kszajĘ ... c limit pamię ci w PHP mogłem w zasadzie zabić ten błąd. Cały zakres Zend Framework był objęty zakresem kodu, który jest bardzo duży.

+0

Aby to ułatwić, umieściłem te rzeczy w konfiguracji XML, np. " MY_LIBRARY". Jeśli nazwiesz ten plik phpunit.xml i znajduje się on w twoim bieżącym katalogu roboczym, jednostka php zastosuje to automatycznie. –

+0

Oto dwa odnośniki: [code-coverage-analysis.including-exclusion-files] (http://www.phpunit.de/manual/current/en/code-coverage-analysis.html#code-coverage-analysis .include-except-files) oraz [białą składnię filtrów białek listy plików konfiguracyjnych XML] (http://www.phpunit.de/manual/current/en/appendixes.configuration.html#appendixes.configuration.blacklist-whitelist) – KajMagnus

+1

Ważne jest, aby pamiętać, że początkowo możesz zobaczyć, że phpunit przestaje wykonywać testy bez błędu i pokazuje "Returned: 255" –

1

Czy masz włączone profilowanie xdebug, jeśli tak, spróbuj go wyłączyć. Napotkaliś my ten problem już przedtem, a sprowadzono go do rozszerzeń w php (w szczególnoś ci profilowania xdebug i/lub Incubed heirarchy viewer)

+0

Właśnie sprawdziłem i miałem nadzieję, że to jest problem, ale profilowanie jest wyłączone. Dzięki za twoją odpowiedź. Jakieś inne pomysły? –

+0

Trudno powiedzieć, nie znając kodu. Po prostu miej oko na czerwone flagi (np. Wyczerpujące __auto, cachowanie w pamięci itd.), Które normalnie nie stanowią problemu, ale mogą powodować problemy podczas testowania z powodu dużej liczby instancji itp. Korzystaj również z tearDown () Jeśli to możliwe. –