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 AcmeDemoBundleTestsController;
use SymfonyBundleFrameworkBundleTestWebTestCase;
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 AcmeDemoBundleTestsController;
use SymfonyBundleFrameworkBundleTestWebTestCase;
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
amOnPage
amLoggedAs
…
Действия:
TestGuy – эмулируем вашего тестировщика на
PHP
Michael “Davert” Bodnarchuk
click
submitForm
sendAjaxRequest
…
Результат:
see
TestGuy – эмулируем вашего тестировщика на
PHP
Michael “Davert” Bodnarchuk
see
dontSee
seeInUrl
seeCheckboxIsChecked
seeInField
…
Комментарии:
wantTo
wantToTest
amGoingTo
expectTo
…
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
• davert@mail.ua

TestGuy - эмулируем вашего тестировщика

  • 1.
    Michael “Davert” Bodnarchuk http://github.com/DavertMik TestGuy– эмулируем вашего PHPтестировщика на
  • 2.
    Почему мы не пишем функциональные тесты? TestGuy– эмулируем вашего тестировщика на PHP Michael “Davert” Bodnarchuk
  • 3.
    Что здесь происходит? 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 AcmeDemoBundleTestsController; use SymfonyBundleFrameworkBundleTestWebTestCase; 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 AcmeDemoBundleTestsController; use SymfonyBundleFrameworkBundleTestWebTestCase; 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.'); }
  • 4.
    Какими должны быть функциональные ?тесты TestGuy– эмулируем вашего тестировщика на PHP Michael “Davert” Bodnarchuk
  • 5.
    легко писать легко читать легкоотлаживать TestGuy – эмулируем вашего тестировщика на PHP Michael “Davert” Bodnarchuk
  • 6.
    Представим себя на месте ….тестировщика TestGuy– эмулируем вашего тестировщика на PHP Michael “Davert” Bodnarchuk
  • 7.
    Так появился TestGuy TestGuy –эмулируем вашего тестировщика на PHP Michael “Davert” Bodnarchuk
  • 8.
    Features! 1. .Лаконичность 2. …Автодополнения TestGuy– эмулируем вашего тестировщика на PHP Michael “Davert” Bodnarchuk
  • 9.
    TestGuy – эмулируемвашего тестировщика на PHP Michael “Davert” Bodnarchuk
  • 10.
    Features! 3. Модульность 4. Основанна PHPUnit 5. …Отладка TestGuy – эмулируем вашего тестировщика на PHP Michael “Davert” Bodnarchuk
  • 11.
    TestGuy – эмулируемвашего тестировщика на PHP Michael “Davert” Bodnarchuk
  • 12.
    Features! 6. Bootstrap переменные втесте TestGuy – эмулируем вашего тестировщика на PHP Michael “Davert” Bodnarchuk
  • 13.
    :Начальные условия am TestGuy –эмулируем вашего тестировщика на PHP Michael “Davert” Bodnarchuk amOnPage amLoggedAs …
  • 14.
    Действия: TestGuy – эмулируемвашего тестировщика на PHP Michael “Davert” Bodnarchuk click submitForm sendAjaxRequest …
  • 15.
    Результат: see TestGuy – эмулируемвашего тестировщика на PHP Michael “Davert” Bodnarchuk see dontSee seeInUrl seeCheckboxIsChecked seeInField …
  • 16.
    Комментарии: wantTo wantToTest amGoingTo expectTo … TestGuy – эмулируемвашего тестировщика на PHP Michael “Davert” Bodnarchuk
  • 17.
    Архитектура TestGuy – эмулируемвашего тестировщика на PHP Michael “Davert” Bodnarchuk • Core – надстройка над PHPUnit, вы (полняющая сценарии основана на PHPUnit BDD). • Модули – независимые компоненты .для взаимодействия с приложением ( , , …)веб БД что угодно • Cli – (консоль Symfony Console)
  • 18.
    Конфигурация TestGuy – эмулируемвашего тестировщика на PHP Michael “Davert” Bodnarchuk • Пишется в Yaml • Позволяет задать несколько независимых сюит для тестирования • Указывает необходимые .модули
  • 19.
    Пример 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:
  • 20.
    Установка TestGuy – эмулируемвашего тестировщика на PHP Michael “Davert” Bodnarchuk :Инструкции и код тут https://github.com/DavertMik/TestGuy_Standalone
  • 21.
    Установка TestGuy – эмулируемвашего тестировщика на PHP Michael “Davert” Bodnarchuk php testguy.phar install php testguy.phar init php testguy.phar build php testguy.phar run
  • 22.
    Модули TestGuy – эмулируемвашего тестировщика на PHP Michael “Davert” Bodnarchuk • Web • DbPopulator • Filesystem • Cli
  • 23.
    Советы TestGuy – эмулируемвашего тестировщика на PHP Michael “Davert” Bodnarchuk • Обязательно пишите тесты перед .рефакторингом • :Не тестируйте мелочи не привязывайтесь к ,верстке к промежуточным , . .результатам т п
  • 24.
    Советы TestGuy – эмулируемвашего тестировщика на PHP Michael “Davert” Bodnarchuk • Создайте тестовую БД .через фикстуры https://github.com/fzaninotto/Faker http://symfony.com/doc/2.0/bundles/DoctrineFixturesBundle
  • 25.
    Советы TestGuy – эмулируемвашего тестировщика на PHP Michael “Davert” Bodnarchuk • Создавайте свои модули -для своего веб приложения
  • 26.
    Спасибо TestGuy – эмулируемвашего тестировщика на PHP Michael “Davert” Bodnarchuk • https://github.com/DavertMik/TestGuy_Standalone • davert@mail.ua