testguy - эмулируем вашего тестировщика
DESCRIPTION
TRANSCRIPT
![Page 1: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/1.jpg)
Michael “Davert” Bodnarchuk
http://github.com/DavertMik
TestGuy – эмулируем вашего тестировщика на PHP
![Page 2: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/2.jpg)
Почему мы не пишем функциональные
тесты?
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
![Page 3: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/3.jpg)
Что здесь происходит?
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.');}
![Page 4: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/4.jpg)
Какими должны быть функциональные
тесты?
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
![Page 5: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/5.jpg)
легко писатьлегко читатьлегко отлаживать
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
![Page 6: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/6.jpg)
Представим себя на месте тестировщика….
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
![Page 7: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/7.jpg)
Так появился TestGuy
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
![Page 8: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/8.jpg)
Features!
1. Лаконичность.2. Автодополнения…
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
![Page 9: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/9.jpg)
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
![Page 10: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/10.jpg)
Features!
3. Модульность4. Основан на PHPUnit
5. Отладка…
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
![Page 11: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/11.jpg)
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
![Page 12: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/12.jpg)
Features!
6. Bootstrap переменные в тесте
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
![Page 13: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/13.jpg)
Начальные условия:am
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
amOnPageamLoggedAs…
![Page 14: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/14.jpg)
Действия:
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
clicksubmitFormsendAjaxRequest…
![Page 15: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/15.jpg)
Результат:see
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
seedontSeeseeInUrlseeCheckboxIsCheckedseeInField…
![Page 16: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/16.jpg)
Комментарии:
wantTowantToTestamGoingToexpectTo
…
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
![Page 17: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/17.jpg)
Архитектура
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
• Core – надстройка над PHPUnit, выполняющая сценарии (основана на PHPUnit BDD).
• Модули – независимые компоненты для взаимодействия с приложением. (веб, БД, что угодно…)
• Cli – консоль (Symfony Console)
![Page 18: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/18.jpg)
Конфигурация
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
• Пишется в Yaml• Позволяет задать несколько независимых сюит для тестирования
• Указывает необходимые модули.
![Page 19: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/19.jpg)
Пример
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:
![Page 20: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/20.jpg)
Установка
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
Инструкции и код тут:
https://github.com/DavertMik/TestGuy_Standalone
![Page 21: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/21.jpg)
Установка
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
php testguy.phar install
php testguy.phar init
php testguy.phar build
php testguy.phar run
![Page 22: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/22.jpg)
Модули
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
• Web• DbPopulator• Filesystem• Cli
![Page 23: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/23.jpg)
Советы
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
• Обязательно пишите тесты перед рефакторингом.
• Не тестируйте мелочи: не привязывайтесь к верстке, к промежуточным результатам, т.п.
![Page 24: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/24.jpg)
Советы
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
• Создайте тестовую БД через фикстуры.
https://github.com/fzaninotto/Faker
http://symfony.com/doc/2.0/bundles/DoctrineFixturesBundle
![Page 25: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/25.jpg)
Советы
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
• Создавайте свои модули для своего веб-приложения
![Page 26: TestGuy - эмулируем вашего тестировщика](https://reader030.vdocuments.net/reader030/viewer/2022020716/54909c12b47959072a8b4d68/html5/thumbnails/26.jpg)
Спасибо
TestGuy – эмулируем вашего тестировщика на PHP
Michael “Davert” Bodnarchuk
• https://github.com/DavertMik/TestGuy_Standalone