SlideShare a Scribd company logo
1 of 26
Download to read offline
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

More Related Content

What's hot

Плюсы и минусы автоматизации, пример из жизни
Плюсы и минусы автоматизации, пример из жизниПлюсы и минусы автоматизации, пример из жизни
Плюсы и минусы автоматизации, пример из жизниz-tech
 
Everything You Need to Know About WP_Query, WordCamp Russia 2014
Everything You Need to Know About WP_Query, WordCamp Russia 2014Everything You Need to Know About WP_Query, WordCamp Russia 2014
Everything You Need to Know About WP_Query, WordCamp Russia 2014Sergey Biryukov
 
Domain Specific Languages (for business rules)
Domain Specific Languages (for business rules)Domain Specific Languages (for business rules)
Domain Specific Languages (for business rules)Anton Arhipov
 
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...CodeFest
 
Codeception UATestingDays
Codeception UATestingDaysCodeception UATestingDays
Codeception UATestingDaysdavertmik
 
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...Andrey Rebrov
 
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...
Системное тестирование  приложений на Ruby on Rails с применением Rspec и Cap...Системное тестирование  приложений на Ruby on Rails с применением Rspec и Cap...
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...lshevtsov
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumРуководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumUladzimir Kryvenka
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoIlya Shalyapin
 
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium SQALab
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter..."Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...MoscowJS
 
Как взломать WordPress/Joomla за 5 минут
Как взломать WordPress/Joomla за 5 минутКак взломать WordPress/Joomla за 5 минут
Как взломать WordPress/Joomla за 5 минутPhilipp Kulin
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Первые шаги после установки WordPress
Первые шаги после установки WordPressПервые шаги после установки WordPress
Первые шаги после установки WordPressDarja Kruzhkova
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupTimophy Chaptykov
 
Python Meetup
Python Meetup Python Meetup
Python Meetup iQSpace
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneCodeFest
 

What's hot (20)

Плюсы и минусы автоматизации, пример из жизни
Плюсы и минусы автоматизации, пример из жизниПлюсы и минусы автоматизации, пример из жизни
Плюсы и минусы автоматизации, пример из жизни
 
Everything You Need to Know About WP_Query, WordCamp Russia 2014
Everything You Need to Know About WP_Query, WordCamp Russia 2014Everything You Need to Know About WP_Query, WordCamp Russia 2014
Everything You Need to Know About WP_Query, WordCamp Russia 2014
 
Domain Specific Languages (for business rules)
Domain Specific Languages (for business rules)Domain Specific Languages (for business rules)
Domain Specific Languages (for business rules)
 
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
 
Joo adm
Joo admJoo adm
Joo adm
 
Prezent
PrezentPrezent
Prezent
 
Codeception UATestingDays
Codeception UATestingDaysCodeception UATestingDays
Codeception UATestingDays
 
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
 
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...
Системное тестирование  приложений на Ruby on Rails с применением Rspec и Cap...Системное тестирование  приложений на Ruby on Rails с применением Rspec и Cap...
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumРуководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из Selenium
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и Django
 
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter..."Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
 
Как взломать WordPress/Joomla за 5 минут
Как взломать WordPress/Joomla за 5 минутКак взломать WordPress/Joomla за 5 минут
Как взломать WordPress/Joomla за 5 минут
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Первые шаги после установки WordPress
Первые шаги после установки WordPressПервые шаги после установки WordPress
Первые шаги после установки WordPress
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать Makeup
 
Python Meetup
Python Meetup Python Meetup
Python Meetup
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 

Viewers also liked

Viewers also liked (17)

Presentazione t2 e im 17 gen13 glm v05 base
Presentazione t2 e im 17 gen13 glm v05 basePresentazione t2 e im 17 gen13 glm v05 base
Presentazione t2 e im 17 gen13 glm v05 base
 
[Proposed] Vietnam Democracy Act of 2012
[Proposed] Vietnam Democracy Act of 2012[Proposed] Vietnam Democracy Act of 2012
[Proposed] Vietnam Democracy Act of 2012
 
Block
BlockBlock
Block
 
Thư Liên Bang - The Federalist Papers
Thư Liên Bang - The Federalist PapersThư Liên Bang - The Federalist Papers
Thư Liên Bang - The Federalist Papers
 
The Braun Foundation for International Exchange
The Braun Foundation for International ExchangeThe Braun Foundation for International Exchange
The Braun Foundation for International Exchange
 
