Ваш браузер устарел. Рекомендуем обновить его до последней версии.

Info Board


Как работают импорты в Python >>

Маркировка тестовых функций атрибутами >>

Как изменить параметры командной строки по умолчанию >>

Запуск тестов на Python из командной строки Terminal

Опубликовано 20.09.2023

В качестве IDE для объяснения темы, использую PyCharm. Тестирование можно запустить из командной строки интерпретатора Python, используя шаблон: python -m pytest [...]

В отличие от запуска напрямую командой: pytest [...], запуск через Python добавляет текущий каталог в sys.path, т.е. позволяет импортировать оттуда модули.

Основная причина, по которой используют запуск через Python, а не через pytest, заключается в том, что псевдоним pytest в вашей локальной среде может указывать на установку, отличную от той, которую вы ожидаете! Например, pytest установлен для Python2, когда вы ожидаете Python3 – т.е. запуск через Python лучше использовать при наличии разных установочных версий, иначе проще использовать pytest.

Возьмём для примера тест, проверяющий функционал по открытию сайта:

from selenium import webdriver
# Вариант 1 ✔️
def test_open_google():
    driver = webdriver.Chrome()
    driver.get('https://www.google.ru/')
    driver.maximize_window()
    assert driver.current_url == "https://www.google.ru/"
    driver.quit()

⚠️Тест находится в файле: test_open_pages.py, который расположен в папке: tests. В эту же папку нужно добавить и сам драйвер: chromedriver.exe.

В данном случае драйвер определяется автоматически через конструкцию: webdriver.Chrome(), поэтому указывать путь к драйверу в команде для запуска теста не обязательно.

Тогда команда для запуска будет такой:
⚡️pytest -v --driver Chrome tests\test_open_pages.py::test_open_google
или можно ещё короче:
⚡️pytest tests\test_open_pages.py::test_open_google

Два двоеточия являются разделителями между названиями:
Файла::Класса::Тест-функции

Если класса нет, он просто не указывается, как в нашем примере...
⚠️Если нужно запустить тест с учётом версии Python, просто добавляем в начало команды скрипт: python -m
⚠️Данные команды указаны с учётом того, что запуск теста в Terminal происходит из корневой папки проекта. Если производить запуск из самой папки tests, тогда пример команды будет такой:
⚡️pytest test_open_pages.py::test_open_google

Переход в Terminal между папками осуществляется через команду:
⚡️cd полный_путь_к_папке

Если в аргументе тест-функции используем Selenium:

# Вариант 2 ✔️

def test_open_google(selenium):
    selenium.get('https://www.google.ru/')
    selenium.maximize_window()
    assert selenium.current_url == "https://www.google.ru/"
    selenium.quit()

Тогда в команде запуска теста обязательно нужно указать путь к драйверу (chromedriver.exe), иначе выйдет ошибка: --driver must be specified

Команда будет такой:
⚡️pytest -v --driver Chrome --driver-path tests\chromedriver.exe tests\test_open_pages.py::test_open_google
или также можно оставить эту:
⚡️pytest -v --driver Chrome tests\test_open_pages.py::test_open_google

# Вариант 3 ✔️

Также в Pytest есть возможность установить маркер на тест или сразу несколько тестов - для их одновременного запуска.
Для этого нужно добавить декоратор:

⚡️ @pytest.mark.NAME

- перед запускаемой тест-функцией, где NAME - метка для запуска однотипных тестов (в нашем случае это будет google), и импортировать библиотеку Pytest:

import pytest
@pytest.mark.google
def test_open_google():
driver = webdriver.Chrome()
[... код ...]

✅ Параллельно, хорошим тоном будет зарегистрировать нашу метку в файле pytest.ini (который нужно создать в папке с тестами - tests).

Заносим в файл pytest.ini следующую запись:

[pytest]
markers =
google: google page testing => после двоеточия можно добавить любое описание метки!
serial

Теперь для запуска тестов, помеченных нашим декоратором, можно использовать команду:

⚡️pytest -m google

⚠️Внимание! Если в аргументе тест-функции мы используем selenium, данная команда будет не применима (так как она не подтягивает драйвер) и нужно использовать эту:

⚡️pytest -v --driver Chrome -m google