Codeception фреймворк для тестирования PHP-приложений
Codeception — это мощный фреймворк для тестирования PHP-приложений, который поддерживает unit-, functional- и acceptance-тестирование. Он предоставляет удобный и унифицированный интерфейс для написания тестов, а также интеграцию с популярными инструментами и библиотеками.
Основные типы тестов в Codeception
- Unit-тестирование:
- Тестирование отдельных компонентов (классов, методов) в изоляции.
- Используется для проверки корректности работы небольших частей кода.
- Пример: тестирование методов модели или сервиса.
- Functional-тестирование:
- Тестирование работы приложения на уровне взаимодействия между компонентами.
- Проверяет, как части приложения работают вместе, без реального браузера.
- Пример: тестирование контроллеров, маршрутов и взаимодействия с базой данных.
- Acceptance-тестирование:
- Тестирование приложения с точки зрения пользователя, с использованием реального браузера.
- Проверяет, что приложение работает корректно в реальных условиях.
- Пример: тестирование форм, навигации и UI.
Установка Codeception
Установите Codeception через Composer:
composer require codeception/codeception --dev
После установки выполните команду для инициализации:
php vendor/bin/codecept bootstrap
Эта команда создаст структуру папок и файлов для тестов.
Структура папок Codeception
После инициализации создается следующая структура:
tests/
├── acceptance/
├── functional/
├── unit/
├── _output/
├── _data/
├── _support/
├── acceptance.suite.yml
├── functional.suite.yml
├── unit.suite.yml
└── codeception.yml
- acceptance/, functional/, unit/: папки для тестов каждого типа.
- _output/: папка для логов и скриншотов (например, при acceptance-тестировании).
- _data/: папка для тестовых данных.
- _support/: папка для вспомогательных классов и настроек.
- acceptance.suite.yml, functional.suite.yml, unit.suite.yml: конфигурационные файлы для каждого типа тестов.
- codeception.yml: основной конфигурационный файл.
Написание тестов
1. Unit-тесты
Unit-тесты пишутся для проверки отдельных методов или классов.
Пример теста:
// tests/unit/ExampleTest.php
class ExampleTest extends \Codeception\Test\Unit
{
public function testExample()
{
$result = 2 + 2;
$this->assertEquals(4, $result);
}
}
Запуск unit-тестов:
php vendor/bin/codecept run unit
2. Functional-тесты
Functional-тесты проверяют работу приложения на уровне взаимодействия компонентов.
Пример теста:
// tests/functional/LoginCest.php
class LoginCest
{
public function _before(FunctionalTester $I)
{
// Действия перед каждым тестом
}
public function tryToTestLogin(FunctionalTester $I)
{
$I->amOnPage('/login');
$I->fillField('username', 'admin');
$I->fillField('password', 'password');
$I->click('Login');
$I->see('Welcome, admin');
}
}
Запуск functional-тестов:
php vendor/bin/codecept run functional
3. Acceptance-тесты
Acceptance-тесты проверяют приложение через реальный браузер.
Пример теста:
// tests/acceptance/SignupCest.php
class SignupCest
{
public function tryToSignup(AcceptanceTester $I)
{
$I->amOnPage('/signup');
$I->fillField('username', 'testuser');
$I->fillField('email', 'testuser@example.com');
$I->fillField('password', 'password');
$I->click('Signup');
$I->see('Welcome, testuser');
}
}
Запуск acceptance-тестов:
php vendor/bin/codecept run acceptance
Для acceptance-тестов требуется настроить WebDriver (например, Selenium или ChromeDriver). Это можно сделать в acceptance.suite.yml
:
modules:
enabled:
- WebDriver:
url: 'http://localhost'
browser: chrome
Конфигурация
Каждый тип тестов настраивается в соответствующем конфигурационном файле (например, unit.suite.yml
, functional.suite.yml
, acceptance.suite.yml
).
Пример конфигурации для functional-тестов:
actor: FunctionalTester
modules:
enabled:
- \Helper\Functional
- Yii2:
part: orm
entryScript: index-test.php
Вспомогательные классы
Codeception позволяет создавать вспомогательные классы для повторного использования кода. Они находятся в папке tests/_support/Helper/
.
Пример:
// tests/_support/Helper/Acceptance.php
namespace Helper;
class Acceptance extends \Codeception\Module
{
public function login($username, $password)
{
$I = $this;
$I->amOnPage('/login');
$I->fillField('username', $username);
$I->fillField('password', $password);
$I->click('Login');
}
}
Преимущества Codeception
- Универсальность: поддержка unit-, functional- и acceptance-тестов.
- Простота: удобный синтаксис и встроенные помощники.
- Интеграция: поддержка популярных фреймворков (Yii, Laravel, Symfony) и инструментов (Selenium, WebDriver).
- Гибкость: возможность расширения функциональности через модули и вспомогательные классы.
Заключение
Codeception — это мощный инструмент для тестирования PHP-приложений, который охватывает все уровни тестирования. Он подходит как для небольших проектов, так и для крупных приложений, обеспечивая высокое качество кода и стабильность работы.