Skip to content

ritchiesinger/PythonAutomationTesting

Repository files navigation

Python Automation Testing

linting: pylint

Описание

Проект задуман для нескольких целей:

  • Учебное пособие по автоматизации тестирования на Python.
  • Универсальный шаблон для проектирования фреймворка автоматизации тестирования.
  • Источник живых (не абстрактных) примеров кода и отчётов о прогоне автотестов.

На протяжении более чем 10-летнего опыта в сфере тестирования ПО приходилось регулярно изобретать велосипеды и при смене работы зачастую воспроизводить собственные идеи повторно.

И в какой-то момент захотелось где-то иметь базу знаний с лучшими наработками. По понятным причинам прямое цитирование не представлялось возможным. Поэтому я нашёл открытый API и решил создать этот репозиторий.

На данный момент в проекте реализованы автотесты для:

  • Открытого учебного сервиса Restful-Booker как пример автоматизации тестирования REST API. Реализован базовый класс для отправки HTTP запросов и его наследник - клиент для конкретного сервиса.
  • Учебного примера gRPC сервиса, написанного на Python как пример автоматизации тестирования gRPC сервисов. Аналогично - реализован базовый класс для отправки gRPC запросов, а затем клиент для конкретного сервиса. Сам сервис не хостится нигде, если захотите попробовать запустить тесты для него - его нужно установить и запустить локально (инструкцию см. в его репозитории).

В планах - для демонстрации универсальности подхода - сделать тесты для хотя бы ещё одного сервиса с REST API. Возможно, SOAP. Автоматизацию тестирования фронта (WEB UI) тоже вероятно не обойдём стороной: Selenium, Playwright. В итоге хотелось бы получить большой проект автотестов, в котором дружно существуют в человекопонятной структуре разные виды тестов на разные сервисы. При этом написанные в одном стиле, используя общие подходы.

Но даже сейчас - с небольшим набором тестов на пару сервисов проект представляет собой вполне реальный пример, частный случай того что Вы можете встретить, устроившись на работу в команду разработки WEB-приложений, или возможно сами уже сочиняли что-то подобное в рамках такой команды. Это не абстрактные Hello World примеры, какими обычно они бывают в документациях.

Требования

Код проекта писался на Python 3.12, но насколько я могу судить - я не использую каких-то "современных" конструкций языка, и смею предположить что код будет работать на Python 3.8 (а может и более ранних, я не пробовал). Другое дело что все зависимости проекта (см. requirements.txt) имеют жёстко зафиксированную версию, а это значит что вероятно на ранних версиях языка они просто могут не установиться.

Установка

После стягивания репозитория:

  • Создаём venv с Python 3.12.
  • Активируем venv и устанавливаем зависимости:
pip install -r requirements.txt

Кроме того потребуется установить Allure Reports и настроить переменные окружения чтобы из любого места системы можно было вызывать команду allure.

Для тестирования gRPC сервиса нужно сгенерировать необходимый код из .proto. В корне проекта:

python -m grpc_tools.protoc --proto_path=. --python_out=. --grpc_python_out=. schema\grpc_example_service\GrpcExampleService.proto

Всё. Можно запускать тесты. В корневой папке проекта:

pytest --alluredir allure_reports

После прохождения тестов исходники для отчёта будут в папке allure_reports в корне проекта. Для генерации отчёта (в корне проекта):

allure serve allure_reports

Подробнее о том как сделано

Структура проекта

| - - preconditions
| - - schema
| - - test_tools
| - - - - asserters
| - - - - clients
| - - - - constants
| - - - - objects
| - - - - waiters
| - - tests
| .pylintrc - файл-конфиг для линтера pylint.
| config.yaml - конфигурационный файл.
| conftest.py - служебный файл-конфиг для тестов Pytest (регистрация фикстур, хуки и т.д)
| logging.conf - файл-конфиг логера.
| pytest.ini - файл-конфиг для Pytest.
| README.md - документ который ты сейчас читаешь.
| requirements.txt - список зависимостей проекта.
| requirements-dev.txt - список технических зависимостей проекта, которые напрямую не влияют на работу тестов (линтеры, например, там).

preconditions

Здесь лежат фикстуры Pytest семантически разделённые по модулям. Каждый модуль нужно "зарегистрировать" в корневом conftest.py в переменной pytest_plugins чтобы тесты видели фикстуры из него.

schema

Здесь .proto файлы и сгенерированный код для gRPC сервиса.

test_tools

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

asserters

Самописные асертеры. Основная причина их писать - чтобы не думать о том как это будет отображаться в отчёте.

clients

Клиенты (как базовые, так и наследники) для работы с сервисами.

constants

Один из вариантов хранения констант - выделение своей папки (пакета) под них.

objects

Для тех кто любит самописные объекты, а также такие слова как "Композиция" в ООП - надо выделить под это своё место.

waiters

Всегда есть что-то асинхронное и потребность организовывать ожидание какого-то события. Хороший подход - сделать набор целевых ожидалок. И выделить под них место в структуре проекта.

tests

Собственно тесты.

Логирование

Кроме работы с системой отчётности Allure Reports реализовано логирование при помощи стандартной библиотеки logging. Конфигурирование организовано с помощью файла logging.conf в корне проекта описание подхода.

Где нужен логер - он инициализируется на уровне модуля с уникальным именем, логирование приисходит одновременно в консоль и в файл. По умолчанию оба варианта настроены на уровень DEBUG. Файл для логов - log.log (создастся в корне проекта при запуске).

Линтеры

К проекту прикручен самый распространённый линтер - Pylint.

Настроен для него конфиг - .pylintrc - лежит в корне проекта.

About

Демонстрационный проект автоматизации тестирования на Python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages