Привет друзья. В этой статье расскажу про приемочные тесты. После написания какой нибудь фичи приходится тестировать ее. Как это обычно происходит. Пишем фичу, запускаем браузер, кликаем мышкой куда надо, ага, работает окей. Но фича не была бы фичей, если бы ненужно было бы дорабатывать. Правим ее, и вот теперь нужно проделать все шаги с нуля, запуск браузера, еще больше кликов мышкой, осмотр глазами, проверка записей в БД и т.д. После еще правок повторяем все заново и заново. Стоп, давайте компьютер будет повторять все эти рутинные операции.
При том, что это легко сделать с замечательным фреймворком codeception плюс авто браузер selenium. Для базы возьмем Yii, для него уже модуль для codeception, для быстрой демонстрации самое то.
Для начала можно протестировать авторизацию пользователя на сайте. Распространенный функционал, который есть из под коробки в Yii basic. В следующий раз, можно протестировать регистрацию пользователя и посмотреть работу с БД.
Итак, скачиваем Yii basic, advanced шаблон слишком излишен для демонстраций, да и вообще для многих сайтов.
Теперь перёйдем к тестам. Вместе с basic поставляется codeception/base без веб драйвера нужного для selenium. Меняем поставку, в composer.json заменяем строку codeception/base на codeception/codeception,
1 2 3 4 5 6 7 8 9 |
"require-dev": { "yiisoft/yii2-debug": "~2.0.0", "yiisoft/yii2-gii": "~2.0.0", "yiisoft/yii2-faker": "~2.0.0", "codeception/codeception": "^2.2.3" }, |
Запускаем в консоли composer update. Composer обновить зависимости и скачает необходимый библиотеки.
Скачиваем selenium с сайта http://www.seleniumhq.org/download/ Это обычный jar archive.
Для запуска браузера скачиваем хром драйвер. Выберите исходя из ОС. Для винды это будет win32.zip
https://sites.google.com/a/chromium.org/chromedriver/downloads.
Ложим их обоих в одну папку. Например у меня оба эти файла лежат в папке Openserver\selenium.
В терминале пишем java -jar selenium-server-standalone-3.5.3.jar
Все селениум запущен.
Пришло время codeception-a. В папке с тестами site/tests создаем конфиг acceptance.suite.yml. В конфигах добавляем веб драйвер и модуль Yii2.
1 2 3 4 5 6 7 8 9 10 11 12 |
class_name: AcceptanceTester modules: enabled: - WebDriver: url: http://yiibasic.lc/ browser: chrome - Yii2: part: orm entryScript: index.php cleanup: false |
Отредактируем тест site/tests/acceptance/LoginCest.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php use yii\helpers\Url as Url; class LoginCest { public function ensureThatLoginWorks(AcceptanceTester $I) { $I->amOnPage(Url::toRoute('/site/login')); $I->see('Login', 'h1'); $I->amGoingTo('try to login with correct credentials'); $I->fillField('input[name="LoginForm[username]"]', 'admin@admin.com'); $I->fillField('input[name="LoginForm[password]"]', '123456'); $I->click('login-button'); $I->expectTo('see user info'); $I->waitForText('Logout', 4); $I->see('Logout'); } } |
Запускаем тесты
vendor\bin\codecept run acceptance -vvv
Пример запуска:
Видим зеленую строчку PASSED, значит тест прошел.