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

Preview:

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

• davert@mail.ua

Recommended