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. 2.

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

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

    5

  3. 6.

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

    Android, iOS, Desktop & Mobile Web • Переведены на 51 язык • Badoo, Bumble и другие !6
  4. 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/
  5. 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
  6. 20.

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

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

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

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

    !19

  9. 25.

    !20

  10. 26.

    !21

  11. 27.

    !22

  12. 28.

    !23

  13. 29.

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

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

    !25

  15. 31.

    !26

  16. 32.

    !27

  17. 33.

    !28

  18. 34.

    !29

  19. 36.

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

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

    !32

  21. 38.

    !33

  22. 39.

    !34

  23. 40.

    !35

  24. 43.

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

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

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

    языки • Автотесты не прогоняются** всех девайсы • Не всегда атомарные шаги • Проверки !40 *в том виде, в котором они есть **регулярно
  26. 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/
  27. 50.

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

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

    !47

  30. 53.

    !48

  31. 54.

    !48

  32. 55.

    !48

  33. 56.

    !49

  34. 57.

    !49

  35. 58.

    !49

  36. 60.

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

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

    !52

  38. 62.

    !52

  39. 63.

    !53

  40. 64.

    !53

  41. 65.

    !54

  42. 66.

    !54

  43. 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
  44. 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
  45. 73.

    Недостатки • Нет подсказок в IDE • Непонятный стектрейс у

    упавшего теста • Не поддерживает существующий инструментарий для шагов !60
  46. 75.

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

    | * LiveShots: start capturing from welcome page * LiveShots: welcome -> sign_in * LiveShots: sign_in -> encounters
  47. 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
  48. 77.

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

    ✓На разных приложениях ✓На всех языках • Данные, которые отправляются в систему статистики !63
  49. 81.

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

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

    !66

  51. 83.

    !67

  52. 84.

    !68

  53. 85.

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

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

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

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

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

    • Поддержка 51 + 1 языков • Поддержка 11 устройств !74
  56. 91.

    Итоги. Цифры • Собрано 114 версий iOS • Собрано 106

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

    !77

  58. 94.

    !78

  59. 95.

    !78

  60. 96.

    !79

  61. 97.

    !80

  62. 98.

    !81

  63. 99.

    !81

  64. 100.

    !82

  65. 101.

    !82

  66. 102.

    !82

  67. 104.
  68. 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