26
Michael “Davert” Bodnarchuk http://github.com/DavertMik TestGuy – эмулируем вашего тестировщика на PHP

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

Embed Size (px)

DESCRIPTION

 

Citation preview

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

Michael “Davert” Bodnarchuk

http://github.com/DavertMik

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

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

Почему мы не пишем функциональные

тесты?

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

Michael “Davert” Bodnarchuk

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

Что здесь происходит?

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 - эмулируем вашего тестировщика

Какими должны быть функциональные

тесты?

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

Michael “Davert” Bodnarchuk

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

легко писатьлегко читатьлегко отлаживать

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

Michael “Davert” Bodnarchuk

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

Представим себя на месте тестировщика….

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

Michael “Davert” Bodnarchuk

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

Так появился TestGuy

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

Michael “Davert” Bodnarchuk

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

Features!

1. Лаконичность.2. Автодополнения…

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

Michael “Davert” Bodnarchuk

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

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

Michael “Davert” Bodnarchuk

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

Features!

3. Модульность4. Основан на PHPUnit

5. Отладка…

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

Michael “Davert” Bodnarchuk

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

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

Michael “Davert” Bodnarchuk

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

Features!

6. Bootstrap переменные в тесте

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

Michael “Davert” Bodnarchuk

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

Начальные условия:am

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

Michael “Davert” Bodnarchuk

amOnPageamLoggedAs…

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

Действия:

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

Michael “Davert” Bodnarchuk

clicksubmitFormsendAjaxRequest…

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

Результат:see

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

Michael “Davert” Bodnarchuk

seedontSeeseeInUrlseeCheckboxIsCheckedseeInField…

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

Комментарии:

wantTowantToTestamGoingToexpectTo

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

Michael “Davert” Bodnarchuk

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

Архитектура

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

Michael “Davert” Bodnarchuk

• Core – надстройка над PHPUnit, выполняющая сценарии (основана на PHPUnit BDD).

• Модули – независимые компоненты для взаимодействия с приложением. (веб, БД, что угодно…)

• Cli – консоль (Symfony Console)

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

Конфигурация

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

Michael “Davert” Bodnarchuk

• Пишется в Yaml• Позволяет задать несколько независимых сюит для тестирования

• Указывает необходимые модули.

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

Пример

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 - эмулируем вашего тестировщика

Установка

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

Michael “Davert” Bodnarchuk

Инструкции и код тут:

https://github.com/DavertMik/TestGuy_Standalone

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

Установка

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

Michael “Davert” Bodnarchuk

php testguy.phar install

php testguy.phar init

php testguy.phar build

php testguy.phar run

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

Модули

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

Michael “Davert” Bodnarchuk

• Web• DbPopulator• Filesystem• Cli

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

Советы

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

Michael “Davert” Bodnarchuk

• Обязательно пишите тесты перед рефакторингом.

• Не тестируйте мелочи: не привязывайтесь к верстке, к промежуточным результатам, т.п.

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

Советы

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

Michael “Davert” Bodnarchuk

• Создайте тестовую БД через фикстуры.

https://github.com/fzaninotto/Faker

http://symfony.com/doc/2.0/bundles/DoctrineFixturesBundle

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

Советы

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

Michael “Davert” Bodnarchuk

• Создавайте свои модули для своего веб-приложения

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

Спасибо

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

Michael “Davert” Bodnarchuk

• https://github.com/DavertMik/TestGuy_Standalone

[email protected]