Codeception, покриття коду тестами (code coverage)

Покриття коду тестами (Code Coverage)

В якийсь момент вам захочеться дізнатися, які частини програми покриті тестами, а які ні.
Саме для цього і використовується CodeCoverage. Під час виконання тестів для збору даних про покриття, ви отримаєте статистику по всіх класах, методам і рядках коду, які порушені вашими тестами.
Різниця між кількістю рядків коду і кількістю порушених при тестуванні рядків є головним критерієм покриття коду тестами. В ідеальному світі покриття коду повинна становити 100%, проте в реальності досить і 80%. Однак, навіть 100% покриття коду не захистить вас від помилок і падіння додатки.

Codeception включає інструменти CodeCoverage починаючи з версії 1.5. Для збору інформації про покриття тестами необхідний xdebug.

Codeception, покриття коду тестами (code coverage)

Дані про покриття тестами можуть бути зібрані вручну для локальних або віддалених тестів. Дистанційні тести можуть виконуватися на іншому вузлі,
або локально, проте з використанням веб сервера. Може здатися складним отримання покриття коду для тестів Selenium або PhpBrowser. Однак Codeception
підтримує віддалене покриття точно так само як і локальне.

конфігурація

Щоб включити утиліту покриття тестами, додайте наступні рядки в глобальний конфігураційний файл codeception.yml:

виглядає непогано. Але які файли повинні потрапити до звіту про покриття? Ви можете фільтрувати файли використовуючи black-листи і white-листи.

Що таке black-листи і white-листи?

  • Список whitelist це список файлів які повинні бути включені в звіт, навіть якщо вони не порушені.
  • Список blacklist це список файлів які повинні бути виключені зі звіту, навіть якщо вони порушені.

Передайте масив файлів / директорій в секції include / exclude. Шлях закінчується на '' відноситься до директорії.
Так само ви можете використовувати маску '' в іменах файлів, наприклад app / models / * Model.php для вказівки всіх моделей.

Ось приклад, якщо вам не потрібні складні фільтри:

Опції include і exclude тут додають або видаляють файли з white-листа.

Кожна з цих налаштувань може бути перевизначена для кожного набору в сооветсвующіх конфігураційний файл.

Локальне покриття тестами

Базовий звіт про покриття може бути отриманий для функціональних і модульних тестів.
Якщо ви налаштували конфігурацію як було показано вище, ви готові до дій.
Все що вам потрібно виконати codeception з опцією --coverage.
Для генерації xml звіту або красивого html звіту додайте опції --xml і --html.

XML і HTML звіти розташовуються в директорії _logs. Кращий спосіб подивитися звіт, відкрити index.html знаходиться в директорії tests / _logs / coverage за допомогою вашого браузера.
XML звіти використовуються в IDEs (такими як PHPStorm) або серверами Continuous Integration (Такими як Jenkins).

Віддалене покриття тестами

У разі, есоі ваше додаток запущено за допомогою веб-сервера (Apache, Nginx, PHP WebServer) у вас немає доступу до тестованого коду,
таким чином збір даних про покриття коду стає нетривіальним завданням. Те ж саме каается скриптів запущених на іншому вузлі.
Для того щоб отримати доступ до коду, у вас повинно бути встановлено розширення xdebug з включеною опцією remote_enable.
Codeception так само вимагає наявності невеликого "шпигуна" для взаємодії з вашим додатком.
Навіть якщо ваше додаток працює автономно, навіть не знаючи що воно було протестовано, даний файл повинен бути підключений для того щоб стало можливим збирати інформацію про покриття тестами.

Цей файл називається c3.php і він доступний на GitHub.
c3.php повинен бути завантажений і включений в ваш додаток в першому рядку of it's from controller.
Посилаючи спеціальні заголовки Codeception буде віддавати команди вашому додатку, що дозволяють запускати збір даних про покриття коду і зупиняти його.
Після виконання набору тестів, звіт буде збережений і Codeception вважає його з вашого застосування.

Дотримуйтесь інструкцій по установці описаним у файлі readme.

Ніколи настройка віддаленого формування звіту про покриття коду тестами не була такою простою. У будь-якому іншому фреймворку. Серйозно.

Однак, якщо ви запускаєте тести на віддаленому сервері (або ваш веб-сервер не використовує код з поточної директорії), в конфігураційний файл необхідно додати опцію remote.
Наприклад давайте включимо віддалену утиліту збору інформації про покриття коду тестами в набір acceptance.suite.yml

В даному випадку результати звітів не будуть злиті з локальними, якщо опція включена.
Об'єднання звітів можливо тільки в тому випадку, якщо файл запущений віддалено і локально має один шлях.
Однак в разі запуску тестів на віддалено сервері немає впевненості, що це так.

висновок

Ніколи ще не було так просто налаштувати одночасно локальний і віддалений звіт про покриття тестами. Всього один конфігураційний файл і один додатковий файл включений в програму!
За допомогою Codeception ви можете просто створювати CodeCoverage звіти для ваших Selenium тестів (або інших приймальних і API тестів). Поєднуючи звіти для acceptance. functional. і unit наборів ви можете полчіть найбільш повну інформацію про те, які частини вашого застосування відтестували, а які ні.

Знайшли помилку, друкарську помилку, кривої і нудний переклад. Допоможіть виправити це!