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

CodeFest 2019. Александр Баяндин (Badoo) — Нетрадиционное использование автотестов

CodeFest
April 14, 2019

CodeFest 2019. Александр Баяндин (Badoo) — Нетрадиционное использование автотестов

В Badoo мы разрабатываем несколько приложений, которые переведены на десятки языков для сотен миллионов пользователей, и мы довольно сильно полагаемся на автоматизацию тестирования. Она и ускоряет обратную связь для разработчиков, и позволяет тестировщикам сфокусироваться на исследовательском тестировании вместо скучных регрессионных проверок.

Но могут ли другие участники процесса создания продукта извлечь пользу из автотестов? Могут ли дизайнеры легко убедиться, что приложение выглядит должным образом на разных устройствах? Аналитики и менеджеры по продукту — проследить, как пользователи взаимодействуют с приложением? Локализаторы — проверить правильность использования лексем на всех языках? Могут.

В своём докладе я расскажу, как на основе существующих автотестов мы сделали LiveShots — новый внутренний продукт, упростивший работу не только тестировщиков. Принципы и подходы, которые мы использовали, будут полезны всем, кто сталкивается с большим разнообразием версий одного продукта, а также помогут сделать аналогичное решение в своём проекте.

CodeFest

April 14, 2019
Tweet

More Decks by CodeFest

Other Decks in Technology

