Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
По заветам Франкенштейна.
Продолжаем автоматизацию тестирования SDK AppMetrica
Витенко Алексей, старший разработчик
AppMetrica
Немного о продукте
Единая платформа
AppMetrica QuickStart: http://bit.ly/app_met_doc
Яндекс.Субботник "Невероятные приключения событий":
http...
Аудитория
› 285 млн пользователей в месяц
› 12 млрд событий в день
Платформы
Из истории
Как мы тестировали?
› Unit-тесты
› Интеграционные тесты
Интеграционные тесты
› Тестирование чёрного ящика
› Взаимодействие с другими приложениями (провязка)
› Миграции
› Кейсы, с...
Первый вариант
Раз нет UI – значит его нужно придумать
Недостатки
› Сильно ограничивает тестирование
› Дорого по времени
Особенности проекта
› Общее API для всех платформ.
› Общий протокол.
› Большая часть времени тестирования - выполнение пре...
Идеи
› Решение с рефлексией и хранилищем тестов в JSON
› Существующие решения для тестирования мобильных продуктов -
решаю...
│ Наше функциональное
тестирование должно писать
код.
Пример теста
@Test
public void test() {
YandexMetrica.activate(getActivity(), "APIKEY"));
YandexMetrica.reportEvent("1");
}
TestCases Store
TestCases Store
Создатель
сценариев
TestCases Store
Создатель
сценариев
Git
TestCases Store
Создатель
сценариев
Git Teamcity
TestCases Store
Создатель
сценариев
Git Teamcity dex storage
TestCases Store
Создатель
сценариев
Git Teamcity dex storage
TestCases Store
Создатель
сценариев
Git Teamcity Наблюдатель
dex storage
TestCases Store
Создатель
сценариев
Git Teamcity Наблюдатель
.dex
dex storage
Итоги
AppMetrica
Воздействия Результат
Итоги
› тестирование стало ближе к проекту и разработчикам
› до сих пор используется
AppMetrica
Воздействия Результат
Автоматизация проверок
Android
Новая задача
Необходимо перехватывать исходящие запросы приложения
Новая задача
AppMetrica
Воздействия Результат
MockWebServer
https://github.com/square/okhttp/tree/master/mockwebserver
После перехвата
Повторить небольшую часть функциональности сервера
Структура ответа
События
Структура ответа
События
Сессии
Структура ответа
События
Сессии
Репорты
AssertJ: extractors
@Test
public void testNoFirstAfterSecondActivate() {
YandexMetrica.activate(AppMetricaRegistry.getCont...
AssertJ
Декларативность - код теста должен 1 в 1 отображать описание
тестового сценария.
AssertJ: декларативность
@Test
public void testNoFirstAfterSecondActivate() {
YandexMetrica.activate(AppMetricaRegistry.ge...
Как запускать?
› JUnit
› AndroidJUnit
› UI-test (Espresso & UIAutomator)
› Кроссплатформенные фрэймворки
Appium
Плюсы:
› Кроссплатформенный
› Масштабируемость на Selenium Grid
› Опыт других команд
Установка + очистка данных.
Appium
Минусы:
› Задержки. Весьма существенны
› Усложняется система
AndroidJUnit
Плюсы:
› Скорость
› Ближе связь с платформой
Минусы:
› Отсутствие "песочницы"
Песочница
Для чистой активации необходимо:
› Стереть все данные sdk
› Сделать активацию в новом процессе
ProcessRunner
TestApp
Main Process
Test Process Metrica Process
ProcessRunner
TestApp
Main Process
Test Process Metrica Process
ProcessRunner
TestApp
Main Process
Test Process Metrica Process
Test Process Metrica Process
ProcessRunner
TestApp
Main Process
Test Process Metrica Process
Test Process Metrica Process
Test Process Metrica Process
...
Где запускать?
▌ Эмуляторы
› arm – медленные
› x86 – проблемы на виртуальных агентах
▌ Реальные устройства
› организация ф...
Остальные платформы
Два варианта
› Тесты на устройстве
› Старый способ с JSON wire-подобным протоколом
Тесты на устройстве
Плюсы:
› Нативно
› Тесты - код
Минусы:
› Масштабируемость на платформы
› Особенности разных платформ
Кроссплатформенные
Плюс:
› Один раз настраивается сервер, остаётся только делать
интерпретаторы для разных платформ
Минусы...
Поиск баланса
Фрагментированность
iOS:
› симулятор - сокет
› устройство - свизлинг
Windows:
› 5 или 7 сборок
Решение
У нас есть:
› пул тестов
› код, который проверяет
Решение
А что если заменить библиотеку, и вместо Android-библиотеки вызывать
генератор команд?
Решение
@Test
public void testNoFirstAfterSecondActivate() {
YandexMetrica.activate(AppMetricaRegistry.getContext(), getMa...
Схема
Tests
УстройствоСервер
Схема
Runtime
Java
Tests
УстройствоСервер
Схема
Runtime
Java
ИнтерпретаторTests
УстройствоСервер
Схема
Runtime
Java
Core
ИнтерпретаторTests
УстройствоСервер
Схема
Runtime
Java
Core
ИнтерпретаторTests
УстройствоСервер
Полная схема
Runtime
Java
Core
ИнтерпретаторTests
УстройствоСервер
Android
Runtime
Android
Сравнение
Результаты:
› 12 с на тест на Android и 13,5 с на тест на iOS
› Поддержка плотформозависимых вещей отнимает сопо...
Итоги
Итог автоматизации
› Регресс занимает 100 минут вместо нескольких дней
› 60% тестов общие на всех платформах.
Роль тестировщиков
› Работа над тестовыми сценариями
› Импровизация
Какой способ выбрать?
› Мы не нашли серебряную пулю
avitenko@yandex-team.ru
Спасибо за внимание!
Витенко Алексей
Старший разработчик
По заветам Франкенштейна. Продолжаем автоматизацию тестирования SDK AppMetrica / Алексей Витенко (Яндекс)
Upcoming SlideShare
Loading in …5
×

По заветам Франкенштейна. Продолжаем автоматизацию тестирования SDK AppMetrica / Алексей Витенко (Яндекс)

85 views

Published on

РИТ++ 2017, AppsConf
Зал Касабланка, 6 июня, 12:00

Тезисы:
http://appsconf.ru/2017/abstracts/2822.html

Мы продолжаем свой рассказ о тестировании мобильного продукта, у которого нет UI.

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

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

По заветам Франкенштейна. Продолжаем автоматизацию тестирования SDK AppMetrica / Алексей Витенко (Яндекс)

  1. 1. По заветам Франкенштейна. Продолжаем автоматизацию тестирования SDK AppMetrica Витенко Алексей, старший разработчик
  2. 2. AppMetrica Немного о продукте
  3. 3. Единая платформа AppMetrica QuickStart: http://bit.ly/app_met_doc Яндекс.Субботник "Невероятные приключения событий": http://bit.ly/event_adv › Аналитика › Трэкинг › Крэш-репортинг › Пуши
  4. 4. Аудитория › 285 млн пользователей в месяц › 12 млрд событий в день
  5. 5. Платформы
  6. 6. Из истории
  7. 7. Как мы тестировали? › Unit-тесты › Интеграционные тесты
  8. 8. Интеграционные тесты › Тестирование чёрного ящика › Взаимодействие с другими приложениями (провязка) › Миграции › Кейсы, специфические для реальных устройств
  9. 9. Первый вариант Раз нет UI – значит его нужно придумать
  10. 10. Недостатки › Сильно ограничивает тестирование › Дорого по времени
  11. 11. Особенности проекта › Общее API для всех платформ. › Общий протокол. › Большая часть времени тестирования - выполнение предусловий сценария.
  12. 12. Идеи › Решение с рефлексией и хранилищем тестов в JSON › Существующие решения для тестирования мобильных продуктов - решают вообще другую задачу
  13. 13. │ Наше функциональное тестирование должно писать код.
  14. 14. Пример теста @Test public void test() { YandexMetrica.activate(getActivity(), "APIKEY")); YandexMetrica.reportEvent("1"); }
  15. 15. TestCases Store
  16. 16. TestCases Store Создатель сценариев
  17. 17. TestCases Store Создатель сценариев Git
  18. 18. TestCases Store Создатель сценариев Git Teamcity
  19. 19. TestCases Store Создатель сценариев Git Teamcity dex storage
  20. 20. TestCases Store Создатель сценариев Git Teamcity dex storage
  21. 21. TestCases Store Создатель сценариев Git Teamcity Наблюдатель dex storage
  22. 22. TestCases Store Создатель сценариев Git Teamcity Наблюдатель .dex dex storage
  23. 23. Итоги AppMetrica Воздействия Результат
  24. 24. Итоги › тестирование стало ближе к проекту и разработчикам › до сих пор используется AppMetrica Воздействия Результат
  25. 25. Автоматизация проверок Android
  26. 26. Новая задача Необходимо перехватывать исходящие запросы приложения
  27. 27. Новая задача AppMetrica Воздействия Результат
  28. 28. MockWebServer https://github.com/square/okhttp/tree/master/mockwebserver
  29. 29. После перехвата Повторить небольшую часть функциональности сервера
  30. 30. Структура ответа События
  31. 31. Структура ответа События Сессии
  32. 32. Структура ответа События Сессии Репорты
  33. 33. AssertJ: extractors @Test public void testNoFirstAfterSecondActivate() { YandexMetrica.activate(AppMetricaRegistry.getContext(), getMainApiKey()); assertThat(reports().getSessions()).as("sessions").isNotEmpty(); assertThat(reports().getEvents()) .extract(Constants.ReportMessage.Session.Event.TYPE, Integer.class) .containsOnlyOnce(Session.Event.EVENT_FIRST); }
  34. 34. AssertJ Декларативность - код теста должен 1 в 1 отображать описание тестового сценария.
  35. 35. AssertJ: декларативность @Test public void testNoFirstAfterSecondActivate() { YandexMetrica.activate(AppMetricaRegistry.getContext(), getMainApiKey()); assertThat(reports().getSessions()).as("sessions").isNotEmpty(); assertThat(reports().getEvents()) .extract(Constants.ReportMessage.Session.Event.TYPE, Integer.class) .containsOnlyOnce(Session.Event.EVENT_FIRST); }
  36. 36. Как запускать? › JUnit › AndroidJUnit › UI-test (Espresso & UIAutomator) › Кроссплатформенные фрэймворки
  37. 37. Appium Плюсы: › Кроссплатформенный › Масштабируемость на Selenium Grid › Опыт других команд Установка + очистка данных.
  38. 38. Appium Минусы: › Задержки. Весьма существенны › Усложняется система
  39. 39. AndroidJUnit Плюсы: › Скорость › Ближе связь с платформой Минусы: › Отсутствие "песочницы"
  40. 40. Песочница Для чистой активации необходимо: › Стереть все данные sdk › Сделать активацию в новом процессе
  41. 41. ProcessRunner TestApp Main Process Test Process Metrica Process
  42. 42. ProcessRunner TestApp Main Process Test Process Metrica Process
  43. 43. ProcessRunner TestApp Main Process Test Process Metrica Process Test Process Metrica Process
  44. 44. ProcessRunner TestApp Main Process Test Process Metrica Process Test Process Metrica Process Test Process Metrica Process Test Process Metrica Process
  45. 45. Где запускать? ▌ Эмуляторы › arm – медленные › x86 – проблемы на виртуальных агентах ▌ Реальные устройства › организация фермы › разные неожиданные проблемы
  46. 46. Остальные платформы
  47. 47. Два варианта › Тесты на устройстве › Старый способ с JSON wire-подобным протоколом
  48. 48. Тесты на устройстве Плюсы: › Нативно › Тесты - код Минусы: › Масштабируемость на платформы › Особенности разных платформ
  49. 49. Кроссплатформенные Плюс: › Один раз настраивается сервер, остаётся только делать интерпретаторы для разных платформ Минусы: › Усложнение системы
  50. 50. Поиск баланса
  51. 51. Фрагментированность iOS: › симулятор - сокет › устройство - свизлинг Windows: › 5 или 7 сборок
  52. 52. Решение У нас есть: › пул тестов › код, который проверяет
  53. 53. Решение А что если заменить библиотеку, и вместо Android-библиотеки вызывать генератор команд?
  54. 54. Решение @Test public void testNoFirstAfterSecondActivate() { YandexMetrica.activate(AppMetricaRegistry.getContext(), getMainApiKey()); assertThat(reports().getSessions()).as("sessions").isNotEmpty(); assertThat(reports().getEvents()) .extract(Constants.ReportMessage.Session.Event.TYPE, Integer.class) .containsOnlyOnce(Session.Event.EVENT_FIRST); }
  55. 55. Схема Tests УстройствоСервер
  56. 56. Схема Runtime Java Tests УстройствоСервер
  57. 57. Схема Runtime Java ИнтерпретаторTests УстройствоСервер
  58. 58. Схема Runtime Java Core ИнтерпретаторTests УстройствоСервер
  59. 59. Схема Runtime Java Core ИнтерпретаторTests УстройствоСервер
  60. 60. Полная схема Runtime Java Core ИнтерпретаторTests УстройствоСервер Android Runtime Android
  61. 61. Сравнение Результаты: › 12 с на тест на Android и 13,5 с на тест на iOS › Поддержка плотформозависимых вещей отнимает сопоставимое время Узкое место: › Логика проверок. Собственное расширение AssertJ › Код тестов
  62. 62. Итоги
  63. 63. Итог автоматизации › Регресс занимает 100 минут вместо нескольких дней › 60% тестов общие на всех платформах.
  64. 64. Роль тестировщиков › Работа над тестовыми сценариями › Импровизация
  65. 65. Какой способ выбрать? › Мы не нашли серебряную пулю
  66. 66. avitenko@yandex-team.ru Спасибо за внимание! Витенко Алексей Старший разработчик

×