Что такое Пайтест
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")