Разработка, развитие и сопровождение авто-тестов<br />Сташевский Павел, 2010<br />
План мероприятия<br />Подумаем над тем, что будем автоматизировать.<br />Порассуждаем, как лучше автоматизировать. Положит...
У нас будет автоматизация тестирования!!!<br />У нас будет автоматизация!!!<br />У нас будет автоматизация!!!<br />Давайте...
Как это делается обычно<br />Мы пишем скрипты<br />Тестовые скрипты – тест-кейсы<br />Много скриптов, сколько можем написа...
Как выглядят эти скрипты?<br /><?php<br />class MyTest extends PHPUnit_Extensions_SeleniumTestCase<br />{<br />  protected...
Но тут возникает проблема<br />Это невозможно поддерживать<br />Используем только раз – для приемочного тестирования<br />...
Давайте тесты улучшать<br />Пока треугольные <br />Наши тесты<br />Базовое средство-драйвер<br />(Selenium RC + PHPUnit)<...
Чего хочу?<br />Наши тесты<br />Понятные (сел, понял, поменял)<br />Работаем с бизнес-логикой<br />Тесты не зависят от ин...
Так, стоп! Сейчас будем ковыряться в системе.<br />А чего собственно автоматизировать?<br />А может не стоит?<br />Писать ...
Картинка номер раз. Что будем тестировать?<br />Модуль2<br /><ul><li>Реализовано для основных объектов
Запускаются один раз в 4-5 дней</li></ul>Модуль1<br /><ul><li>Высокое покрытие (80%)
Запускаются один раз в 1-2 дня</li></ul>Модуль4<br /><ul><li>Быстрые тесты
Проверяют важный функционал (например, корзину)
Запускаются каждый день</li></ul>Модуль3<br /><ul><li>Долгие тесты
Запускаются один раз в 4-5 дней</li></ul>Проблемные места<br />
Все-таки, чего собственно автоматизируем?<br />Тестовые сценарии<br />Пользовательские сценарии<br />
Пример пользовательского сценария<br />
Как мы будем пользоваться тестами?<br />Приемочное тестирование<br />Заказчик доволен<br />Пишем тесты и стабилизируем<br ...
А давайте напишем свой тестовый фреймворк<br />Структурный подход<br />Процессный подход<br />Какие-то объекты<br />Какие-...
Решили: будем делать много объектов!<br />Публичная страница программы<br />Публичная страница<br />Описание программы<br ...
Тоже самое, только в классах<br />ProgramPublicPage<br />PublicPage<br />DescriptionArea<br />AuthForm<br />RubricPublicPa...
А теперь тест!<br />public function testViewProgram() {<br />	$oRubricPage = new RubricPublicPage();<br />	$oRubricPage->g...
А так для битриксовыхадминок<br />
А теперь код <br />$oLoginPage = new CSlLoginAdminPage();<br />$oLoginPage->login();<br />$oDetailOSPage = new CSlDetailO...
Будем делать по процессному походу<br />
Upcoming SlideShare
Loading in...5
×

Разработка и сопровождении авто-тестов (Selenium)

4,304

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
4,304
On Slideshare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
29
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Разработка и сопровождении авто-тестов (Selenium)

  1. 1. Разработка, развитие и сопровождение авто-тестов<br />Сташевский Павел, 2010<br />
  2. 2. План мероприятия<br />Подумаем над тем, что будем автоматизировать.<br />Порассуждаем, как лучше автоматизировать. Положительное и негативное тестирование.<br />А нужна ли архитектура в авто-тестах?<br />Попытаемся как-то оценить наши авто-тесты и выгоду от них.<br />
  3. 3. У нас будет автоматизация тестирования!!!<br />У нас будет автоматизация!!!<br />У нас будет автоматизация!!!<br />Давайте автоматизировать <br />
  4. 4. Как это делается обычно<br />Мы пишем скрипты<br />Тестовые скрипты – тест-кейсы<br />Много скриптов, сколько можем написать<br />Скрипт1<br />Скрипт2<br />Скрипт3<br />Скрипт<br />Скрипт<br />Скрипт<br />Скрипт<br />Скрипт<br />Скрипт<br />Скрипт<br />Скрипт<br />Скрипт<br />Именно тестовые скрипты<br />
  5. 5. Как выглядят эти скрипты?<br /><?php<br />class MyTest extends PHPUnit_Extensions_SeleniumTestCase<br />{<br /> protected function setUp() {<br />}<br /> public function testLogin() {<br />//здесь был селениум<br /> }<br /> public function testAddNews() {<br /> //здесь тоже был селениум<br />}<br /> public function testPresentNews() {<br /> //кругом одни евреи<br /> }<br />?><br />
  6. 6. Но тут возникает проблема<br />Это невозможно поддерживать<br />Используем только раз – для приемочного тестирования<br />Я не знаю, что делают эти тесты<br />Их писал Вася!..<br />
  7. 7. Давайте тесты улучшать<br />Пока треугольные <br />Наши тесты<br />Базовое средство-драйвер<br />(Selenium RC + PHPUnit)<br />Наш тестовый фреймворк<br />
  8. 8. Чего хочу?<br />Наши тесты<br />Понятные (сел, понял, поменял)<br />Работаем с бизнес-логикой<br />Тесты не зависят от интерфейса (только бизнес-логика)<br />И пишутся быстро<br />Наш тестовый фреймворк<br />Вся работа с селениумом<br />Локализация проблемы (правим только в одном месте)<br />В идеале: одын раз написал – сиди и работай<br />
  9. 9. Так, стоп! Сейчас будем ковыряться в системе.<br />А чего собственно автоматизировать?<br />А может не стоит?<br />Писать отдельные кейсы на каждую ЮСку или делать тестовые сценарии?<br />Как-то делить тесты по группам или пусть все в одной куче?<br />Тестировать все или может не все?<br />
  10. 10. Картинка номер раз. Что будем тестировать?<br />Модуль2<br /><ul><li>Реализовано для основных объектов
  11. 11. Запускаются один раз в 4-5 дней</li></ul>Модуль1<br /><ul><li>Высокое покрытие (80%)
  12. 12. Запускаются один раз в 1-2 дня</li></ul>Модуль4<br /><ul><li>Быстрые тесты
  13. 13. Проверяют важный функционал (например, корзину)
  14. 14. Запускаются каждый день</li></ul>Модуль3<br /><ul><li>Долгие тесты
  15. 15. Запускаются один раз в 4-5 дней</li></ul>Проблемные места<br />
  16. 16. Все-таки, чего собственно автоматизируем?<br />Тестовые сценарии<br />Пользовательские сценарии<br />
  17. 17. Пример пользовательского сценария<br />
  18. 18. Как мы будем пользоваться тестами?<br />Приемочное тестирование<br />Заказчик доволен<br />Пишем тесты и стабилизируем<br />Довольны все<br />Регрессионное тестирование<br />
  19. 19. А давайте напишем свой тестовый фреймворк<br />Структурный подход<br />Процессный подход<br />Какие-то объекты<br />Какие-то процессы<br />
  20. 20. Решили: будем делать много объектов!<br />Публичная страница программы<br />Публичная страница<br />Описание программы<br />Форма авторизации<br />Публичная страница рубрики<br />Меню<br />Список программ<br />
  21. 21. Тоже самое, только в классах<br />ProgramPublicPage<br />PublicPage<br />DescriptionArea<br />AuthForm<br />RubricPublicPage<br />RubricList<br />ProgramList<br />
  22. 22. А теперь тест!<br />public function testViewProgram() {<br /> $oRubricPage = new RubricPublicPage();<br /> $oRubricPage->getProgramList()->goToProgram($sName);<br /> $oProgramPage = new ProgramPublicPage();<br /> $oProgramPage->getRubricList()->isRibricSelected($sNameRubric);<br />}<br />А еще локаторы можно вынести в конфиги<br />
  23. 23. А так для битриксовыхадминок<br />
  24. 24. А теперь код <br />$oLoginPage = new CSlLoginAdminPage();<br />$oLoginPage->login();<br />$oDetailOSPage = new CSlDetailOSAdminPage();<br />$aValues = array(<br /> 'Active' => true,<br /> 'Name' => 'OS ' . time(),<br /> 'Sort' => 50<br />);<br />$oDetailOSPage->getForm()->fillFields($aValues);<br />$oDetailOSPage->getForm()->apply();<br />
  25. 25. Будем делать по процессному походу<br />
  26. 26. Тоже самое только в классах<br />
  27. 27. А теперь тест!<br />public function testViewProgram() {<br /> $oManager = new Manager();<br /> $oManager->addRubric($aValue1);<br /> $oManager->addProgram($aValue2);<br /> $oUser = new User();<br /> $oUser->viewRubric ($aValue1);<br /> $oUser->viewProgram($aValue2);<br />}<br />
  28. 28. Мат. часть. Сколько вешать в граммах? <br />Сколько автоматизировать?<br />Считаем покрытие фич (ЮСок) <br />
  29. 29. ТоварищЪ, можно пойти дальше! И собирать метрики <br />Время выполнения авто-тестов<br />Количество тестов<br />Количество стабильных тестов (о__О, очень важно)<br />Количество багов, найденных авто-тестами<br />
  30. 30. У матросов нет вопросов???<br />Сташевский Павел<br />email: pavel.stashevskiy@softline.ru<br />Skype: pavel.stashevsky_sl<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×