Структура статьи:
1.1. Под Windows.
1.2. Проверка установки.
2.3. Экспорт тестов Selenium в RobotFramework.
3. Процесс разработки тестов при помощи RobotFramework.
3. Процесс разработки тестов при помощи RobotFramework.
1. Установка и настройка
Рекомендуется ознакомиться с вводными статьями по использованию RobotFramework (далее сокращенно RF):
- возможности: http://automated-testing.info/tools/robot-framework
- быстрый старт: http://cryptrat.wordpress.com/2010/09/19/автоматизация-тестирования-веб-прил/
- официальное руководство пользователя по версиям: http://code.google.com/p/robotframework/wiki/UserGuide
- описание стандартных библиотек и подключение внешних библиотек для тестирования специализированных приложений (например, Selenium):http://code.google.com/p/robotframework/wiki/TestLibraries
- домашняя страничка, откуда можно скачать все нужные модули и получить информацию, указанную далее: http://code.google.com/p/robotframework/
Далее описаны шаги для полной установки RobotFramework. Необходимо скачивать инсталляторы только для конкретной системы: 64-х или 32-х битной.
1.1. Под Windows:
- Скачать и установить JDK 6: http://www.oracle.com/technetwork/java/javase/downloads/index.html
- Добавить переменную окружения JAVA_HOME и установить ей значение - каталог с JDK, например, JAVA_HOME='c:\Program Files (x86)\Java\jdk1.6.0_27\'
- Добавить в значение переменной окружения Path строку:;%JAVA_HOME%bin
- Скачать и установить Python, v.2.7.3: http://www.python.org/, например, в каталог c:\Python27\
- Добавить переменную окружения PYTHON_HOME и установить ей значение - каталог с Питоном, например, PYTHON_HOME='c:\Python27\'
- Добавить в значение переменной окружения Path строку: ;%PYTHON_HOME%;%PYTHON_HOME%Scripts
- Скачать Jython, последнюю стабильную версию, например, v.2.5.2: http://www.jython.org/downloads.html
- Для установки Jython в консоли перейти в каталог со скачанным файлом jython_installer-<version>.jar и набрать команду: java -jar jython_installer-<version>.jar, при установке для Installation type выбрать первую опцию All, каталог установки, например, c:\jython25, остальные значения по умолчанию.
- Добавить переменную окружения JYTHON_HOME и установить ей значение - каталог с Jython, например, JYTHON_HOME='c:\jython25\'
- Добавить в значение переменной окружения Path строку: ;%JYTHON_HOME%;%JYTHON_HOME%bin
- Скачать и установить RobotFramework, например, v.2.7.x (robotframework-2.7.1.win32.exe):http://code.google.com/p/robotframework/
- Скачать и установить SeleniumLibrary последней версии: http://code.google.com/p/robotframework-seleniumlibrary/downloads/list
- Скачать и установить Selenium2Library последней версии (обязателен для поддержки Selenium 2): https://github.com/rtomac/robotframework-selenium2library/downloads
- Скачать и установить интегрированную среду разработки RIDE для RobotFramework: http://code.google.com/p/robotframework-ride/
- Для возможности запуска RIDE нужно скачать и установить в каталог %PYTHON_HOME%Lib\site-packages надстройку wxPython (например, wxPython2.8-win32-unicode-py27):http://wxpython.org/download.php#stable
1.2. Проверка установки:
- Запустить cmd, набрать: java -version, должна появиться информация вида: "java version "1.6.0_27" Java(TM) SE Runtime Environment (build 1.6.0_27-b07) Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)".
- Запустить cmd, набрать: python --version, должна появиться информация вида: "Python 2.7.3".
- Запустить cmd, набрать: pybot --version, должна появиться информация вида: "Robot Framework 2.7.1 (Python 2.7.3 on win32)".
- Запустить RIDE, для этого запустить cmd, набрать: ride.py, должен запуститься RIDE. Для упрощения дальнейшей работы, рекомендуется сделать ярлык быстрого запуска для RIDE. Он запускается файлом %PYTHON_HOME%Scripts\ride.py. При правильно установленном Питоне достаточно просто щёлкнуть по нему.
2. Подготовка к тестированию
Писать тесты для RobotFramework можно как при помощи интегрированной среды разработки RIDE, так и в обычном текстовом редакторе. RobotFramework использует ключевые слова (keywords) для написания тестов. Эти ключевые слова содержатся в стандартных библиотеках: BuiltIn, OperatingSystem, Telnet, Collections, String, Dialogs, Screenshot и в подключаемых внешних библиотеках, таких как Selenium2Library и др.
Хранить и разрабатывать тесты можно в различных форматах. Как наиболее простой рекомендуется формат reStructuredText (reST), в котором тест-кейсы, тест-сьюты, ресурсы и файл инициализации пишутся в обычном текстовом файле с разделением команд и данных двумя пробелами. Для текста должна использоваться кодировка UTF-8. Подробнее о форматах тестовых файлов:
http://robotframework.googlecode.com/hg/doc/userguide/RobotFrameworkUserGuide.html?r=2.7.1#creating-test-data
http://robotframework.googlecode.com/hg/doc/userguide/RobotFrameworkUserGuide.html?r=2.7.1#creating-test-data
2.1. Структура тестов RobotFramework
Рекомендуется придерживаться следующей иерархии тестов:
- Глобальный каталог(общий каталог с тест-кейсами и тест-сьютами всех типов)
- init-тест (текстовый файл с глобальными переменными, общими настройками для всех тест-сьютов и тестовой документацией)
- библиотека с ресурсами (текстовый файл, в котором хранятся стандартные команды RF, общие для всех проектов)
- тест-сьют (текстовый файл, в котором хранятся специфические настройки и переменные для конкретного типа тестов, а также сами тест-кейсы)
- тест-кейсы (команды, которые непосредственно выполняют отдельные тестовые проверки и хранятся в файле тест-сьюта)
Для реализации предлагаемой иерархии необходимо для каждого проекта:
- Создать глобальный каталог <project_work_dir>\test\front_end\rf
- Создать в нем текстовый файл __init__.txt. В этом файле ведется тестовая документация. кроме того, RF сразу воспринимаем каталог с таким файлом как каталог с тестами.
- Создать или скопировать из другого проекта текстовый файл со стандартными ресурсами (командами RF) resource.txt. В нем должны подключаться все необходимые стандартные библиотеки, указываться глобальные переменные для всех тест-сьютов, реализовываться стандартные проверки.
- Создать текстовый файл тест-сьют, например, <project_name>_Test_suite_CRUD.txt, в котором будут храниться тест-кейсы и могут быть описаны локальные переменные, необходимые для работы тест-сьюта. Также здесь подключается файл со стандартными ресурсами resource.txt.
- Внутри тест-сьюта в разделе описания тест-кейсов создавать обычные тесты, давая им наименования согласно тест-плана.
После этого можно редактировать тест-кейсы, например, в Notepad++ или выполнить команду "Open Directory" в RIDE, для редактирования всего тестового проекта.
2.2. Возможные разделы в файле с тестами RF и их формат
*** Settings ***
# В данном разделе описываются все подключаемые библиотеки и ресурсы, тестовая документация, настройки тест-сьюта (или тест-кейса).
Например:
*** Settings ***
Documentation CRUD-тесты. # После этого ключевого слова можно приложить тестовую-документацию. Допускается форматирование * и _ : *полужирное*, _курсив_, _*полужирный курсив*_
Suite Teardown Close All Browsers # В конце исполнения тест-сьюта закрываем все браузеры.
Test Teardown Capture Screenshot # В случае провала теста - делаем скриншот.
Default Tags 1 # Указание тегов по умолчанию для новых тест-кейсов. В качестве тегов можно использовать разделение тестов по приоритетам или логическим модулям.
Test Timeout 5 minutes # Таймаут тест-кейсов = 5 мин.
Library BuiltIn # Подключаем стандартную библиотеку.
Library SeleniumLibrary # Подключаем библиотеку расширения функционала RF, содержащую команды Selenium.
Resource resource.txt # Подключаем файл с ресурсами (если они есть).
*** Variables ***
# В данном разделе указываются переменные, которые могут быть глобальными, если они описаны для всего тест-кейса.
Например:
*** Variables ***
${login_doctor} doctor # Создаем глобальную переменную login_doctor, с текстовым значением 'doctor'.
${pwd_doctor} 123456 # Создаем глобальную переменную pwd_doctor, с числовым значением 123456. RF делает автоматическое преобразование типов данных, в зависимости от ситуации.
${browser} ff # Для выполнения тестов указываем браузер firefox.
${mainProject} http://10.10.31.14:8080/arm-telemedicine # Создаем глобальную переменную mainProject, которой присваиваем в качестве значения URL на тестируемый проект.
*** Keywords ***
# В данном разделе на основе имеющихся стандартных команд RF или команд из подключаемых библиотек, могут быть созданы новые составные пользовательские команды.
Например:
*** Keywords ***
Open Login Page # Название нового пользовательского ключевого слова.
Open Browser ${mainProject} ${browser} # Открываем браузер и переходим по URL тестируемого проекта.
Maximize Browser Window # Разворачиваем браузер на весь экран.
Set Selenium Speed 500 # Устанавливаем скорость выполнения команд Selenium.
Title Should Be Login Page # Проверям наличие надписи 'Login Page'.
После этого, вместо того, чтобы каждый раз писать в тест-кейсах команды для подключения к страничке авторизации (логина), можно просто писать команду Open Login Page.
*** Test Cases ***
# В данном разделе описываются имена тест-кейсов и команды внутри них. Дополнительно каждый тест-кейс может иметь собственные настройки и локальные переменные.
Например:
0_1_00_000_Enter_system_Main
[Documentation] *AUTHOR:* Т.М. Гильмуллин\n*TEST PRIORITY:* 0\n*SPEC ID:* \n*OVERVIEW:* Описываются все глобальные переменные. # Дополнительная документация по тест-кейсу.
[Tags] 0 ARM_Main # Собственные теги тест-кейса.
Open Login Page # Используем созданное пользователем ключевое слово.
Call Selenium Api waitForPageToLoad 20000 # Используем команду Selenium из подключенной библиотеки SeleniumLibrary.
Input Text login ${login_doctor} # Вводим логин.
Input Text password ${pwd_doctor} # Вводим пароль.
Call Selenium Api click //*[@'submit']/input # Щелкаем на кнопку 'Подтвердить вход'.
Некоторые разделы могут отсутствовать, например, для файла с ресурсами не нужно описывать тест-кейсы, а в файлах тест-кейсов не обязателен раздел ключевых слов. Можно также вообще не разделять тесты RF по отдельным файлам, а все разделы вести внутри одного текстового файла. Кроме того, переменные и ресурсы, описанные в файле __init__.txt не будут доступны во всей иерархии тестов. Это нужно учитывать и описывать глобальные переменные в ресурсах, а локальные переменные - в тест-сьютах.
2.3. Экспорт тестов Selenium в RobotFramework
Тесты, ранее разработанные в Selenium можно перевести в формат RF. Для этого нужно использовать форматер robotframework-rc, оригинал форматера:
http://blog.codecentric.de/en/2012/02/recording-robot-framework-keywords-with-selenium-ide/
http://blog.codecentric.de/en/2012/02/recording-robot-framework-keywords-with-selenium-ide/
Добавление форматера в Selenium IDE:
- Открываем настройки форматирования текста: Selenium IDE - Options - Options..., вкладка Formats.
- Добавляем новый форматер: нажимаем кнопку Add.
- В появившемся диалоге заполняем поля:- Name of the format: "robotframework-rc";- код самого парсера копируем со странички: https://github.com/denschu/selenium-ide-format-robotframework и вставляем в текстовое поле форматера. Нажимаем Save.
- Закрываем диалог опций, перезапускаем Selenium IDE. В меню Selenium IDE - Options - Clipboard Format должен появиться пункт меню robotframework-rc. Выбираем его.
- Eсли выделить кусок теста и скопировать его в буфер обмена, то он будет отформатирован по стандарту RobotFramework.
Можно придерживаться следующего плана разработки тестов для RF:
- Описывается алгоритм действий в тесте в виде последовательности шагов, понятных инженеру-тестировщику, аналогично, как описывается задача для ручных тестировщиков.
- Например:
- выполнить такие-то подготовительные действия;
- запустить такую-то программу;
- выполнить такой-то сценарий действий;
- выполнить заключительные действия по формированию лога. - Каждому шагу алгоритма дается понятный перевод, в результате получаем тест-кейс, состоящий из ключевых слов самого высокого уровня (high-level keywords).
- В ресурсном файле описываем реализацию этих ключевых слов.
- Если не удаётся описать новые ключевые слова используя уже имеющиеся команды RF или для расширения функционала, можно подключить внешние python-модули, в которых реализовать ключевые слова как соответствующие функции.