Skip to content

Commit 28530dd

Browse files
committed
Merge branch 'master' into end
2 parents 61950f3 + 2e823a4 commit 28530dd

File tree

2 files changed

+197
-6
lines changed

2 files changed

+197
-6
lines changed

scripts/index.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
'file' => 'step-000.4.md',
2626
],
2727
'step-1' => [
28-
'title' => 'Тестирование',
28+
'title' => 'Знакомство с тестированием',
2929
'file' => 'step-001.0.md',
3030
],
3131
'step-1.1' => [

scripts/steps/step-001.0.md

Lines changed: 196 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,202 @@
1-
### Административное приложение Backend
1+
### Знакомство с тестированием
22

3-
В этом разделе добавим функциональности в backend приложение. Создадим место, где администратор сможет просматривать
4-
результаты опроса. Рассмотрим возможности ограничения доступа к тому или иному функционалу.
3+
Неотъемлемой частью разработки масштабного приложения служит тестирование тех или иных частей этого приложения.
4+
Есть даже методика разработки приложений, которая тесно связана с тестированием - разработка через тестирование. Возможно,
5+
вы знакомы с ней как <a href="https://en.wikipedia.org/wiki/Test-driven_development" target="_blank">TDD</a>.
56

6-
Чтобы начать, выполните команду из директории yii2-tutorial:
7+
Разработчики и сообщество Yii приложило много усилий, чтобы можно было максимально просто покрыть тестами необходимый код.
78

9+
Раньше, например когда создавали форму опрос, приходилось открывать браузер, заполнять форму выдуманными данными, проверять
10+
результат. Добавляли успешный вывод сообщения, в виде результата - опять открывали форму, заполняли данными, проверяли
11+
результат. Добавили, поведение к форме - опять проверяли, открывая форму и вводя данные. Сохраняли результат в базе данных -
12+
приходилось смотреть сохранились ли данные корректно. Всё это наверное вам знакомо. Возможно, вам приходится такое проделывать,
13+
когда разрабатывается тот или иной функционал. А когда приложение становится масштабным, уже боязно вносить изменения
14+
в код. Так как далее приходится тратить много времени, чтобы пройтись по некоторым страницам сайта и проверить
15+
вручную всё ли работает как требуется. И часто, спустя несколько дней, кто-нибудь сообщает, что то что, когда-то работало,
16+
перестало работать. И опять тратиться время на выяснение причины неисправности, а так как изменения вносились несколько
17+
дней назад, то поиск истиной причины становится мукой. Или причина неисправности определяется неверно и в результате
18+
добавляется "костыль", который исправляет проблему.
19+
20+
Может вы к этому привыкли и вас всё устраивает. Но что, если про это всё забыть и использовать всего лишь одну команду:
21+
22+
```
23+
codecept run
24+
```
25+
26+
Всё! Больше ничего. Запустив команду, после очередного изменения кода и не увидев ни одной ошибки в результатах, вы можете
27+
со спокойной душой сообщить всем, что всё работает, как того требует техническое задание.
28+
29+
В этой главе посмотрим, что скрывается под командой `codecept run`. Чтобы начать, выполните команду из
30+
директории yii2-tutorial:
31+
32+
```
33+
git checkout -f step-1.0
34+
```
35+
36+
37+
<p class="alert alert-info">Под Windows вместо стандартной командной строки cmd лучше использовать другой интерпретатор.
38+
Тот который использует подсветку кода, например <a href="http://gooseberrycreative.com/cmder/" target="_blank">Cmder</a>
39+
</p>
40+
41+
#### Codeception
42+
43+
Yii для тестирование кода предоставляет систему <a href="http://codeception.com/" target="_blank">Codeception</a>.
44+
Codeception основан на php фреймворке для тестирования <a href="https://phpunit.de/" target="_blank">PHPUnit</a>.
45+
Вся настройка Codeception сводится к следующим шагам:
46+
47+
- создайте директорию `codecept`, где посчитаете нужным (не внутри учебника)
48+
- создайте в этой директории `composer.json`:
49+
```
50+
{
51+
"require": {
52+
"codeception/codeception": "*",
53+
"codeception/verify": "*",
54+
"codeception/specify": "*"
55+
}
56+
}
57+
```
58+
- запустите команду `composer install` из этой директории
59+
- после установки всех зависимостей, настройте переменную
60+
<a href="https://ru.wikipedia.org/wiki/PATH_%28%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%29" target="_blank">
61+
PATH</a> на директории `codecept\vendor\bin\`, чтобы команда codecept была доступна из любого места.
62+
63+
Теперь можно выполнить команду `codecept -V`, чтобы увидеть версию Codeception и убедиться, что он успешно установлен.
64+
65+
#### Виды тестов
66+
67+
Codeception поддерживает следующие виды тестов:
68+
69+
- Модульные тесты (Unit), которые проверяют код, который выполняется в изоляции.
70+
- Функциональные тесты (Functional), которые проверяют код, через эмуляцию браузера.
71+
- Приёмочные тесты (Acceptance), которые проверяют код, через браузер.
72+
73+
Все тесты располагаются в `\yii2-tutorial\yii2-app-advanced\tests\codeception`. Как и структура Advanced шаблона Yii,
74+
тесты также разделены для гибкости на backend и frontend. Только настройки вынесены в отдельную директорию `config`.
75+
76+
Кстати для некоторых тестов необходимо соединение с базой данных. Придётся извлекать, записывать данные, а иногда и удалять.
77+
Понятное дело, что основную базу лучше в этом случае не использовать. Нужна тестовая. Используя миграции, не составит труда
78+
создать копию основной базы данных.
79+
80+
Поэтому в `yii2-app-advanced/tests/codeception/config/config.php` указана:
81+
82+
```php
83+
'db' => [
84+
'dsn' => 'sqlite:' . dirname(__FILE__) .'/../../sqlite-test.db',
85+
],
886
```
9-
git checkout -f step-0.3
87+
88+
К этой базе данных применены все миграции, которые использовались и для основной. Чтобы это выполнить, понадобилось
89+
вызвать `php yii migrate` из `yii2-app-advanced/tests/codeception/bin`.
90+
91+
Теперь вернёмся к структуре директорий. Открыв `yii2-app-advanced/tests/codeception/backend`, можно обнаружить
92+
93+
```
94+
[_output]
95+
[acceptance]
96+
[functional]
97+
[unit]
98+
```
99+
100+
`acceptance, functional, unit` директории, которые хранят тесты в зависимости от их видов. `_output` - это директория, в
101+
которую будет попадать результат эмуляции браузера (html код страницы) для функциональных тестов, в случае ошибки.
102+
103+
В Codeception есть понятие "Исполнители тестов". Из названия понятно, для чего они. Для того, чтобы их создать
104+
необходимо произвести их инициализацию. В директории `tests/codeception/frontend`
105+
необходимо выполнить `codecept build`. Создадутся файлы:
106+
10107
```
108+
yii2-app-advanced/tests/codeception/frontend/acceptance/AcceptanceTester.php
109+
yii2-app-advanced/tests/codeception/frontend/functional/FunctionalTester.php
110+
yii2-app-advanced/tests/codeception/frontend/unit/UnitTester.php
111+
```
112+
113+
которые и будут являться исполнителями. В последствии, тоже самое нужно проделать и для backend части.
114+
115+
#### Запуск тестов
116+
117+
Можно попробовать для frontend запустить тесты. В `yii2-tutorial\yii2-app-advanced\tests\codeception\frontend\`
118+
запустим на выполнение все функциональные тесты:
119+
120+
```php
121+
codecept run functional
122+
123+
Time: 3 seconds, Memory: 29.25Mb
124+
OK (6 tests, 49 assertions)
125+
```
126+
127+
Выполнив эту команду, вы наверное ничего и не почувствовали. Но обратите внимание на время выполнения - **3 секунды**.
128+
За эти три секунды `FunctionalTester` успел посетить страницу <a href="/yii2-app-advanced/frontend/web/index.php?r=site/about" target="_blank">
129+
о нас</a>, <a href="/yii2-app-advanced/frontend/web/index.php?r=site/contract" target="_blank">обратная связь</a>,
130+
<a href="/yii2-app-advanced/frontend/web/index.php?r=site/index" target="_blank">домашнюю страницу</a> и проверить
131+
что они работают без ошибок. В эти 3 секунды исполнитель побывал на
132+
<a href="/yii2-app-advanced/frontend/web/index.php?r=site/signup" target="_blank">странице регистрации</a>,
133+
<a href="/yii2-app-advanced/frontend/web/index.php?r=site/login" target="_blank">аутентификации</a>,
134+
и на <a href="/yii2-app-advanced/frontend/web/index.php?r=site/login" target="_blank">странице опроса</a>, проверил эти
135+
формы, на корректность ввода данных. Исполнитель проверил работоспособность поведения accessOnce, которое было создано ранее.
136+
В сумме за три секунды исполнитель выполнил 6 тестов, в которых присутствовало 49 проверок.
137+
138+
Представьте сколько бы времени у вас ушло, если бы это выполняли самостоятельно через браузер. И запустив
139+
140+
```php
141+
codecept run functional
142+
```
143+
144+
после очередного рефакторинга кода, можно с уверенностью сказать, корректно ли работает сайт. А не бродить по сайту в поисках
145+
"А не поломал ли я чего-нибудь?". В этом и есть одна из приятных особенностей тестирования.
146+
147+
Также можно попробовать запустить модульные тесты:
148+
149+
```php
150+
codecept run unit
151+
152+
Time: 8.29 seconds, Memory: 17.00Mb
153+
OK (9 tests, 25 assertions)
154+
```
155+
156+
А вот для приёмочных, вы обнаружите ошибки.
157+
158+
```php
159+
codecept run acceptance
160+
161+
FAILURES!
162+
Tests: 5, Assertions: 0, Errors: 5.
163+
```
164+
165+
Всё дело в том, что для работы приёмочных тестов нужен браузер. Окружение для Codeception в Yii настроено таким образом,
166+
что используется <a href="http://codeception.com/docs/modules/PhpBrowser" target="_blank">PhpBrowser</a>.
167+
168+
```
169+
// Файл yii2-app-advanced/tests/codeception/frontend/acceptance.suite.yml
170+
modules:
171+
enabled:
172+
- PhpBrowser
173+
- tests\codeception\common\_support\FixtureHelper
174+
config:
175+
PhpBrowser:
176+
url: http://localhost:8080
177+
```
178+
179+
Т.е. настраивать ничего не нужно, остаётся изменить только путь к нашему сайту с http://localhost:8080 на
180+
http://localhost:8888/yii2-app-advanced/. Сделайте это.
181+
182+
Вместо PhpBrowser может быть выбран любой другой браузер (Chrome, FF, IE или другой) под управлением специального
183+
веб-драйвера, например <a href="http://www.seleniumhq.org/" target="_blank">Selenium</a>. Смена PhpBrowser браузера
184+
позволит тестировать поведения в браузере, связанные с javascripts.
185+
186+
А сейчас, когда PhpBrowser настроен, можно пробовать запускать и приёмочные тесты.
187+
188+
Запуск отдельных тестов, сокращает время ожидания выполнения. Codeception поддерживает: запуск всех тестов,
189+
запуск тестов по видам и запуск отдельных тестов. Например, для `yii2-app-advanced/tests/codeception/frontend` можно
190+
выполнить:
191+
192+
```
193+
codecept run
194+
codecept run functional
195+
codecept run functional functional\InterviewCept.php
196+
```
197+
198+
#### Дополнительная информация для самостоятельного ознакомления:
11199

200+
- <a href="https://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D1%82%D1%80%D0%B5%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" target="_blank">Экстремальное программирование</a>.
201+
- <a href="http://codeception.com/docs/01-Introduction" target="_blank">Руководство по Codeception</a>.
202+
- <a href="https://phpunit.de/manual/current/en/index.html" target="_blank">Руководство по PHPUnit</a>.

0 commit comments

Comments
 (0)