Frameauditoverview
FrameauditoverviewFrameauditoverview
Frameauditoverview
 
Hiến pháp 7
Hiến pháp 7Hiến pháp 7
Hiến pháp 7
 
Lecture 3
Lecture 3 Lecture 3
Lecture 3
 
Dr. Alla Kirsch - Travel Clinics of America
Dr. Alla Kirsch - Travel Clinics of AmericaDr. Alla Kirsch - Travel Clinics of America
Dr. Alla Kirsch - Travel Clinics of America
 
Năm điều bác Hồ dạy
Năm điều bác Hồ dạyNăm điều bác Hồ dạy
Năm điều bác Hồ dạy
 
BCN_Style
BCN_StyleBCN_Style
BCN_Style
 
Couvade International
Couvade InternationalCouvade International
Couvade International
 
Where is Nowhere?
Where is Nowhere?Where is Nowhere?
Where is Nowhere?
 
100 câu hỏi thường gặp về Tân Hiến Pháp
100 câu hỏi thường gặp về Tân Hiến Pháp100 câu hỏi thường gặp về Tân Hiến Pháp
100 câu hỏi thường gặp về Tân Hiến Pháp
 
Thư Quốc Gia Việt Nam
Thư Quốc Gia Việt NamThư Quốc Gia Việt Nam
Thư Quốc Gia Việt Nam
 
Wahu wahu konsz
Wahu wahu konszWahu wahu konsz
Wahu wahu konsz
 
Hiến pháp 7 Đại Việt Dân Quốc
Hiến pháp 7 Đại Việt Dân QuốcHiến pháp 7 Đại Việt Dân Quốc
Hiến pháp 7 Đại Việt Dân Quốc
 

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

Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван ЗахарченкоSolit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченкоsolit
 
Looking into WordPress Core, WordCamp Russia 2015
Looking into WordPress Core, WordCamp Russia 2015Looking into WordPress Core, WordCamp Russia 2015
Looking into WordPress Core, WordCamp Russia 2015Sergey Biryukov
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 
Разработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruРазработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruJetStyle
 
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...it-people
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полнойОмские ИТ-субботники
 
Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)Pavel Novitsky
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Ontico
 
Magento code debugging
Magento code debuggingMagento code debugging
Magento code debuggingaheadWorks
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverIgor Khrol
 
TDD или как я стараюсь писать код
TDD или как я стараюсь писать кодTDD или как я стараюсь писать код
TDD или как я стараюсь писать кодMoscowDjango
 
непрерывная интеграция шаг к непрерывному деплою родионов игорь
непрерывная интеграция   шаг к непрерывному деплою родионов игорьнепрерывная интеграция   шаг к непрерывному деплою родионов игорь
непрерывная интеграция шаг к непрерывному деплою родионов игорьdrupalconf
 
Непрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойментуНепрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойментуИгорь Родионов
 
Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов ИгорьНепрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов ИгорьPVasili
 

Similar to TestGuy - эмулируем вашего тестировщика (20)

Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван ЗахарченкоSolit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
 
Looking into WordPress Core, WordCamp Russia 2015
Looking into WordPress Core, WordCamp Russia 2015Looking into WordPress Core, WordCamp Russia 2015
Looking into WordPress Core, WordCamp Russia 2015
 
Codeception - WTF?
Codeception - WTF?Codeception - WTF?
Codeception - WTF?
 
176023
176023176023
176023
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
Разработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruРазработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconru
 
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)
 
Magento code debugging
Magento code debuggingMagento code debugging
Magento code debugging
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
 
TDD или как я стараюсь писать код
TDD или как я стараюсь писать кодTDD или как я стараюсь писать код
TDD или как я стараюсь писать код
 
непрерывная интеграция шаг к непрерывному деплою родионов игорь
непрерывная интеграция   шаг к непрерывному деплою родионов игорьнепрерывная интеграция   шаг к непрерывному деплою родионов игорь
непрерывная интеграция шаг к непрерывному деплою родионов игорь
 
Непрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойментуНепрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойменту
 
Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов ИгорьНепрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
 
PowerShell
PowerShellPowerShell
PowerShell
 
Behavior Driven Development
Behavior Driven DevelopmentBehavior Driven Development
Behavior Driven Development
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 

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