Рубрики
Без рубрики

Настройка и запустить тесты в рамках робота

Robot Framework Robot Framework – это общая структура автоматизации с открытым исходным кодом для ACC … Tagged с тестированием, BDD, RobotFramework, Python.

Robot Framework – это общая структура автоматизации тестирования с открытым исходным кодом для тестирования. Это структура тестирования, управляемая ключевыми словами, которая использует синтаксис данных тестовых данных. У него простой синтаксис, используя читаемые на человеку ключевые слова. Эта структура не зависит от операционной системы и применения. Основная структура реализуется с использованием Python, а также работает на Jython (JVM) и Ironpython (.net). Эта структура обеспечивает поддержку внешних библиотек, инструментов, которые являются открытым исходным кодом и могут использоваться для автоматизации тестирования.

Тестовые данные находятся в простом табличном формате. При запуске структура робота обрабатывает данные, выполняет тестовые случаи и генерирует журналы и отчеты.

Установка и настройка Robot Framework

  1. Предварительные условия:

    • Установка Python
    • Пип
    • сделать виртуальную среду
  2. Установка рамки робота с 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)
  1. Обновление [необязательно]

    • Установка PIP -обновление RobotFrameWork
  2. Использование сценариев Robot и REPOT

Начиная с Robot Framework 3.0, тесты выполняются с использованием сценария робота и результатов после обработки сценария REBOT:

    robot tests.robot
    rebot output.xml                                                    
  1. Установка необходимых библиотек

    • PIP установить запросы RobotFrameWork-Selenium2Library RobotFramework-PageObjectLibrary
  2. Установка IDE

    • Установите pycharm или любую предпочтительную IDE
  3. Импорт Требуется библиотеки в IDE. В Pycharm,

    • Чтобы добавить переводчика проекта, перейдите к Файлы => Настройки => Проект: => Переводчик проекта а затем добавьте версию Python, доступную через вашу виртуальную среду.
    • Также добавьте необходимые библиотеки, такие как: Селен , RobotFramework-Seleniumlibrary , RobotFrameWork-PageObjectLibrary Анкет
  4. Сделайте файл робота в тестовой папке, например: robotbddexample/test/login.robot

Разделы данных тестирования

Используемые данные определяются в разных разделах в рамках робота. Эти разделы часто называют таблицами.

  1. Настройки: Этот раздел используется для импорта тестовых библиотек, файлов ресурсов и файлов переменных.
  2. Переменные: переменные, которые можно использовать в других частях тестовых данных, определены в этом разделе.
  3. Тестовые случаи: В этом разделе тестовые примеры создаются из доступных ключевых слов.
  4. Задачи: В этом разделе задачи создаются с использованием доступных ключевых слов.
  5. Ключевые слова: ключевые слова пользователя создаются с использованием существующих ключевых слов нижнего уровня.
  6. Комментарии: Этот раздел содержит дополнительные комментарии или данные, которые игнорируются 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 Анкет Есть только несколько требований к классу:

  1. Класс должен определить переменную с именем ЗАГОЛОВОК СТРАНИЦЫ
  2. Класс должен определить переменную с именем Page_url который является URI относительно корня сайта.

Унаследовав от PageObjectLibrary. PageObject , методы имеют доступ к следующим атрибутам специального объекта:

  1. self.selib : Ссылка на экземпляр Seleniumlibrary Анкет При этом вы можете вызвать любое из ключевых слов Seleniumlibrary с помощью своих имен методов Python (например: self.selib.input_text )

  2. Self.browser : Ссылка на объект WebDriver, созданный, когда был открыт браузер Seleniumlibrary Анкет При этом вы можете обойти селеналибрир и напрямую вызовут все функции, предоставленные основной библиотекой селена.

  3. 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”