- PVSM.RU - https://www.pvsm.ru -
Продолжаю серию конспектов с HL2018. В проверке этого конспекта мне помогали ребята из Badoo (Владимир Янц vyants [1] и Николай Крапивный), за что им большой спасибо. Надеюсь, это положительно сказалось на качестве донесения идеи доклада.

Ответственность разработчика не заканчивается релизом бэкенда. Он отвечает до реализации на платформах.

Есть ручное тестирование, но клиент не готов к моменту релиза и выпускается с (непредсказуемой) задержкой. Мы чаще всего не в курсе когда клиенты начнут это имплементировать. Иногда (не часто) фичи начинают делать через большой срок. Поэтому тестировать руками тяжело и не все можно. Поэтому нужны автотесты.
Пишутся на phpunit.
Тестируют малую единицу. Не ходят ни в базу, ни в сервисы (не должны ни с чем взаимодействовать).
Легаси до сих пор есть и усложняет процесс тестирование.
Разработали библиотеку softMocks — перехватывает все include / require и подменяет на изменённый.
Можно мотать любые методы: статические, приватные, финальные.
Библиотека доступна в опен сорс.
Проблема: softmocks расслабляют и дают писать не тестируемый код (и все аврно покрыть его тестами).
Приняли правила:
На эти правила смотрим на код ревью
Есть готовые решения (Humbug, Infection), но они не подошли (не совместимы с softmocks, есть сложности с code coverage). Поэтому написали свое.
Мутационное тестирование пока недоступном для ручного теста. Доступно для запуска в ручную, из консоли. Сейчас внедряем в CI pipeline, выстраиваем процесс. Результат будет на хабре.
Тестируем работу нескольких компонентов в связке; проверяем работу с базой и/или сервисами.
Стандартный подход к тестированию БД (DBUnit):
Проблемы:
Решение: библиотека DBMocks (своё решение)
Принцип работы:
Библиотека небольшая, но пока не запушена в опен сорс
Результаты:
Обычно такие тесты требуют авторизованного пользователя. Его нужно создать перед тестом и удалить после. Это вносит дополнительные риски (репликация, фоновые задачи).
Решение: Сделали пул тестовых пользователей. Научились их очищать.

Тестовые пользователя находятся в одном окружении с реальными, потому что devel != prod. Нужно изолировать тестовых и живых пользователей.
Для изоляции добавили флаг is_test_user у пользователя. И эти пользователи также исключаются из аналитики и результатов a/b тестов.
Можно сделать дешевле — отправить тестовых пользователей «в Антарктиду», где их никто не увидит (кроме пингвинов).
Инструмент для подготовки окружения в api тестах, по сути бекдор в бэкенде для быстрого изменения параметров пользователя / среды.
Позволяют изменить пользователю неизменяемые данные (например, дату регистрации).
Требуется защита:
Есть BugsBounty программа на HackerOne. Платят за найденные уязвимости. Один косяк с QA API нашли с ее помощью.
Моки для удаленного бэкенда.
Работают на Базе soft mocks. Тест просит backend инициализировать для сессии mock. При получении запроса бэкенд проверяет список моков для сессии и применяет их при помощи SoftMocks.
Пример теста:

API тесты слишком удобны. Есть соблазн писать их вместо Unit. Но API тесты сильно медленее.
Приняли набор правил:
Не пишет бэкенд команда.
Фича покрывается Ui тестами когда стабилизируется.
Используется selenium для веб. Для мобильных calabash.
100 000 юнит тестов. 6 000 интеграционных, 14 000 апи тестов.
В 1 поток время 40 мин / 90 мин / 10 часов.
Сделали TestCloud — облако для запуска тестов.

Распределение теста между потоками:
Решение:
Проблема с апи тестами — долго, много ресурсов и не дают выполнится другим.
Для решения разбили cloud на 2 части:
Результат — ускорение времени до:
Какие тесты выполнять? Покажет code coverage.
Coverage формируется раз в сутки, ночью, для master-ветки. Результаты (diff) складываем в базу.
Плюсы:
Минусы:
Если разработчику нужно сразу посмотреть code-coverage, то есть тулза которую можно запустить в консоле и сразу получить свежую метрику по coverege конкретного файла/компонента.
Считается хитро: берется данные по coverege мастера, добавляются все измененную тесты, получается маленький сьют по которому уже и считается покрытие.
Автор: yushkevichv
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/testirovanie/299035
Ссылки в тексте:
[1] vyants: https://habr.com/users/vyants/
[2] bit.ly/yants-HL18: https://bit.ly/yants-HL18
[3] «Как мы поддерживаем 100 разных версий клиентов в Badoo» / Ярослав Голуб: https://www.youtube.com/watch?v=G-AiDkZLOIs&feature=youtu.be
[4] «SoftMocks: наша замена runkit для PHP 7» / Юрий Насретдинов: https://habr.com/company/badoo/blog/279617/
[5] github.com/badoo/soft-mocks: https://github.com/badoo/soft-mocks
[6] Badoo BugsBounty: https://hackerone.com/badoo
[7] «Cross Platform Mobile Test Automation and Continuous Delivery» / Sathish Gogineni: https://www.youtube.com/watch?v=N0hYSHmRJTQ&feature=youtu.be
[8] «Оптимальная параллелизация юнит- тестов или 17000 тестов за 4 минуты» / Илья Кудинов: https://tech.badoo.com/ru/article/115/parallelizatsija-unit-testov-badoo/
[9] Взгляд на тестирование с другой стороны баррикад. / Доклад Дмитрия Марущенко на LoveQA: https://www.youtube.com/watch?v=OQmZbHv4fdE
[10] Badoo. Все о бекенде мобильных приложений Badoo: https://www.youtube.com/watch?v=TRht7k16RQk
[11] Источник: https://habr.com/post/429776/?utm_campaign=429776
Нажмите здесь для печати.