Transcript

  1. Александр Баяндин · CodeFest X · 30 марта
    Нетрадиционное
    использование
    автотестов

    View Slide

  2. Обо мне
    • В тестировании более 8 лет
    • Работал в 2GIS и Mail.Ru
    • Более 4-х лет в Badoo
    • 3 года развивал и отвечал за
    автотестирование мобильного веба
    • Сейчас отвечаю за автотестирование
    нескольких сервисов, использующих
    ML, и за LiveShots
    !2

    View Slide

  3. «А что ещё я могу?»
    !3

    View Slide

  4. План
    1. Введение

    2. LiveShots

    3. Итоги

    4. Бонус
    !4

    View Slide

  5. 5

    View Slide

  6. Badoo
    • 418 000 000 зарегистрированных пользователей
    • Приложения для Android, iOS, Desktop & Mobile Web
    • Переведены на 51 язык
    • Badoo, Bumble и другие
    !6

    View Slide

  7. Автоматизация мобильного тестирования
    • Android / iOS / Mobile Web
    • Более 2000 E2E тестов
    • Ruby + Cucumber
    • Кроссплатформенная автоматизация:

    Evolution of mobile test automation at Badoo: from 0 to 45
    hours of tests*
    !7
    *https://2018.heisenbug-piter.ru/en/talks/2018/spb/ej3vtbrnakmmgmwioakac/

    View Slide

  8. Кроссплатформенная автоматизация
    step definitions
    cucumber features
    Page Objects Page Objects Page Objects
    Android iOS Mobile Web
    !8

    View Slide

  9. Автоматизация тестирования
    Feature: Remembering details after logout
    @ios_no_deeplink @no_deeplink
    @c_sign_in @c_client_only
    Scenario Outline: User can re-sign in from 'Welcome back' screen with the same credentials
    Given I sign in as user via
    And I am on Encounters screen
    When I sign out from any page that has tab bar
    Then I verify Welcome back page for login based methods
    When I sign back in with the same password from Welcome back page
    Then I wait for Encounters page
    @android @ios @mweb
    Examples:
    | login_type |
    | email |
    | phone |
    | username |
    !9

    View Slide

  10. Наша боль
    !10

    View Slide

  11. Приложения
    Языки
    !11

    View Slide

  12. Приложения
    Языки
    Устройства
    !11

    View Slide

  13. Приложения
    Языки
    Устройства
    Версии
    !11

    View Slide

  14. Приложения
    Языки
    Устройства
    Фичи
    Версии
    !11

    View Slide

  15. Нужны скриншоты
    • Разработчикам и тестировщикам
    • Продукт менеджерам и аналитикам
    • Локализаторам
    • Дизайнерам
    !12

    View Slide

  16. Приложения
    Языки
    Устройства
    Фичи
    Версии
    !13

    View Slide

  17. Приложения
    Языки
    Устройства
    Фичи
    Версии
    !13

    View Slide

  18. Приложения
    Языки
    Устройства
    Фичи
    Версии
    !13

    View Slide

  19. Автоматизируй это
    !14

    View Slide

  20. Автоматизируй это
    • Нужны скрипты
    • Которые умеют управлять нашими приложениями
    • На разных платформах
    • На разных языках
    • И снимать скриншот
    !15

    View Slide

  21. Автотесты!
    !16

    View Slide

  22. Начальные требования
    • Скриншоты последовательности шагов — флоу
    • На разных платформах
    • На разных приложениях
    • На всех языках
    • Данные, которые отправляются в систему статистики
    !17

    View Slide

  23. LiveShots
    !18

    View Slide

  24. !19

    View Slide

  25. !20

    View Slide

  26. !21

    View Slide

  27. !22

    View Slide

  28. !23

    View Slide

  29. Начальные требования
    ✓Скриншоты последовательности шагов — флоу

    • На разных платформах

    • На разных приложениях

    • На всех языках

    • Данные, которые отправляются в систему статистики
    !24

    View Slide

  30. !25

    View Slide

  31. !26

    View Slide

  32. !27

    View Slide

  33. !28

    View Slide

  34. !29

    View Slide

  35. Объединение флоу
    !30

    View Slide

  36. Объединение флоу
    • Если есть переход из A в B

    • И есть переход из B в C
    • То можно перейти из A в B, а потом в C
    !31

    View Slide

  37. !32

    View Slide

  38. !33

    View Slide

  39. !34

    View Slide

  40. !35

    View Slide

  41. LiveShots изнутри
    !36

    View Slide

  42. LiveShots
    !37
    Сервис
    Клиент
    Бэкенд
    Фронтэнд

    View Slide

  43. LiveShots. Сервис
    • Фронтенд (React)
    • Бэкенд (Ruby on Rails + MySQL):
    • Предоставление API для загрузки и отдачи скриншотов
    • Сохранение скриншотов и метаинформации в базу данных
    • Оптимизация скриншотов / удаление устаревших данных
    • Загрузка скриншотов в Сeph
    !38

    View Slide

  44. LiveShots. Клиент
    • Собрать флоу
    • Загрузить флоу на сервер
    !39

    View Slide

  45. Почему автотесты* не подходят
    • Автотесты не прогоняются** на всех языки
    • Автотесты не прогоняются** всех девайсы
    • Не всегда атомарные шаги
    • Проверки
    !40
    *в том виде, в котором они есть
    **регулярно

    View Slide

  46. Варианты решения
    !41
    Доработать
    Писать с нуля

    View Slide

  47. Можем переиспользовать
    • Существующая инфраструктура автотестов
    • Существующие методы и шаги по настройке
    окружения
    !42

    View Slide

  48. Инфраструктура автотестов
    • iOS: Remote iOS device server: scaling iOS testing*

    • Android: Секретный device server

    • Мобильный веб: Selenoid + ggr (Go Grid Router)
    !43
    *https://2018.heisenbug-piter.ru/en/talks/2018/spb/39xkxxvmboscqicoio8aw2/

    View Slide

  49. Нужно доработать
    • Работу с языками
    • Отдельные шаги по переходу между состояниями
    !44

    View Slide

  50. Переключение языков
    • “Захардкоженые” лексемы в локаторы
    • Использование accessibility id / css класса
    • Использование отдельного локатора по порядковому
    номеру
    !45

    View Slide

  51. Поддерживаемые языки
    • Albanian

    • Arabic

    • Bosnian

    • Bulgarian

    • Catalan

    • Chinese
    (Simplified)

    • Chinese
    (Traditional)

    • Croatian

    • Czech

    • Danish

    • Dutch

    • English
    (Australia)

    • English
    (Canada)

    • English (India)

    • English (UK)

    • English (US)

    • Finnish

    • French

    • Galician

    • German

    • Greek

    • Hebrew

    • Hindi

    • Hungarian

    • Indonesian

    • Italian

    • Japanese

    • Korean

    • Latvian

    • Lithuanian

    • Malay

    • Norwegian
    Bokmal

    • Polish

    • Portuguese
    (Brazil)

    • Portuguese
    (Portugal)

    • Romanian

    • Russian

    • Serbian

    • Slovak

    • Slovenian

    • Spanish
    (Argentina)

    • Spanish
    (Colombia)

    • Spanish
    (Mexico)

    • Spanish
    (Spain)

    • Swahili

    • Swedish

    • Tagalog

    • Thai

    • Turkish

    • Ukrainian

    • Vietnamese
    !46

    View Slide

  52. !47

    View Slide

  53. !48

    View Slide

  54. !48

    View Slide

  55. !48

    View Slide

  56. !49

    View Slide

  57. !49

    View Slide

  58. !49

    View Slide

  59. 52 лучше, чем 51
    !50

    View Slide

  60. Лексемский (Lexemish)
    • Язык, который отображает id лексем
    • Помогает переводчикам быстро найти лексему в
    системе переводов
    !51

    View Slide

  61. !52

    View Slide

  62. !52

    View Slide

  63. !53

    View Slide

  64. !53

    View Slide

  65. !54

    View Slide

  66. !54

    View Slide

  67. !54
    Серверные
    лексемы
    Клиентские
    лексемы

    View Slide

  68. Нужно доработать
    ✓Работу с языками

    • Отдельные шаги по переходу между состояниями
    !55

    View Slide

  69. Обычный тест
    Feature: Remembering details after logout
    @ios_no_deeplink @no_deeplink
    @c_sign_in @c_client_only
    Scenario Outline: User can re-sign in from 'Welcome back' screen with the same credentials
    Given I sign in as user via
    And I am on Encounters screen
    When I sign out from any page that has tab bar
    Then I verify Welcome back page for login based methods
    When I sign back in with the same password from Welcome back page
    Then I wait for Encounters page
    @android @ios @mweb
    Examples:
    | login_type |
    | email |
    | phone |
    | username |
    !56

    View Slide

  70. Переход между состояниями
    !57
    welcome sign_in encounters

    View Slide

  71. Переход между состояниями
    | welcome > sign_in > encounters |
    !58

    View Slide

  72. LiveShots flow
    @liveshots
    Feature: Login
    @ios_no_deeplink @ios_client_abtest
    Scenario Outline: EmailSignIn - Sign in using email address
    * I change language of the app to
    * I wait for Welcome page
    * log info for below path
    | welcome > sign_in > encounters |
    @android @ios @mweb
    @ipad
    Examples:
    | locale |
    # All 52 languages:
    | ar |
    ...
    | zht |
    | lx-lx |
    !59

    View Slide

  73. Недостатки
    • Нет подсказок в IDE
    • Непонятный стектрейс у упавшего теста
    • Не поддерживает существующий инструментарий для
    шагов
    !60

    View Slide

  74. Переход между состояниями
    !61
    | welcome > sign_in > encounters |

    View Slide

  75. Переход между состояниями
    !61
    | welcome > sign_in > encounters |
    * LiveShots: start capturing from welcome page
    * LiveShots: welcome -> sign_in
    * LiveShots: sign_in -> encounters

    View Slide

  76. LiveShots flow
    @liveshots
    Feature: Login
    @ios_no_deeplink @ios_client_abtest
    Scenario Outline: EmailSignIn - Sign in using email address
    * I change language of the app to
    * I wait for Welcome page
    * LiveShots: start capturing from welcome page
    * LiveShots: welcome -> sign_in
    * LiveShots: sign_in -> encounters
    @android @ios @mweb
    @ipad
    Examples:
    | locale |
    # All 52 languages:
    | ar |
    ...
    | zht |
    | lx-lx |
    !62

    View Slide

  77. Начальные требования
    ✓Скриншоты последовательности шагов — флоу

    ✓На разных платформах

    ✓На разных приложениях

    ✓На всех языках

    • Данные, которые отправляются в систему статистики
    !63

    View Slide

  78. Сбор статистики. Проблемы
    • Пропуск событий

    • Дублирование события
    !64

    View Slide

  79. Сбор статистики. Идея
    welcome > sign_in > encounters // переходы
    !65

    View Slide

  80. Сбор статистики. Идея
    welcome > sign_in > encounters // переходы
    EEEEEEEEEEEEEE // события
    !65

    View Slide

  81. Сбор статистики. Идея
    welcome > sign_in > encounters // переходы
    EEEEEEEEEEEEEE // события
    EEEEE | EE | EEEEEEE // события с маркером
    !65

    View Slide

  82. !66

    View Slide

  83. !67

    View Slide

  84. !68

    View Slide

  85. Начальные требования
    ✓Скриншоты последовательности шагов — флоу

    ✓На разных платформах

    ✓На разных приложениях

    ✓На всех языках

    ✓Данные, которые отправляются в систему статистики
    !69

    View Slide

  86. Итоги
    !70

    View Slide

  87. Итоги
    !71

    View Slide

  88. Итоги
    • Разработчики и тестировщики — лёгкий способ
    проверить вёрстку
    • Продукт менеджеры и аналитики — сравнение на
    разных платформах
    • Локализаторы — переводы в контексте приложения
    • Дизайнеры — скриншоты на разных разрешениях
    !72

    View Slide

  89. Итоги
    • Для себя — новый сервис, который помогает коллегам
    !73

    View Slide

  90. Итоги. Цифры
    • Поддержка 3 платформ (Android, iOS, Mobile Web)
    • Поддержка 51 + 1 языков
    • Поддержка 11 устройств
    !74

    View Slide

  91. Итоги. Цифры
    • Собрано 114 версий iOS
    • Собрано 106 версии Android
    • Собрано 327 версий мобильного веба
    • Храним более 4TB скриншотов
    !75

    View Slide

  92. Бонус
    !76

    View Slide

  93. !77

    View Slide

  94. !78

    View Slide

  95. !78

    View Slide

  96. !79

    View Slide

  97. !80

    View Slide

  98. !81

    View Slide

  99. !81

    View Slide

  100. !82

    View Slide

  101. !82

    View Slide

  102. !82

    View Slide

  103. Спасибо!
    !83

    View Slide

  104. View Slide

  105. Ссылки
    • Evolution of mobile test automation at Badoo: from 0 to 45
    hours of tests:

    https://2018.heisenbug-piter.ru/en/talks/2018/spb/
    ej3vtbrnakmmgmwioakac/

    • Remote iOS device server: scaling iOS testing:

    https://2018.heisenbug-piter.ru/en/talks/2018/spb/
    39xkxxvmboscqicoio8aw2/
    !85

    View Slide