Что такое Пайтест

Pytest — это среда тестирования Python, созданная в рамках проекта PyPy. Его можно использовать для написания различных тестов программного обеспечения, включая модульные, интеграционные, сквозные и функциональные тесты. Его функции включают параметризованное тестирование, фикстуры и перезапись утверждений. Он часто используется с шаблоном функционального программирования, но может использоваться и в тестах ООП. Pytest прост в использовании и понятен. Просто создайте функцию, передайте ее параметры и подтвердите, что функция возвращает ожидаемый результат.

Что такое селен

Selenium — это зонтичный проект с открытым исходным кодом для различных инструментов и библиотек для поддержки автоматизации браузера. Он предоставляет инструмент воспроизведения для создания функциональных тестов в большинстве современных веб-браузеров без изучения языка сценариев тестирования. Selenium имеет привязки Python, Java, JavaScript и Ruby, и Selenium можно использовать для автоматизации и тестирования любой задачи в браузере.

Функциональный или ООП

Selenium и Pytest очень хорошо работают в стилях программирования Functional и OOP. Тем не менее, Functional намного проще для Pytest, но вам нужно создать и вызвать служебную функцию, чтобы чисто функциональное программирование работало с селеном. В этом нет необходимости для тестовых классов ООП; вы инициализируете конструктор селена в конструкторе класса. Но для простоты использования я рекомендую функциональные тесты, и если вам требуется ООП для ваших бизнес-требований, я рекомендую шаблон Singleton для вашего набора тестов.

Как настроить функциональное тестирование

Сначала нам нужно установить Pytest и Python Selenium Bindings. Для этого выполните следующие команды.

pip install pytest
pip install selenium

Затем нам нужно скачать драйвер Selenium; в windows зайдите на сайт и поместите бинарник в ту же директорию, что и проект; в Linux и MacOS вы можете использовать менеджер пакетов. У меня базовый дистрибутив Arch, поэтому я буду запускать

sudo yay -S chromedriver

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

nix-shell -p chromedriver

Теперь, когда у нас есть драйвер Chrome, мы можем начать писать тест; мы должны импортировать Pytest и Selenium.

import pytest
import selenium

Теперь нам нужно создать функцию настройки теста.

def test_setup():
    global driver 
    driver_path = "/path/to/chromedriver"
    driver = webdriver.Chrome(driver_path)
    #Wait for Page to Load
    driver.implicitly_wait(10)
    # get a website, so demo
    driver.get("https://initpro.dev/")

Теперь давайте найдем контактную форму и отправим электронное письмо

def email_form_test():
    driver.find_element_by_id("name").send_keys("john dow")
    driver.find_element_by_id("email").send_keys("[email protected]")
    driver.find_element_by_id("message").send_keys("can you build me a app")

Мы также можем протестировать другие вещи, такие как название веб-сайта.

def title_test():
    x = driver.title
    assert x == "iniPro - initPro"

Selenium может протестировать практически все на веб-сайте, например модальные окна, формы и меню. После того, как все тесты пройдены, вы должны отключить веб-драйвер. Для этого я рекомендую просто иметь в конце функцию с именем test_teardown().

def test_teardown():
    driver.close()
    driver.quit()
    print("Test Complete")

Вот полный код

def test_setup():
    global driver 
    driver_path = "/path/to/chromedriver"
    driver = webdriver.Chrome(driver_path)
    driver.implicitly_wait(10)
    driver.get(https://initpro.dev/)

def email_form_test():
    driver.find_element_by_id("name")
    driver.find_element_by_id("email")
    driver.find_element_by_id("message")

def title_test():
    x = driver.title
    assert x == "iniPro - initPro"

def test_teardown():
    driver.close()
    driver.quit()
    print("Test Complete")