Локальные тесты с Selenium и Python Browser Automation

Существуют различные причины для локального запуска тестов автоматизации браузера Python, но наиболее распространенной из них является экономия времени. Запуск тестов Loadero обычно занимает не более 5 минут на инициализацию и начало выполнения, но может достигать 10 минут и более в зависимости от загруженности очереди запуска тестов. Чтобы увеличить скорость разработки, часто быстрее создать тестовый скрипт на локальной машине, а затем запускать тесты на Loadero. Время инициализации тестов в Loadero неизбежно, если вы хотите использовать одну из его ключевых возможностей — множество участников тестирования (не просто несколько, а до десятков тысяч). Если вы ограничиваете свои тесты только одним участником, чтобы быстро проверить свой прогресс, тест можно запустить на локальной машине, избежав времени ожидания. Там вы можете быстро разработать рабочий сценарий, который позже можно будет запустить на Loadero с тысячами одновременных участников. В этой статье блога мы покажем вам, как создать локальную среду разработки тестового сценария на языке Python для одного участника теста. Если вы планируете сделать то же самое с помощью Javascript, вам может быть полезна эта статья об автоматизации тестирования с помощью Javascript и фреймворка Nightwatch.

Чтобы полностью настроить среду разработки сценария, мы должны установить следующие 2 среды:

  • Среда Python
  • Среда автоматизации браузера

Среда Python

Первое, что вам нужно подготовить для работы над локальными тестами — это среда Python. В выбранной вами директории создайте виртуальную среду с

python -m venv py-script-dev-env
Войти в полноэкранный режим Выйти из полноэкранного режима

затем активируйте среду на macOS и Linux командой

source py-script-dev-env/bin/activate
Войти в полноэкранный режим Выйти из полноэкранного режима

и на Windows с помощью

py-script-dev-envScriptsactivate.bat
Войти в полноэкранный режим Выйти из полноэкранного режима

Создание виртуальной среды не является прямой необходимостью для локальной разработки сценариев, но всегда полезно разделить ваши среды Python, чтобы сохранить чистоту вашей глобальной установки. Именно так мы обычно поступаем, когда работаем над созданием нового тестового сценария.

Совет: Версия Python, используемая в этом блоге, — 3.10.4, но можно использовать любую версию новее 3.6.

Теперь нам нужно установить фреймворк Py-TestUI, который используется Loadero для автоматизации действий пользователя в браузере.

Но прежде чем это сделать, необходимо отдельно установить одну из зависимостей Py-TestUI — Selenium 4.1.0. Это связано с тем, что на момент написания этого поста последней версией Selenium является 4.1.4, но Py-TestUI еще не догнал ее, поэтому сначала нужно установить более старую версию Selenium. Selenium 4.1.0 — это также версия, которую в настоящее время использует Loadero.

pip install selenium==4.1.0
Вход в полноэкранный режим Выход из полноэкранного режима

Кроме того, в настоящее время Py-TestUI недоступен в PIP (Python Package Index), но мы можем использовать утилиту pip для его установки прямо с GitHub. На момент написания этой статьи последняя версия Py-TestUI — 1.1.0. Чтобы установить его, выполните следующие действия

pip install git+https://github.com/testdevlab/Py-TestUI@v1.1.0
Войдите в полноэкранный режим Выйти из полноэкранного режима

Среда автоматизации

Теперь давайте настроим среду автоматизации, которая будет работать непосредственно на вашей машине. По умолчанию Selenium ищет исполняемый файл драйвера браузера в пути поиска по умолчанию. Поэтому все, что нам нужно сделать, это установить нужный драйвер браузера и убедиться, что переменная окружения $PATH указывает на него.

Браузерный драйвер — это API-реализация стандарта W3C WebDriver для конкретного браузера. Здесь вы можете найти ссылки на скачивание chromedriver и geckodriver. Процесс установки будет отличаться для разных платформ.

Для пользователей macOS я рекомендую устанавливать через brew, на нем доступны и chromedriver, и geckodriver.

brew install chromedriver
Войдите в полноэкранный режим Выход из полноэкранного режима
brew install geckodriver
Войдите в полноэкранный режим Выход из полноэкранного режима

Пользователям Linux необходимо загрузить сжатый файл драйвера по ссылкам, указанным выше. Извлеките двоичный файл драйвера с помощью

tar -xf geckodriver-v0.31.0-linux64.tar.gz
Войти в полноэкранный режим Выйти из полноэкранного режима

или

unzip chromedriver_linux64.zip
Войти в полноэкранный режим Выйти из полноэкранного режима

Затем переместите извлеченный двоичный файл в каталог, на который указывает $PATH. Я предлагаю /usr/local/bin.

mv geckodriver /usr/local/bin
Войдите в полноэкранный режим Выход из полноэкранного режима
mv chromedriver /usr/local/bin
Войти в полноэкранный режим Выйти из полноэкранного режима

Пользователи Windows также должны скачать архивные файлы драйверов и распаковать их с помощью какой-либо утилиты, например WinRAR. Затем добавить двоичные файлы в путь поиска по умолчанию. Затем создайте папку C:bin, выполнив команду

mkdir C:bin
Войдите в полноэкранный режим Выйти из полноэкранного режима

Переместите двоичные файлы драйвера в папку C:bin.

Отредактируйте PATH для вашей учетной записи, выполнив команду

setx PATH "C:bin;%PATH%"
Войти в полноэкранный режим Выйти из полноэкранного режима

Наконец, перезапустите командную строку.

Чтобы проверить, находятся ли двоичные файлы драйверов в пути поиска по умолчанию в вашей системе, выполните команду

