2010-10-08 27 views
15

Tôi hiện đang sử dụng Zend Framework cùng với PHPUnit để tiến hành kiểm tra đơn vị trên một ứng dụng. Khi Hudson thực thi lệnh shell PHPUnit, giới hạn bộ nhớ PHP tối đa đạt được đôi khi trong quá trình tạo mã vùng. Tôi hiện có tổng cộng 41 bài kiểm tra với 334 xác nhận.Tạo mã vùng PHPUnit gây ra tình trạng cạn kiệt bộ nhớ

Tôi đã loại bỏ thành công lỗi này bằng cách tăng cài đặt memory_limit lên 768M bằng cách sử dụng công tắc -d memory_limit=768M; tuy nhiên, tôi lo rằng khi độ phức tạp tăng cùng với tổng số kiểm tra/xác nhận, tôi sẽ không có đủ bộ nhớ để tạo HTML cho các thống kê về mức độ phù hợp của mã.

OS: CentOS 5,5
Control Panel: 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

Trước khi cam kết thay đổi của tôi và để Hudson xử lý phần còn lại, tôi sử dụng Windows 7 để phát triển. Việc sử dụng bộ nhớ không bao giờ vượt quá 340MB trong khi chạy cùng một lệnh trong W7.

+0

Có phải tất cả các trường hợp kiểm tra của bạn trong một lớp học không? – allnightgrocery

+0

Không, các bài kiểm tra được chia giữa bốn tệp khác nhau. Các xét nghiệm này tương đối đơn giản, đặc biệt. so với những gì chúng tôi đã lên kế hoạch. –

+0

:) cảm ơn bạn đã đăng giải pháp của mình. Tôi đã gặp vấn đề bạn liệt kê và đã thực sự hack vào nó. Mỗi khi một cái gì đó sẽ xuất hiện (bộ nhớ đã cạn kiệt trong /pear/phpunit/framework/whatever.php trên dòng 1999), tôi gõ 'sudo vi /.../ whatever.php' và thêm vào một dòng' set_ini ("memory_limit "," 1000M ")'. Có lẽ không phải là thực hành tốt nhất;) –

Trả lời

15

Bằng cách giảm số lượng tệp trong phạm vi mã, cũng như tăng giới hạn bộ nhớ tổng thể trong PHP, tôi đã có thể về cơ bản giết lỗi này. Toàn bộ khung công tác Zend đã được đưa vào trong phạm vi mã, điều này rất lớn.

+0

Để làm điều này dễ dàng, tôi đặt công cụ này trong cấu hình XML, ví dụ: " MY_LIBRARY". Nếu bạn đặt tên cho tệp phpunit.xml này và nó nằm trong thư mục làm việc hiện tại của bạn, đơn vị php sẽ tự động áp dụng điều này. –

+0

Dưới đây là hai liên kết có liên quan: [mã-bảo hiểm-phân tích. Bao gồm-loại trừ-tệp] (http://www.phpunit.de/manual/current/en/code-coverage-analysis.html#code-coverage-analysis .including-excluding-files) và [cú pháp bộ lọc danh sách trắng của tệp cấu hình XML] (http://www.phpunit.de/manual/current/en/appendixes.configuration.html#appendixes.configuration.blacklist-whitelist) – KajMagnus

+1

Điều quan trọng cần lưu ý là ban đầu bạn có thể chỉ xem phpunit ngừng thực hiện kiểm tra mà không có lỗi và hiển thị "Đã trả lại: 255" –

1

Bạn đã bật tính năng định cấu hình xdebug chưa, nếu vậy hãy thử tắt nó. Tôi đã gặp vấn đề này trước đây, và nó đi xuống phần mở rộng trong php (cụ thể là xdebug profiling và/hoặc Inclued heirarchy viewer)

+0

Tôi vừa kiểm tra, và tôi đã hy vọng đó là vấn đề, nhưng hồ sơ bị tắt. Cám ơn phản hồi của bạn. Bất kỳ ý tưởng nào khác? –

+0

Thật khó để nói mà không biết codebase. Tôi sẽ chỉ chú ý đến các cờ đỏ (ví dụ: __autoloading đầy đủ, bộ nhớ đệm trong bộ nhớ, v.v.) thường không phải là vấn đề, nhưng có thể gây ra sự cố trong quá trình kiểm tra do số lượng lớn các cảnh báo tức thời. Ngoài ra, hãy tận dụng tearDown () nếu có thể. –

Các vấn đề liên quan