Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Жизнь без QA: Как тестируют в Uploadcare или pytest на все случаи жизни

Жизнь без QA: Как тестируют в Uploadcare или pytest на все случаи жизни

Андрей Барышников (Uploadcare, Software Engineer) @ Moscow Python Meetup 68

"Мой доклад будет посвящен опыту Uploadcare в развитии своей тестировочной инфраструктуры.

В Uploadcare существует множество связанных и не очень приложений которые обеспечивают работу всего сервиса. Чтобы понимать, что что-то сломалось или корректно работает мы используем: интеграционные тесты, unit-тесты, функциональные тесты, bdd и e2e тестирование, тестирования БД. Все это мы делаем без отдела QA и с помощью Pytest. Мы не гордимся тем, что у нас нет отдела QA, но гордимся тем, что в любой момент времени мы можем сказать, что что-то сломалось или работает корректно.

Я хотел бы рассказать о нашем опыте построения инфраструктуре тестов, проблемах с которыми мы столкнулись, решениях которые мы использовали и нюансах о которых мы узнали".

Видео: http://www.moscowpython.ru/meetup/68/life-without-qa/

Moscow Python Meetup
PRO

September 26, 2019
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Или pytest на все случаи жизни
    Жизнь без QA: как
    тестируют в Uploadcare
    Андрей Барышников

    [email protected]

    View Slide

  2. “Архитектура”

    View Slide

  3. “Дымовые” и интеграционные и тесты

    View Slide

  4. Когда запускать тесты
    •smoke тесты каждые - 15 минут

    •Интеграционные тесты - каждый час

    •Тяжелые тесты или использующие
    внешние API - каждые 4 часа

    •После деплоя приложения запускаются
    тесты интеграции этого приложения

    •Когда хочется :)

    View Slide

  5. CI и уведомления о тестах

    View Slide

  6. pytest feature: marks

    View Slide

  7. Артефакты тестирования
    https://clc.to/debug-requests

    View Slide

  8. Проблемы: flaky, retry, $
    Повторы проваленных тестов - pytest-rerunfailures

    View Slide

  9. Функциональные и юнит тесты: переход
    к pytest

    View Slide

  10. Производительность и
    профилирование тестов
    • N самых медленных тестов: pytest --durations=N

    • Ищите и блокируйте запросы в интернет в тестируемом коде

    • Отключайте сигналы и “тяжелые функции”

    • Повторно используйте фикстуры внутри тест-кейсов

    • Используйте транзакции в тестах

    • Следите за изолированность тестов и фикстур

    • Распараллеливание через xdist

    View Slide

  11. BDD, E2E тестирование внешних API
    Проблемы с внешними API:

    • Часто меняются без уведомлений

    • Настройки приложений кто-то
    может поменять

    • API может “упасть”, status page - OK
    Что хотелось от тестов:

    • Реже менять тесты под изменения API

    • Тестировать “живое” API

    • Мокать и проверять вызовы, смотреть
    логи http запросов

    • Знать величину покрытия кода

    View Slide

  12. BDD, E2E и использование внешних API

    View Slide

  13. Проблемы с BDD E2E
    - Очень долго

    - Палки в колеса велосипеда от сервисов: прокси, капча

    - Selenium - боль

    View Slide

  14. Тестирование БД
    • Проверка целостности бекапа, полного
    восстановления

    • Проверка статистических показателей таблиц и
    индексов

    • Прогон ~ 13 часов

    View Slide

  15. Пишите тесты :)

    View Slide