chromedriver --version
Войти в полноэкранный режим Выйти из полноэкранного режима

и

geckodriver --version
Войти в полноэкранный режим Выйти из полноэкранного режима

Все работает нормально, если команда выводит строку версии установленного драйвера, которая выглядит примерно так для chromedriver

ChromeDriver 100.0.4896.60 (6a5d10861ce8de5fce22564658033b43cb7de047-refs/branch-heads/4896@{#875})
Войти в полноэкранный режим Выйти из полноэкранного режима

и что-то вроде этого для geckodriver

geckodriver 0.31.0
The source code of this program is available from
testing/geckodriver in https://hg.mozilla.org/mozilla-central.
This program is subject to the terms of the Mozilla Public License 2.0.
You can obtain a copy of the license at https://mozilla.org/MPL/2.0/.
Войти в полноэкранный режим Выйти из полноэкранного режима

Все необходимое для запуска скриптов автоматизации браузера на Python установлено. Давайте проведем простой тест, который продемонстрирует, как все работает вместе.

Совет: Вы можете найти объяснение основ автоматизации тестирования и описание некоторых часто используемых команд в нашем предыдущем посте об автоматизации тестирования с помощью Python.

Запуск теста локально

Создайте файл в каталоге, который вы выбрали в качестве родительского каталога вашей среды.

touch simple_test.py
Войдите в полноэкранный режим Выйти из полноэкранного режима

Этот файл будет содержать ваш скрипт. Вот простой пример скрипта, который мы будем использовать, не стесняйтесь скопировать и вставить его, чтобы быстро проверить, все ли работает правильно.

import time
from testui.support.appium_driver import NewDriver
driver = (
    NewDriver()
    .set_logger()
    .set_browser("chrome")
    .set_selenium_driver()
)
driver.navigate_to("https://loadero.com/")
time.sleep(10)
driver.quit()
Вход в полноэкранный режим Выйти из полноэкранного режима

Пример скрипта можно найти в репозитории Loadero на Github. Чтобы запустить этот тест, выполните следующую команду

python simple_test.py
Войти в полноэкранный режим Выйти из полноэкранного режима

Должно открыться окно браузера Google Chrome, перейдите на главную страницу Loadero и подождите 10 секунд.


Теперь у вас есть рабочая локальная среда Python для автоматизации браузера, но чтобы сделать ее более похожей на тестовый скрипт Loadero, необходимо выполнить еще несколько шагов.

Использование тестового скрипта Python для автоматизации браузера

Тестовые скрипты Loadero запускаются как фикстуры pytest. К счастью, Py-TestUI уже установил pytest в качестве зависимости, поэтому мы можем смело импортировать его.

Сначала давайте создадим новый Python-скрипт, использующий pytest.

touch test_script.py
Вход в полноэкранный режим Выход из полноэкранного режима
import pytest
import time
from testui.support.appium_driver import NewDriver
from testui.support.testui_driver import TestUIDriver
@pytest.fixture(autouse=True)
def driver() -> TestUIDriver:    
    driver = (
        NewDriver()
        .set_logger()
        .set_browser("chrome")
        .set_selenium_driver()
    )

    print("starting test script execution")
    yield driver
    print("test script execution finished")
    driver.quit()
@pytest.mark.test
def test_on_loadero(driver: TestUIDriver) -> None:    
    driver.navigate_to("https://loadero.com/")
    time.sleep(10)
Войти в полноэкранный режим Выход из полноэкранного режима

Вот краткое объяснение того, что делает этот короткий скрипт:

Запустите скрипт с

pytest loadero_script.py -s -m test
Войти в полноэкранный режим Выйти из полноэкранного режима

Аргумент -s указывает pytest не захватывать никаких входных или выходных данных теста. Аргумент -m указывает pytest запускать только тесты, помеченные test. Чтобы избежать предупреждения pytest — PytestUnknownMarkWarning, создайте pytest.ini.

touch pytest.ini
Вход в полноэкранный режим Выйти из полноэкранного режима

и предопределите маркер test в этом файле.

[pytest]
markers =
   test: marks function as loadero script
Войти в полноэкранный режим Выход из полноэкранного режима

Обратите внимание, что имя функции test_on_loadero совпадает с именем функции точки входа в тестовых сценариях Loadero Python. Хотя вы можете назвать функцию как угодно, совпадающие имена функций были выбраны намеренно, чтобы показать, что функция обеспечивает точку входа для тестового скрипта как на локальной установке, так и в Loadero. Это означает, что сценарий, который вы разрабатываете локально, может быть перенесен в Loadero путем копирования функции test_on_loadero и ее вспомогательных функций, за исключением приспособления driver, в тестовый сценарий Loadero. Пример скрипта, его аналог для Loadero и файл конфигурации pytest доступны на Github.

Теперь ваша среда готова, и вы можете начать работу над своим первым сценарием автоматизации. Важно отметить, что Loadero предоставляет пользовательские переменные, константы и команды для загрузки файлов, пользовательских сетевых условий, измерения времени выполнения команд и других вещей, доступных только в Loadero. Подробнее о них вы можете прочитать здесь. Эти команды не будут доступны на вашей локальной установке.

На этом настройка среды завершена, и вы готовы к разработке скриптов Loadero на вашей быстрой локальной установке. Когда вы будете готовы попробовать запустить тестовый сценарий с несколькими участниками, вы можете сделать это с помощью бесплатной пробной версии Loadero. Удачи в тестировании, и до встречи в следующем блоге.

Оцените статью
devanswers.ru
Добавить комментарий