Краткое описание на главной странице гласит, что Codeception это BDD фреймворк для тестирования. Про BDD можно почитать статью в википедии. Коротко говоря, это означает что синтаксис автотестов будет читабельным для людей далеких от тестирования и тем более программирования.

Если кто еще не знаком с этим инструментом, то ссылка на документацию здесь. Про автоматизированное тестирование и его пользу, думаю писать не стоит, все итак ясно.

Почему именно этот фреймворк для тестирования

На ранних этапах планирования нашего основого продукта было решено уделить большое внимание автоматизированному тестированию. Изначально решили использовать Selenium в том или ином его проявлении, но не определились с фреймворком. К тому же мы раздумывали над тем стоит ли вообще использовать какой либо фреймворк или лучше обойтись возможностями библиотеки Webdriver и языка программирования.

Одним из кандидатов стал Codeception, другим кандидатом была стандартная библиотека Selenium на Python 2.7. Изначально, я крайне негативно относился к его использованию, потому что считал что реализация более высокоуровнего и понятного синтаксиса для написания тестов, будет построена на «костылях» и является не расширяемой. В таких библиотеках частенько можно напороться на метод, который работает совсем не так, как ты от него ожидаешь. К тому же Codeception написан на PHP, который тогда для меня был неизвестен.  Но выбор большинства сошелся на этом фреймворке и мне пришлось смириться с этим.  Затем по мере работы с ним, я все больше и больше стал углубляться в его возможности и понял, что мои представления были ошибочны.

Сейчас мне нравится этот фреймворк по нескольким причинам:

Расширяемость модулями

Сегодня представлено много интересных модулей для расширения функциональности тестирования. Среди них REST для работы с запросами по одноименной технологии, много модулей по популярный фреймворкам — Yii, Laravel и другие. WebDriver кстати тоже подключается как дополнительный модуль, а из коробки установлен PhpBrowser — обертка над Guzzle и CURL, позволяющая совершать действия со страницами, без интерфейса самого браузера. При желании, каждый может написать свой модуль для Codeception для добавления нужного функционала. Либо унаследовать существующий и кастомизировать его. Расширять, управлять, менять, все это здесь дозволено и доступно.

Структура автотестов

Благодаря удобной структуре тестов можно рационально организовать тестовый код. Не забыли и про так называемый PageObject Pattern, это предусмотрено на уровне фреймворка. Автоматизированное тестирование при помощи фреймворка можно условно разделить на разные виды. К примеру Acceptance тестирование, тестирование API и другие варианты. Таким образом, проверка будет производиться сразу на разных уровнях, как на уровне пользователей, так и на уровне кода. Для тестирования на уровне кода можно подключить PHPUnit.

BDD  синтаксис

Перед выбором фреймворка, синтаксис казался мне самым слабым местом у Codeception. Но как было сказано выше, время показало что я ошибался. Сейчас я тоже склоняюсь к тому, что тесты очень понятны и буквально любой член команды сможет написать такой тест. А если вам это не по душе то можно писать тесты на более низком уровне. Стоит также отметить, что у проекта большое комьюнити, а ветка на stackoverflow ежедневно пополняется новыми вопросами и решениями.

Автотесты на PHP

Этот плюс никак не влияет на процесс тестирования, но для меня скорее всего самый приятный. Благодаря Codeception я начал изучать PHP, заинтересовался этим языком, получил первое представление и нашел в чем попрактиковаться. Теперь я все чаще вовлекаю возможности самого PHP в свои автотесты, но стараюсь соблюдать идеологию BDD, сохраняя читабельность тестов.

UPD. Я добавил пример — автотесты на PHP.

Конфигурации и гибкие запуски

Все тесты можно запускать из различных директорий, различными скоупами и группами. Есть возможность запуска с разными окружениями, браузерами и входными данными.

Вот и все что у меня сейчас есть сказать об этом фреймворке. Выражаю его автору большую благодарность. Мануалов в сети очень много, поэтому я не пытаюсь привести здесь примеры кода. Если нужны примеры, то лучше ознакомиться с документацией, которая очень подробна и хорошо расписана.