Robot Framework – это общая структура автоматизации тестирования с открытым исходным кодом для тестирования. Это структура тестирования, управляемая ключевыми словами, которая использует синтаксис данных тестовых данных. У него простой синтаксис, используя читаемые на человеку ключевые слова. Эта структура не зависит от операционной системы и применения. Основная структура реализуется с использованием Python, а также работает на Jython (JVM) и Ironpython (.net). Эта структура обеспечивает поддержку внешних библиотек, инструментов, которые являются открытым исходным кодом и могут использоваться для автоматизации тестирования.
Тестовые данные находятся в простом табличном формате. При запуске структура робота обрабатывает данные, выполняет тестовые случаи и генерирует журналы и отчеты.
Установка и настройка Robot Framework
Предварительные условия:
- Установка Python
- Пип
- сделать виртуальную среду
Установка рамки робота с PIP
Python -M PIP установить роботфрейм -класс
Python3 -m Pip установить роботфрейм -класс
После успешной установки вы сможете выполнить созданные сценарии бегуна (робот и рекон) с опцией -в результате и получить как Robot Framework, так и версии интерпретатора:
$ robot --version Robot Framework 3.0 (Python 2.7.10 on linux2) $ rebot --version Rebot 3.0 (Python 2.7.10 on linux2)
Обновление [необязательно]
Установка PIP -обновление RobotFrameWork
Использование сценариев Robot и REPOT
Начиная с Robot Framework 3.0, тесты выполняются с использованием сценария робота и результатов после обработки сценария REBOT:
robot tests.robot rebot output.xml
Установка необходимых библиотек
PIP установить запросы RobotFrameWork-Selenium2Library RobotFramework-PageObjectLibrary
Установка IDE
- Установите pycharm или любую предпочтительную IDE
Импорт Требуется библиотеки в IDE. В Pycharm,
- Чтобы добавить переводчика проекта, перейдите к
Файлы
=>Настройки
=>Проект:
=>Переводчик проекта
а затем добавьте версию Python, доступную через вашу виртуальную среду. - Также добавьте необходимые библиотеки, такие как:
Селен
,RobotFramework-Seleniumlibrary
,RobotFrameWork-PageObjectLibrary
Анкет
- Чтобы добавить переводчика проекта, перейдите к
Сделайте файл робота в тестовой папке, например:
robotbddexample/test/login.robot
Разделы данных тестирования
Используемые данные определяются в разных разделах в рамках робота. Эти разделы часто называют таблицами.
- Настройки: Этот раздел используется для импорта тестовых библиотек, файлов ресурсов и файлов переменных.
- Переменные: переменные, которые можно использовать в других частях тестовых данных, определены в этом разделе.
- Тестовые случаи: В этом разделе тестовые примеры создаются из доступных ключевых слов.
- Задачи: В этом разделе задачи создаются с использованием доступных ключевых слов.
- Ключевые слова: ключевые слова пользователя создаются с использованием существующих ключевых слов нижнего уровня.
- Комментарии: Этот раздел содержит дополнительные комментарии или данные, которые игнорируются Robot Framework.
Эти разделы распознаются по ряду заголовка. Рекомендуемый формат заголовка – *** Настройки ** *
. Тем не менее, заголовок нечувствителен к случаям, окружающие пространства являются необязательными, а количество символов звездочки может варьироваться до тех пор, пока в начале есть одна звездочка.
Тестовые примеры Robot Framework могут быть записаны в пространстве, разделенном в формате простого текста. В разделенном пространстве формате два или более пространства используются в качестве разделителя между различными элементами данных.
*** Settings *** Documentation Example using the space separated plain text format. Library OperatingSystem *** Variables *** ${MESSAGE} Hello, i am robo! *** Test Cases *** My Test [Documentation] Example robot test Log ${MESSAGE} My keyword /lorem.txt Another Test Should Be Equal ${MESSAGE} Hello, i am robo! *** Keywords *** My Keyword [Arguments] ${path} File Should Exist ${path}
Чтобы сделать разделение более прозрачным, может использоваться формат отделения трубы.
| *** Settings *** | | Documentation | Example using the pipe separated plain text format. | Library | OperatingSystem | *** Variables *** | | ${MESSAGE} | Hello, i am robo! | *** Test Cases *** | | | | My Test | [Documentation] | Example robo test | | | Log | ${MESSAGE} | | | My Keyword | /lorem.txt | | Another Test | Should Be Equal | ${MESSAGE} | Hello, i am robo! | *** Keywords *** | | | | My Keyword | [Arguments] | ${path} | | | File Should Exist | ${path} |
Из приведенных выше примеров ясно, что тестовые примеры создаются в таблицах тестовых примеров из доступных ключевых слов. Ключевые слова могут быть импортированы из тестовых библиотек или файлов ресурсов или созданы в таблице ключевых слов самого тестового примера.
Давайте теперь увидим практический пример, в котором пользователь входит в систему.
*** Settings *** Documentation Test for user login Library SeleniumLibrary Library PageObjectLibrary Test Setup Open test browser Test Teardown Close all test browsers *** Variables *** ${SERVER} localhost:8080 ${ROOT} http://${SERVER}/myApp ${BROWSER} chrome ${SELENIUM_URL} http://localhost:4444 ${PLATFORM} linux ${VERSION} latest ${USERNAME} admin ${PASSWORD} password ${username_field} id=usernametext ${password_field} id=passwordtext ${signIn_Button} id=submit ${LOGIN_URL} http://${SERVER}/myApp/login ${WELCOME_URL} http://${SERVER}/myApp/welcome.html *** Test Cases *** Valid Login [Documentation] Test valid login Open Login Page Input Username ${USERNAME} Input Password ${PASSWORD} Submit Credentials Welcome page is open *** Keywords *** Open test browser Open browser ${ROOT} ${BROWSER} ... remote_url=${SELENIUM_URL}/wd/hub ... desired_capabilities=browserName:${BROWSER},version:${VERSION},platform:${PLATFORM} Open Login Page Go To ${LOGIN_URL} Login Page Should Be Open Login Page Should Be Open Title Should Be Login Page Input Username [Arguments] ${USERNAME} Input Text ${username_field} ${USERNAME} Input Password [Arguments] ${PASSWORD} Input Text ${password_field} ${PASSWORD} Submit Credentials Click Button ${signIn_Button} Welcome Page Is Open Location Should Be ${WELCOME_URL} Title Should Be Welcome Page Close all test browsers Close all browsers
Теперь давайте поймем приведенный выше пример. Тестовый пример имеет сценарий для действительного входа пользователя. В этом тестовом примере используется ряд ключевых слов, которые могут быть либо предварительно определенными ключевыми словами, импортированными из библиотек, либо могут быть созданы с использованием доступных ключевых слов низкого уровня. В разделе «Ключевые слова» все ключевые слова само созданы с использованием доступных ключевых слов. Например: «Входное имя пользователя» – это ключевое слово, созданное пользователем, которое использует существующее ключевое слово «входной текст». Аналогичным образом, «Welcome Page Open»-это ключевое слово, созданное пользователем, которое создается с использованием ранее существовавших ключевых слов «Место» должно быть «и« название должно быть ».
Название «ключевое слово» должно быть «использует заголовок страницы, такой как« Страница приветствия »и« страница входа », как в примере выше. Эти заголовки страниц определены в классах объектов страницы, которые будут обсуждаться ниже.
Использование объектов страниц в рамках робота
Объекты страниц предоставляют дополнительный уровень абстракции для создания тестового примера. Использование объектов страницы приводит к более простому обслуживанию тестов.
PageObjectLibrary – это библиотека ключевых слов Robot Framework, которая позволяет использовать шаблон объекта страницы при тестировании веб -страниц с помощью подхода на основе ключевых слов Robot Framework. Классы объектов страницы реализованы как стандартные библиотеки ключевых слов робота. Когда вы используете ключевые слова PageObjectLibrary, чтобы перейти на страницу или утверждать, что вы находитесь на определенной странице, ключевое слово автоматически загружает библиотеку для этой страницы и разместит ее в передней части заказа поиска библиотеки, гарантируя, что ключевые слова объекта страницы доступны для Ваш тестовый пример.
Написание класса объекта страницы
Объекты страниц – это простые классы Python, которые наследуют от PageObjectLibrary. PageObject
Анкет Есть только несколько требований к классу:
- Класс должен определить переменную с именем
ЗАГОЛОВОК СТРАНИЦЫ
- Класс должен определить переменную с именем
Page_url
который является URI относительно корня сайта.
Унаследовав от PageObjectLibrary. PageObject
, методы имеют доступ к следующим атрибутам специального объекта:
self.selib
: Ссылка на экземплярSeleniumlibrary
Анкет При этом вы можете вызвать любое из ключевых слов Seleniumlibrary с помощью своих имен методов Python (например:self.selib.input_text
)Self.browser
: Ссылка на объект WebDriver, созданный, когда был открыт браузерSeleniumlibrary
Анкет При этом вы можете обойти селеналибрир и напрямую вызовут все функции, предоставленные основной библиотекой селена.Self.Locator
: Обертка вокруг_locators Dictionary
страницы. Этот словарь может содержать все локаторы, используемые ключевыми словами объекта страницы. Self.Locators добавляет возможность получить доступ к локаторам с помощью точечной обозначения, а не немного более словесного словаря (например:self.locator.username
противself._locators ["имя пользователя"]
Анкет
Приведенные выше тесты могут быть легко понять при написании в формате Gherkin. Давайте познакомимся с синтаксисом Gherkin и тем, как тест может быть написан в этом формате.
Геркин Синтаксис
Формат Gherkin фокусируется на описании функции, которая будет реализована с использованием «данного», «когда», «тогда», «и» и «но» ключевых слов. Требования к написанию таким образом облегчают понимание тестов, особенно для нетехнических людей, поскольку естественный язык используется для описания тестовых примеров. Более того, этот формат фокусируется на четком разделении между тестами, тестовыми действиями и испытательными ресторанами.
Учитывая <некоторые начальные состояния или предварительные условия> Когда предпринятое действие, которое запускает сценарий> Тогда <ожидаемый результат>
для, например,
*** Settings *** Documentation Test for user login Library SeleniumLibrary Library PageObjectLibrary Test Setup Open test browser Test Teardown Close all test browsers *** Variables *** ${SERVER} localhost:8080 ${ROOT} http://${SERVER}/myApp ${BROWSER} chrome ${SELENIUM_URL} http://localhost:4444 ${PLATFORM} linux ${VERSION} latest ${USERNAME} admin ${PASSWORD} password ${LOGIN_URL} http://${SERVER}/myApp/login ${WELCOME_URL} http://${SERVER}/myApp/welcome.html *** Test Cases *** Valid Login [Documentation] Test valid login Given the user has browsed to the login page When the user enters the username ${USERNAME} And the user enters the password ${PASSWORD} And the user submits the credentials Then the current page should be FilesPage
Для четких разделов и слоев абстракции мы производим файлы контекста для тестовых шагов. Давайте теперь создадим Контексты
каталог, где расположены все контекстные файлы. Для шага входа в систему давайте создадим файл контекста входа в систему Contexts/logincontext.py
.
Обратите внимание, что: префиксы Дано
, Когда
В Тогда
, И
и Но
сбрасываются при поиске сопоставления ключевых слов, если нет совпадения с полным именем. Это работает как для ключевых слов пользователя, так и для ключевых слов библиотеки
from robot.api.deco import keyword from LoginPage import LoginPage class LoginContext: loginPage = LoginPage() @keyword(name="the user enters the username '${USERNAME}'") def enter_username(self, username): self.loginPage.enter_username(username) @keyword(name="the user enters the password '${PASSWORD}'") def enter_password(self, password): self.loginPage.enter_password(password) @keyword(name="the user has browsed to the login page") def browse_to_login_page(self): self.loginPage.browse_to_page() @keyword(name="the user submits the credentials") def submit_credentials(self): self.loginPage.submit_credentials()
Файл контекста входа использует методы страницы входа в систему. Итак, мы должны написать все необходимые функции на странице входа в систему. Давайте создаем каталог объектов страницы «page_objects», а затем страница входа в систему ‘page_objects/loginpage’.
from PageObjectLibrary import PageObject, PageObjectLibraryKeywords class LoginPage(PageObject): PAGE_URL = "/myApp/login" PAGE_TITLE = "myApp" _locators = { "username": "id=user", "password": "id=password", "form_id": "login", "login_form_xpath": "//form[@name='%s']" } keywords = PageObjectLibraryKeywords() def browse_to_page(self): self.keywords.go_to_page('LoginPage') def enter_username(self, username): """Type the given text into the username field """ self.selib.input_text(self.locator.username, username) def enter_password(self, password): """Type the given text into the password field""" self.selib.input_text(self.locator.password, password) def submit_credentials(self): """Clicks the submit button on the form For illustrative purposes, this uses the low level selenium functions for submitting the form """ form = self.driver.find_element_by_xpath( self.locator.login_form_xpath % self.locator.form_id) form.submit()
Мы создаем все другие контекстные файлы и объекты страниц в соответствии с требованиями. Все методы и элементы, связанные с определенной страницей, включены в конкретный объект страницы и его собственный файл контекста. Это облегчает понимание и поддержание тестов.
Fileppage может быть создано аналогичным образом следующим образом:
from PageObjectLibrary import PageObject class FilesPage(PageObject): PAGE_URL = "/index.php/apps/files/" PAGE_TITLE = "Files - myApp"
Пример кода:
https://github.com/JankariTech/robotBDDExample
Оригинал: “https://dev.to/jankaritech/setup-and-run-tests-in-robot-framework-13ej”