Найти в Дзене
Amusing Python

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

⚠️Использую IDE PyCharm / браузер Chrome
Тестирование можно
запустить из командной строки интерпретатора 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(), поэтому указывать путь к драйверу (chromedriver.exe) в команде для запуска теста не обязательно.
Тогда
команда для запуска будет такой:
⚡️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 полный_путь_к_папке
# Вариант 2 ✔️
Если в аргументе тест-функции используем Selenium:
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
✅По ссылкам, оставленным выше, можно посмотреть функционал использования других команд.
Смотри также: Изменение параметров командной строки!