Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Testing

Программирование с Yii2: автоматическое тестирование с помощью Codeception

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called How to Program With Yii2.
Programming With Yii2: Security
How to Program With Yii2: ActiveRecord

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

Final product image
What You'll Be Creating

Если вы спрашиваете: «Что такое Yii?» ознакомьтесь с моим предыдущим учебным пособием «Введение в Yii Framework», в котором рассматриваются преимущества Yii и оно так же включает обзор нового в Yii 2.0, выпущенного в октябре 2014 года.

В этой серии статей по программированию с Yii2 я рассказываю своим читателям об использовании Yii2 Framework для PHP. В этом уроке я рассматриваю автоматическое тестирование с использованием Codeception, которое интегрировано с инфраструктурой разработки Yii2.

Мой опыт написания тестов вместе с моим кодом ограничен. Я часто был частью сольных или небольших проектов с ограниченными ресурсами. Во время моего пребывания в Microsoft у нас были различные тестовые команды, которые все это делали. Но, честно говоря, это, скорее всего, типично для вас тоже, верно? Программистам нравится писать код, они не пишут тесты - по крайней мере, программисты старой школы этого не делали.

Codeception - инновационная библиотека, которая в буквальном смысле стремится сделать написание тестов веселым и легким занятием. И я бы сказал, что им удалось это в разумной степени. Когда я окунал палец в воду «озера Codeception», это было в основном легко и весело. Однако, когда я начал углубляться, я столкнулся с проблемами конфигурации с Yii и конкретными модулями, используемыми в этой серии. Были определенные проблемы. В целом, однако, я впечатлен и вижу, что еще нужно учиться.

Проще говоря, Codeception и его интеграция с Yii заставляют меня писать больше тестов, в первую очередь для самого себя. Я подозреваю, что у вас будет такой же опыт.

Прежде чем мы начнем, напомню, что я участвую в комментариях ниже. Меня особенно интересует, если у вас есть дополнительные мысли или вы хотите предложить темы для будущих учебников. Если у вас есть вопрос или предложение темы, пожалуйста, напишите ниже. Вы также можете связаться со мной в Twitter @reifman напрямую.

Начинаем

Установка Codeception

Чтобы вести меня, я использовал документацию по настройке среды тестирования Yii. Я начал с глобальной установки codeception, чтобы я мог использовать его из любого проекта.

Вам также необходимо установить codeception/specify:

И codeception/verify:

Затем он помогает настроить псевдоним для codecept, используя ваш глобальный каталог композера:

Это задает псевдоним:

Yii также требует установки Faker, который генерирует фейковые тестовые данные для вашего приложения:

Настройка codeception в вашем приложении

Команда codecept bootstrap инициализирует код для вашего приложения Yii, создавая различные файлы конфигурации для создания и запуска тестов для вашего приложения. Мы используем приложение Hello из этой серии для этого урока. См. ссылку GitHub на этой странице, чтобы получить код.

