TGViewer
Валерий | AQA Engineer | Автотестирование на Python | REST, gRPC, GraphQL Валерий | AQA Engineer | Автотестирование на Python | REST, gRPC, GraphQL @aqa_engineer · 1.52K subscribers
Post #507 854
Как улучшить TTM выкатки сервиса и ускорить пайплайн автотестов

Базово пайплайн чаще всего состоит из 4 шагов:

1. Сборка образа приложения
2. Запуск приложения
3. Сборка образа тестов
4. Запуск автотестов

Теперь вопрос — что тут можно реально ускорить?

Если говорим про Python, то первое что можно оптимизировать — сборку образов.


Большинство до сих пор используют pip, но есть еще как минимум:
— Poetry
— uv

И вот uv сейчас выглядит очень интересно. За счет того что он написан на Rust — установка зависимостей работает в несколько десятков раз быстрее.

На практике только за счет замены pip - uv можно спокойно срезать около минуты на старте сервиса и сборке контейнера.

Ту же самую оптимизацию можно провернуть и для образа автотестов.

Второй момент, который кажется очевидным, но как выяснилось — не для всех 😄

Python тесты можно запускать параллельно.

Золотой стандарт сейчас — pytest-xdist

Он позволяет реально запускать тесты в несколько процессов/воркеров.

Даже на обычном маке ускорение может быть x4-x8 в зависимости от количества ядер.

Пример:

pytest -n auto 


или

pytest -n 8 


Если используете аллюр:

pytest -n auto --alluredir=allure-results 


Полезные плагины:
— pytest-parallel
— pytest-concurrent
— pytest-asyncio-concurrent

Но тут важно понимать — они подходят только если тесты не конфликтуют между собой и могут безопасно работать конкурентно.


Следующий уровень оптимизации — запускать не все тесты.

Например:
у вас 1000+ тестов, но изменения затронули только платежи.

Зачем гонять вообще весь регресс?

Можно размечать тесты по фичам через markers и запускать только нужные.

Пример:

@pytest.mark.payments 
def test_create_invoice():
...

Запуск:

pytest -m payments 


Или через Allure labels/tags:

@allure.feature("Payments")
@allure.story("Invoices")

Еще один огромный bottleneck — подготовка тестовых данных.

На сложных интеграционных сценариях подготовка данных может занимать больше времени чем сами тесты.

Что можно сделать:

— вынести подготовку данных в отдельный сервис
— складывать подготовленные данные в БД
— отдавать их тестам через API
— использовать session fixtures
— готовить данные фоном во время тестовой сессии

Например:
пока идут первые тесты — в фоне уже готовятся данные для следующих.

Хранить это можно хоть в SQLite, Redis или отдельной тестовой БД.

Еще хороший кейс — авторизация.

Очень часто вижу как тест:
— логинится
— получает токен
— делает запрос
— заканчивается

И так 500 раз подряд 😄

Хотя можно сделать клиент который:
— фоново обновляет токен
— кеширует его
— следит за TTL
— отдает уже актуальный access token тестам

В итоге минус сотни лишних запросов в auth сервис.

Если суммировать, то основные точки ускорения это:

- Быстрая сборка образов
- Параллельность
- Конкурентность
- Запуск только нужных тестов
- Предподготовка тестовых данных
- Фоновые задачи
- Кеширование авторизации

И за счет этого можно очень сильно срезать время прохождения пайплайна и улучшить TTM выкатки

TG-сообщество | Обучение |Отзывы
  • ❤ 12
  • 👍 8
More from @aqa_engineer
  1. Sep 2, 2026💙💙💙💙💙 Маленькое напоминание о большой дате: где стоит провести День программиста⬆️ Ар…
  2. Sep 2, 2026Привет, давно меня не было пригар по работе, что совсем не успеваю ничего. За что прошу пр…
  3. Jul 16, 2026👩‍💻 В мае-июне я проходила курс «Автоматизация тестирования Rest API Advanced (Python)»…
  4. Jun 10, 2026Привет! Уже на следующей неделе у меня стартуют. Автоматизация тестирования брокеров сообщ…
  5. Jun 8, 2026Несколько месяцев назад я спросил, какой технический тренинг вам был бы действительно инте…
  6. Jun 6, 2026Материалы для тех, кто в теме. Одна из самых больших проблем при развитии в IT - это возмо…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →