Типичный тест
• $I = new WebGuy($scenario);
• $I->click('Login');
• $I->fillField('username','davert');
• $I->fillField('password','gfhjkm');
• $I->click('Submit');
• $I->see('Hello, Davert!');
Slide 19
Slide 19 text
Написание теста
Slide 20
Slide 20 text
Как находятся элементы?
• $I->click('Login'); - ?
• $I->fillField('username','davert'); - ?
Slide 21
Slide 21 text
Я же умный, красивый, в меру
упитанный фреймворк ну в полном
расцвете сил!
Slide 22
Slide 22 text
Поиск элемента на странице
• По имени (name, value, alt, …)
• По лейблу
• По CSS селектору
• По Xpath (с версии 1.1)
Slide 23
Slide 23 text
Результаты теста
Slide 24
Slide 24 text
Команды: see..
$I->see (‘text on a page’)
$I->see(‘heading on page’,’h1’);
$I->dontSee(‘Error’);
$I->seeInCurrentUrl(‘/user/davert’);
$I->seeCheckboxIsChecked(‘#terms’);
$I->see(‘XPath’, ‘//h:a/h:span’);
Интеграция с фреймворками
• Не обращаемся к веб-серверу.
• Работает гораздо быстрее.
• Stack trace и отладочная информация.
Slide 28
Slide 28 text
CodeGuy
• Простые тесты с PHPUnit
• Комплексные тесты в виде сценариев
• Доступны все модули
Slide 29
Slide 29 text
Типичный тест
function testSavingUser()
{
$user = new User();
$user->setName('Miles');
$user->setEmail(‘[email protected]');
$user->save();
$this->codeGuy->seeInDatabase('users',array(
'name' => 'Miles‘,
‘email' => ‘[email protected]‘,
));
} // интеграционный тест
Slide 30
Slide 30 text
Сценарный тест
function create(CodeGuy $I)
{
$I->wantTo('create new user by name');
$I->haveStub($user =
Stub::makeEmptyExcept('User', 'create')
);
$user->setName('davert');
$I->executeMethod($user, ‘create’);
$I->expect('user is validated and saved')
$I->seeMethodInvoked($user, 'validate')
$I->seeMethodInvoked($user, 'save');
} // юнит тест
Slide 31
Slide 31 text
Отладка
• Все промежуточные данные выводятся на
экран
• При сбое делается скриншот последней
страницы
• Модуль WebDebug
Slide 32
Slide 32 text
Очистка
• Тесты должны работать в изоляции
• Тесты не должны гадить друг другу
• Очистка кеша, данных, сессий…
Slide 33
Slide 33 text
Очистка БД
• перезаливать sql-дамп БД.
• использовать SQLite.
• через rollback в транзакции.
Когда модулей мало
• Пишем свои!
• Helper-код
• public function seeReceivedSms() {
• $messages = $this->_getOutgoingMessages();
• $this->assertGreaterThen(0, $messages->count());
• }
• Тест
• $I->click("Confirm by Sms");
• $I->seeReceivedSms();
Интеграция с CI
• Экспорт HTML, XML, JSON, TAP
• Jenkins, Bamboo, etc…
• Красивые HTML репорты
Slide 38
Slide 38 text
Репорт
Slide 39
Slide 39 text
Подходит для BDD
// As a new customer
$I->am(‘new customer’);
// I want to buy a notebook
$I->wantTo(‘buy a notebook’);
// In order to spend money faster
$I->lookForwardTo(‘spend money faster’);
Slide 40
Slide 40 text
Hardcore BDD
Slide 41
Slide 41 text
Документация
• http://codeception.com
• Guides – всё о фреймворке (9 глав)
• Модули – все функции
• Reference –команды, опции.