По какой-то причине у меня оказывались дубли тестовых каталогов в hello/tests; просто удалите hello/tests/ functional  hello/tests/acceptance, и hello/tests/unit. Все тесты находятся в hello/tests/codeception/*.

Различные виды тестов

Codeception акцентируется на трех видах тестов:

  1. Модульное тестирование проверяет, работают ли определенные модули, например, исчерпывающий тест всех методов вашей модели.
  2. Функциональное тестирование проверяет общие сценарии приложений, как если бы пользователь выполнял их, но используя эмуляцию веб-браузера.
  3. Приемочное тестирование идентично функциональному тестированию, но фактически проводит все тесты через веб-браузер.

И он поддерживает три разных типа тестовых форматов для вашего тестового кода:

  1. Cept: это самый простой тестовый файл сценария
  2. Cest: объектно-ориентированный формат для запуска нескольких тестов в одном файле
  3. Test: тесты, написанные на PHPUnit, фреймворк для тестирования PHP

Начнем с примера приемочных тестов с использованием формата cept:

Приемочное тестирование

Сначала мы будем использовать пример Welcome теста от Codeception.

Это генерирует файл tests/acceptance/WelcomeCept.php  который мы будем редактировать ниже.

Поскольку приемочные тесты требуют браузера, мы должны отредактировать /tests/acceptance.suite.yml в нашем проекте, чтобы предоставить наш URL-адрес разработки, http://localhost:8888/hello:

Теперь мы готовы изменить начальный тест в tests/acceptance/WelcomeCept.php. Я пишу тест, который загружает первую страницу, чтобы убедиться, что она работает так, как ожидалось.

Тесты в Codeception имеют концепцию актера, в этом случае $I = new AcceptanceTester().

Вот как описывает актеров документация Codeception:

У нас есть UnitTester, который выполняет функции и проверяет код. У нас также есть FunctionalTester, квалифицированный тестер, который тестирует приложение в целом, со знанием его внутренних компонентов. И AcceptanceTester, пользователь, который работает с нашим приложением через интерфейс, который мы ему предоставляем.

Вы можете прокомментировать ваши тесты с помощью кода, например $I->wantTo('perform a certain test') или 'ensure that the frontpage works'.

В моем тесте я хочу увидеть $I->see текст 'Congratulations!' и 'Yii-powered':

Вот текущая домашняя страница Hello:

Programming with Yii - The Hello Home Page

Затем, давайте проверим тест, просто выполните команду codecept run:

Как вы можете видеть, наш тест прошел, и код для проверки этой функции был достаточно читабельным и простым.

Заметки о тестах по умолчанию Yii

Чтобы двигаться дальше, я начал использовать тесты Yii по умолчанию. На этом этапе я столкнулся с несколькими проблемами конфигурации - в основном из-за моего использования пользовательского модуля yii2-user в этой серии. Другие были связаны с небольшими ошибками с Yii, которые его команда быстро реагировала и исправляла, когда сообщалось о GitHub; в некоторых случаях проблемы были исправлены в более поздних выпусках дерева yii2-basic.

Кроме того, поскольку я обновил yii2-basic для этой серии, мне пришлось внести небольшие изменения в некоторые из тестов по умолчанию.

Вот пример вывода после запуска приемочных тестов по умолчанию, когда я сделал некоторые незначительные корректировки:

Функциональное тестирование

Чтобы заставить работать функциональные тесты, мне нужно было запустить экземпляр встроенного сервера Yii. Я не знал об этом компоненте, пока Алекс Марков не упомянул об этом в нашем общении на GitHub.

Я внес небольшие изменения в функциональные тесты в / tests/codeception/functional, в основном для поиска моих конкретных обновленных текстовых строк, то есть «Недопустимый логин или пароль» вместо используемых в Yii по умолчанию. Вот взгляните на LoginCept.php:

В принципе, код обращается к модели LoginForm и проверяет ее различные методы с помощью Yii.

Вот код теста /tests/codeception_pages/LoginPage.php, который он использует (мне также пришлось изменить его для поддержки изменений, внесенных нами в этой серии статей):

Вы можете видеть, что мы используем актера, чтобы заполнить поля (fillFields) и нажимать кнопки (click) для наших обновленных полей формы.

Несмотря на то, что у меня была проблема с интеграцией кода с Yii, я счел полезным запустить эти тесты в подробном режиме:

Вот подробный вывод функциональных тестов Login - в терминале MacOS, PASSED и FAILED - цветной красный или розовый и инвертированный для видимости:

В целом, еще нужно кое-чему научиться чтобы начать правильно писать тексты на Codeception. Но результаты впечатляют.

Модульное тестирование

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

К сожалению, я не смог получить модульные тесты для работы в нашем дереве из-за небольших ошибок Yii, которые еще не были исправлены или проблем с конфигурацией между Codeception и yii2-user, который мы интегрировали в статье «Как программировать с Yii2: Интеграция регистрации пользователей».

Я снова рассмотрю модульное тестирование в нашей серии Startup, которая не использует yii2-user, но вместо этого использует встроенную интеграцию пользователя Yii Advanced.

Давайте рассмотрим пару примеров из дерева Yii2-app-basic.

Тестирование контактов электронной почты

Тест hello/tests/codeception/unit/models/ContactFormTest.php проверяет отправку электронного письма через программное использование моделей:

Мне не удалось успешно пройти этот тест из-за небольшой ошибки в Yii, которая еще не исправлена (или, по крайней мере, я не смог найти обновленный код). Моя версия кодовой базы Yii называло исходящую электронную почту с отметками даты, а вышеприведенный код искал фиксированное имя файла. Таким образом, он всегда терпел неудачу. Тем не менее, полезно посмотреть, как программное тестирование может использовать модели для создания файла, а затем искать этот файл и проверять его содержимое, чтобы убедиться, что код работает.

Тестирование входа

Давайте рассмотрим тест hello/tests/codeception/unit/models/LoginFormTest.php Опять же, мое использование yii2-user затруднило интеграцию во время написания этого урока; однако мы можем взглянуть на концептуальный подход к модульным функциям пользовательских моделей.

Вот testLoginCorrect(), который проверяет, будет ли логин успешным с правильным паролем:

Он использует модель LoginForm для программного входа в систему пользователя, а затем он программно смотрит, не является ли текущий пользователь Yii гостем.

Что дальше?

Надеюсь, вам было интересно узнать о Codeception и его интеграции с Yii, несмотря на некоторые препятствия, с которыми я столкнулся. По умолчанию установка yii2-basic сегодня должна работать гораздо лучше.

Если вы хотите больше узнать о том, что и когда тестировать, я рекомендую прочитать обзор тестирования Yii. Однако еще много чего можно узнать о Codeception и написании более полных тестов.

Следите за предстоящими учебниками в нашей серии статей о программировании с помощью Yii2, поскольку мы продолжаем погружаться в разные аспекты фреймворка. Если вы хотите узнать, когда выйдет следующий учебник по Yii2, следуйте за мной @reifman в Twitter или проверьте мою страницу инструктора.

Вы также можете проверить мою серию статей Building Your Startup With PHP, в которой используется расширенный шаблон Yii2, и где мы создаем реальное приложение. На самом деле, вы уже сегодня можете попробовать это приложение - Meeting Planner.

Ссылки по теме

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.