Selenium RC + python: история одного проекта

39
Константи н Прищенко Selenium RC и Python: История одного проекта

description

Краткая история автоматизации тестирования с использованием Selenium RC и Python. Выбор способа организации тестов (Selenium IDE, Page Object модель и ее модификация). Преимущества и недостатки от использования каждого из способов. Способы хранения локаторов и их сравнение. Описание фреймворка py.test, базовый пример интеграции тестов и их использования.

Transcript of Selenium RC + python: история одного проекта

Page 1: Selenium RC + python: история одного проекта

Константин Прищенко

Selenium RC и Python:История одного проекта

Page 2: Selenium RC + python: история одного проекта

Содержание

Введение

Selenium IDE

Использование mapping-файла

PageObject model

Modified PageObject model

Введение в py.test

Заключение

Page 3: Selenium RC + python: история одного проекта

Введение

Page 4: Selenium RC + python: история одного проекта

Введение

Server:OS Ubuntu Linux

Workstation:OS Windows XP/7

Workstation:Mac OS X

Page 5: Selenium RC + python: история одного проекта

Selenium IDE

Page 6: Selenium RC + python: история одного проекта

Selenium IDE

Page 7: Selenium RC + python: история одного проекта

Selenium IDE

Page 8: Selenium RC + python: история одного проекта

Selenium IDE

Преимущества:

Простота написания тестов с использованием такого метода

Недостатки:

Очень много повторяющегося кода.

Локаторы объектов хранятся в тесте.

Page 9: Selenium RC + python: история одного проекта

Внешний файл для хранения локаторов

Page 10: Selenium RC + python: история одного проекта

Использование mapping-файла

Для обеспечения лучшего контроля вынесем объявление всех локаторов в отдельное хранилище.

Это может быть xml-файл:

Page 11: Selenium RC + python: история одного проекта

Использование mapping-файла

Это может быть cfg/ini-файл:

Был выбран для использования cfg-файл из-за простоты реализации и поддержки.

Page 12: Selenium RC + python: история одного проекта

Использование mapping-файла

Пример кода для работы с cfg-файлом:

В итоге мы получаем возможность получать локатор:

Page 13: Selenium RC + python: история одного проекта

Использование mapping-файла

Page 14: Selenium RC + python: история одного проекта

Использование mapping-файла

Преимущества данного подхода:

Если локатор меняется – его необходимо обновить только в одном месте;

Повышается читабельность кода – имена локаторов позволяют понять логику теста;

Page 15: Selenium RC + python: история одного проекта

Использование Page Object модели

Page 16: Selenium RC + python: история одного проекта

PageObject модельМодель сайта:

MainPage

Sign in

Open ent.page

EntertainmentPage

Open music view

MusicPage

Sort by Music style

Show only

Page 17: Selenium RC + python: история одного проекта

PageObject модель

Для данной модели необходимо использовать mapping-файл с отдельной секцией для каждой страницы.

Page 18: Selenium RC + python: история одного проекта

PageObject модель

Пример класса для базовой страницы:

Создание объекта:

Page 19: Selenium RC + python: история одного проекта

PageObject модель

Пример класса для базовой страницы:Нажатие на кнопку/ссылку:

Page 20: Selenium RC + python: история одного проекта

PageObject модель

Пример класса для страницы:

Page 21: Selenium RC + python: история одного проекта

PageObject модель

Page 22: Selenium RC + python: история одного проекта

PageObject модель

Данный подход позволяет:

Улучшить структуру тестов;

Уменьшить повторяемость кода;

Увеличить читабельность кода;

Упрощается поддержка тестов в случае изменения тестируемого приложения.

Page 23: Selenium RC + python: история одного проекта

Использование модифицированной Page Object модели

Page 24: Selenium RC + python: история одного проекта

Modified PageObject модельМодель сайта:

Page model

Is text on page

Reload

Close

Link model

Click

Double clickTextField

model

Set text Get text Verify text

Page model

Is text on page

Reload

Close

Link model

Click

Double clickTextField

model

Set text Get text Verify text

Page 25: Selenium RC + python: история одного проекта

Modified PageObject модель

Выделим следующий элемент в логической структуре PageObject модели — объект элемента страницы, что обеспечит:

Улучшенную структуру объектов страниц;

Уменьшит повторяемость кода;

Уменьшит время на ознакомление с общей моделью.

Page 26: Selenium RC + python: история одного проекта

Modified PageObject модель

Данный подход позволит поместить необходимые проверки во внутрь методов элементов:

Page 27: Selenium RC + python: история одного проекта

Modified PageObject модельДанный подход не изменяет внешнего вида теста.

Page 28: Selenium RC + python: история одного проекта

Modified PageObject модель

С помощью данного подхода упрощается работа с о специфическими элементами различных библиотек.

Например JSON ComboBox-элемент: поле для ввода, кнопка и div-секции со всеми возможными элементами.

Page 29: Selenium RC + python: история одного проекта

Modified PageObject модель

Page 30: Selenium RC + python: история одного проекта

Введение в py.test

Page 31: Selenium RC + python: история одного проекта

Введение в py.test

Система разработана Holger Krekel-ом.Инсталляция:

easy_install pytest

pip install pytest

Запуск через командную строку: py.test

Page 32: Selenium RC + python: история одного проекта

Введение в py.test

Стандартные операции ввода/вывода показываются только в случае ошибки

Автоматическое распознование тестов: ищутся все файлы test_*.py внутри файлов ищутся все функции test_* и все Test

классы.

Page 33: Selenium RC + python: история одного проекта

Введение в py.test

Для верификации значений в тесте используется assert:

Page 34: Selenium RC + python: история одного проекта

Введение в py.test

Можно пропустить тест:

Можно пропустить тест при условии:

Можно пометить тест как негативный:

Можно пометить тест своей собственной меткой:

Page 35: Selenium RC + python: история одного проекта

Введение в py.test

Page 36: Selenium RC + python: история одного проекта

Заключение

Page 37: Selenium RC + python: история одного проекта

Заключение

Page 38: Selenium RC + python: история одного проекта

Заключение

По-моему мнению, связка Selenium RC + py.test с использованием PageObject модели для автоматического тестирования является наиболее оптимальной.

Построенный фреймворк позволил использовать тесты для: проверки новой версии приложения (BVT); полной проверки приложения (full regression); выборочной проверки выбранных модулей; организации помощи ручному тестированию.

Page 39: Selenium RC + python: история одного проекта

Спасибо за внимание!

Copyright © 2011 SoftServe, Inc.

Контакты

Прищенко Константин

[email protected]