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

16b6c87229eaf58768d25ed7b2bbbf52?s=47 CodeFest
April 14, 2019

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

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

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

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

16b6c87229eaf58768d25ed7b2bbbf52?s=128

CodeFest

April 14, 2019
Tweet

Transcript

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

    автотестов
  2. Обо мне • В тестировании более 8 лет • Работал

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

  4. План 1. Введение 2. LiveShots 3. Итоги 4. Бонус !4

  5. 5

  6. Badoo • 418 000 000 зарегистрированных пользователей • Приложения для

    Android, iOS, Desktop & Mobile Web • Переведены на 51 язык • Badoo, Bumble и другие !6
  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/
  8. Кроссплатформенная автоматизация step definitions cucumber features Page Objects Page Objects

    Page Objects Android iOS Mobile Web !8
  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 <login_type> 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
  10. Наша боль !10

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

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

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

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

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

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

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

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

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

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

    приложениями • На разных платформах • На разных языках • И снимать скриншот !15
  21. Автотесты! !16

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

    разных платформах • На разных приложениях • На всех языках • Данные, которые отправляются в систему статистики !17
  23. LiveShots !18

  24. !19

  25. !20

  26. !21

  27. !22

  28. !23

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

    платформах • На разных приложениях • На всех языках • Данные, которые отправляются в систему статистики !24
  30. !25

  31. !26

  32. !27

  33. !28

  34. !29

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

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

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

  38. !33

  39. !34

  40. !35

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

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

  43. LiveShots. Сервис • Фронтенд (React) • Бэкенд (Ruby on Rails

    + MySQL): • Предоставление API для загрузки и отдачи скриншотов • Сохранение скриншотов и метаинформации в базу данных • Оптимизация скриншотов / удаление устаревших данных • Загрузка скриншотов в Сeph !38
  44. LiveShots. Клиент • Собрать флоу • Загрузить флоу на сервер

    !39
  45. Почему автотесты* не подходят • Автотесты не прогоняются** на всех

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

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

    шаги по настройке окружения !42
  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/
  49. Нужно доработать • Работу с языками • Отдельные шаги по

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

    id / css класса • Использование отдельного локатора по порядковому номеру !45
  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
  52. !47

  53. !48

  54. !48

  55. !48

  56. !49

  57. !49

  58. !49

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

  60. Лексемский (Lexemish) • Язык, который отображает id лексем • Помогает

    переводчикам быстро найти лексему в системе переводов !51
  61. !52

  62. !52

  63. !53

  64. !53

  65. !54

  66. !54

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

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

    между состояниями !55
  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 <login_type> 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
  70. Переход между состояниями !57 welcome sign_in encounters

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

    !58
  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 <locale> * 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
  73. Недостатки • Нет подсказок в IDE • Непонятный стектрейс у

    упавшего теста • Не поддерживает существующий инструментарий для шагов !60
  74. Переход между состояниями !61 | welcome > sign_in > encounters

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

    | * LiveShots: start capturing from welcome page * LiveShots: welcome -> sign_in * LiveShots: sign_in -> encounters
  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 <locale> * 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
  77. Начальные требования ✓Скриншоты последовательности шагов — флоу ✓На разных платформах

    ✓На разных приложениях ✓На всех языках • Данные, которые отправляются в систему статистики !63
  78. Сбор статистики. Проблемы • Пропуск событий • Дублирование события !64

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

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

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

    EEEEEEEEEEEEEE // события EEEEE | EE | EEEEEEE // события с маркером !65
  82. !66

  83. !67

  84. !68

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

    ✓На разных приложениях ✓На всех языках ✓Данные, которые отправляются в систему статистики !69
  86. Итоги !70

  87. Итоги !71

  88. Итоги • Разработчики и тестировщики — лёгкий способ проверить вёрстку

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

    !73
  90. Итоги. Цифры • Поддержка 3 платформ (Android, iOS, Mobile Web)

    • Поддержка 51 + 1 языков • Поддержка 11 устройств !74
  91. Итоги. Цифры • Собрано 114 версий iOS • Собрано 106

    версии Android • Собрано 327 версий мобильного веба • Храним более 4TB скриншотов !75
  92. Бонус !76

  93. !77

  94. !78

  95. !78

  96. !79

  97. !80

  98. !81

  99. !81

  100. !82

  101. !82

  102. !82

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

  104. None
  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