Руководство по приготовлению бутербродов из selenium
DESCRIPTION
Моя презентация к докладу “Руководство по приготовлению бутербродов из Selenium” с которой я выступил на Selenium Camp в Киеве 25 февраля 2012 года.TRANSCRIPT
Руководство по приготовлению бутербродов из
Selenium
Uladzimir KryvenkaФевраль 2012
Обо мне
Инструменты: Selenium, Coded UI Test
Один из основателей:Пишу блог:
В тестировании 5+ лет
Автор портала:
Автоматизацией занимаюсь 2+ года
Это я:
Работаю: Head of QA в Paralect
Опыт:
Сегодня в меню
• Аперитив • Готовим бутерброды• Пробуем на вкус• Итоги• Десерт
Наш продукт
• Используется более чем в 50 странах мира• Наши клиенты: Microsoft, Volvo, Lenovo, FBI, Harvard и многие другие
www.easyprojects.net
Easy Projects .NET is a web-based project management tool, making team collaboration hassle-free and straightforward.
Проблемы
• Слишком долго• Много рутины• Неожиданные ошибки• Сложности при выпуске билдов
Решение
Автоматизация!
Почему Selenium RC?
• Натренировались на Selenium IDE• Умеет делать все, что нужно• Много документации• …• Ну тут вы все знаете
Проблемы в тестах
• Прямолинейно• Непонятно• Мудреные локаторы• Сложно править• Повторное использование кода
Решения
• DSL (Domain-specific language)• Page Object pattern• Page Element pattern
Ингредиенты
• Microsoft Visual Studio• C#• MS Test• Selenium RC
ButerbroD в разрезе
Точка входа
Инициализация…
public StateS(string host, int port, string browser, string url) { KillBrowser(); Processor = new HttpCommandProcessor(host, port, browser, url); Selenium = new DefaultSelenium(Processor); Selenium.Start(); Selenium.WindowMaximize(); Selenium.WindowFocus(); }
Selenium Document
• Имплементация команд Selenium-а• Создаем обертки для команд• Начинаем формировать свой DSL
Элементы страниц
Toggle Button
MenuListAlertFrameComboBoxAttach Table
• Activate()• Check()• Deactivate()• IsChecked()• …
• Activate()• Check()• Deactivate()• IsChecked()• …
Text Field
• TypeText()• IsEditable()• GetValue()• ClearText()• …
• TypeText()• IsEditable()• GetValue()• ClearText()• …
Button
• Click()• ClickAndWait()• DoubleClick()• MouseDown()• …
• Click()• ClickAndWait()• DoubleClick()• MouseDown()• …
Страницы
Страницы
• Создаем абстракцию страницы• Описываем свойства страницы• Описываем элементы страницы• Описываем проверки страницы
Из чего состоит любой тест
Атомарные действия• Минимальное логическое действие
Шаги в любом ручном тесте
Составные действия
Организовываем действия
Тест-кейсы
Пример тест-кейса
public static CreateActivity TestActivity() { return new CreateActivity() { LoginCase = Login.AsAdministrator, CreateStep = new Actions.Composite.Activity.Create() .WithAttach(InputDataConf.AttachSmallFile, "attach for a project") .WithNameAndProject(“TestActivity", “TestProject") .WithStartDateWithShift(0, +1, 0) .WithType("Request") .WithPriority("Urgent") .WithDuration ("55") .WithProgress ("80") .WithEstimatedHours("1.00") .WithMember("Administrator") .WithMember("Den") .WithMember("Project Manager") }; }
А можно и так
public static CreateActivity ActivityForProjectMessageboardTest() { return new CreateActivity() { LoginCase = Login.AsAdministrator, CreateStep = new Actions.Composite.Activity.Create() .WithStartDateWithShift(0, 0, -2) .WithEndDateWithShift(0, +1, 0) .WithProject("ProjectForProjectMessageboardTest")
.WithName("ActivityForProjectMessageboardTest") }; }
Пару слов о Coded UI Test
Selenium + Coded UI
Логирование
• Каждый уровень ButerbroD-a логируется
[C] Login as 'TestUser', ‘password': [A] Filling login credentials: [E] Set 'TestUser' to input field 'TextField [id: login]': [D] Typing 'TestUser' in 'TextField [id: login]'. [E] Set '123456' to input field 'TextField [id: pass]': [D] Typing '123456' in 'TextField [id: pass]'. [P] Check is no error message appear:
Демо
Плюсы
• Легко• Понятно• Гибко• Расширяемо
Минусы
• Долгий старт• Не всегда гибко• Нужно думать
Результаты
• > 500 авто-тестов• 120 тестовых наборов• > 55% покрытия кода• > 80% покрытия требований• Приёмочное тестирование не требует
вмешательства людей
Приправы по вкусу
• Распараллеливание тестов• Сопровождаемость• Максимум пользы• Надежность• Оптимизация• Покрытие кода
Планы на будущее
• Selenium WebDriver?• Open source
… осталось еще совсем немного
А теперь ваши
-ы