Upload
davertmik
View
996
Download
0
Embed Size (px)
DESCRIPTION
Citation preview
Michael “Davert” Bodnarchuk
http://github.com/DavertMik
TestGuy – эмулируем вашего тестировщика на PHP
Почему мы не пишем функциональные
тесты?
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
Что здесь происходит?
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
$browser ->call('/group/show/id/1', 'GET', array()) ->with('request')->begin() ->isParameter('module', 'group') ->isParameter('action', 'show') ->end() ->with('response')->begin() ->isStatusCode(200) ->end();
$browser ->call('/group/promoteDemote', 'POST', array (
'action' => 'promote', 'userId' => '3', 'groupId' => '1',)) ->with('request')->begin() ->isParameter('module', 'group') ->isParameter('action', 'promoteDemote') ->end() ->with('response')->begin() ->isStatusCode(200) ->end();
$browser ->call('/group/show/id/1', 'GET', array()) ->with('request')->begin() ->isParameter('module', 'group') ->isParameter('action', 'show') ->end() ->with('response')->begin() ->isStatusCode(200) ->end();
$browser ->call('/group/promoteDemote', 'POST', array (
'action' => 'promote', 'userId' => '3', 'groupId' => '1',)) ->with('request')->begin() ->isParameter('module', 'group') ->isParameter('action', 'promoteDemote') ->end() ->with('response')->begin() ->isStatusCode(200) ->end();
namespace Acme\DemoBundle\Tests\Controller;use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;class DemoControllerTest extends WebTestCase{ public function testIndex() { $client = static::createClient(); $crawler = $client->request('GET', '/demo/hello/Fabien'); $this->assertTrue($crawler->filter('html:contains("Hello abien")')->count() > 0); }}
namespace Acme\DemoBundle\Tests\Controller;use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;class DemoControllerTest extends WebTestCase{ public function testIndex() { $client = static::createClient(); $crawler = $client->request('GET', '/demo/hello/Fabien'); $this->assertTrue($crawler->filter('html:contains("Hello abien")')->count() > 0); }}
public function submittingForgotPasswordInvalidEmail (){ $this->request->setMethod('POST') ->setPost(array('email' => 'invalid'));
$this->dispatch('admin/index/forgotpassword/');
$this->assertQueryCount('li.error-msg', 1); $this->assertQueryContentContains('li.error-msg', 'Cannot find the email address.');}
public function submittingForgotPasswordInvalidEmail (){ $this->request->setMethod('POST') ->setPost(array('email' => 'invalid'));
$this->dispatch('admin/index/forgotpassword/');
$this->assertQueryCount('li.error-msg', 1); $this->assertQueryContentContains('li.error-msg', 'Cannot find the email address.');}
Какими должны быть функциональные
тесты?
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
легко писатьлегко читатьлегко отлаживать
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
Представим себя на месте тестировщика….
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
Так появился TestGuy
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
Features!
1. Лаконичность.2. Автодополнения…
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
Features!
3. Модульность4. Основан на PHPUnit
5. Отладка…
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
Features!
6. Bootstrap переменные в тесте
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
Начальные условия:am
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
amOnPageamLoggedAs…
Действия:
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
clicksubmitFormsendAjaxRequest…
Результат:see
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
seedontSeeseeInUrlseeCheckboxIsCheckedseeInField…
Комментарии:
wantTowantToTestamGoingToexpectTo
…
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
Архитектура
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
• Core – надстройка над PHPUnit, выполняющая сценарии (основана на PHPUnit BDD).
• Модули – независимые компоненты для взаимодействия с приложением. (веб, БД, что угодно…)
• Cli – консоль (Symfony Console)
Конфигурация
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
• Пишется в Yaml• Позволяет задать несколько независимых сюит для тестирования
• Указывает необходимые модули.
Пример
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
self: class_name: TestGuy suite_class: PHPUnit_Framework_TestSuite modules: [Cli, Filesystem] bootstrap: ~
livestreet: class_name: WebTestGuy suite_class: PHPUnit_Framework_TestSuite modules: [Web, DbPopulator]
Web: start: http://localhost/livestreet/ log: tests/log
DbPopulator: dump: tests/dump/livestreet.sql dsn: mysql:host=localhost;dbname=livestreet user: root password:
Установка
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
Инструкции и код тут:
https://github.com/DavertMik/TestGuy_Standalone
Установка
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
php testguy.phar install
php testguy.phar init
php testguy.phar build
php testguy.phar run
Модули
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
• Web• DbPopulator• Filesystem• Cli
Советы
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
• Обязательно пишите тесты перед рефакторингом.
• Не тестируйте мелочи: не привязывайтесь к верстке, к промежуточным результатам, т.п.
Советы
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
• Создайте тестовую БД через фикстуры.
https://github.com/fzaninotto/Faker
http://symfony.com/doc/2.0/bundles/DoctrineFixturesBundle
Советы
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
• Создавайте свои модули для своего веб-приложения
Спасибо
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
• https://github.com/DavertMik/TestGuy_Standalone