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.

Тестируем мобильное приложение в суровых реалиях Интернета

1,004 views

Published on

Доклад Андрея Усова на конференции SQA Days-18, 27-28 ноября 2015 г., Москва
www.sqadays.com

Published in: Education
  • Be the first to comment

  • Be the first to like this

Тестируем мобильное приложение в суровых реалиях Интернета

  1. 1. Тестируем мобильное приложение в суровых реалиях интернета Усов Андрей a.usov@2gis.ru    usovand@gmail.com    techno.2gis.ru
  2. 2. •  2 года в тестировании О себе
  3. 3. •  2 года в тестировании •  Автоматизирую тестирование бекендов О себе
  4. 4. •  2 года в тестировании •  Автоматизирую тестирование бекендов •  Разрабатываю инстументы для тестирования О себе
  5. 5. Мобильное приложение 2ГИС v4 •  iOS, Widows Phone, Android (beta)
  6. 6. Мобильное приложение 2ГИС v4 •  iOS, Widows Phone, Android (beta) •  3 млн. пользователей
  7. 7. Мобильное приложение 2ГИС v4 •  iOS, Widows Phone, Android (beta) •  3 млн. пользователей •  9 стран •  288 городов
  8. 8. Мобильное приложение 2ГИС v4 •  iOS, Widows Phone, Android (beta) •  3 млн. пользователей •  9 стран •  288 городов •  Работает офлайн Ищи 2ГИС в любом магазине приложений
  9. 9. Доставка данных
  10. 10. Нагрузка •  Пиковый трафик 4 Gbps
  11. 11. Нагрузка •  Пиковый трафик 4 Gbps •  Максимум 400 rps
  12. 12. Нагрузка •  Пиковый трафик 4 Gbps •  Максимум 400 rps •  Объем данных 512 Tb в месяц
  13. 13. Нагрузка •  Пиковый трафик 4 Gbps •  Максимум 400 rps •  Объем данных 512 Tb в месяц Но ещё не вышло обновление для Android (65% пользователей)
  14. 14. Критичность •  Всегда актуальные данные
  15. 15. Критичность •  Всегда актуальные данные •  Обязательства перед партнерами
  16. 16. Критичность •  Всегда актуальные данные •  Обязательства перед партнерами •  Доставка фич
  17. 17. Технология доставки
  18. 18. Устройство
  19. 19. Приложение
  20. 20. Сеть
  21. 21. Серверы
  22. 22. Nginx
  23. 23. Хранилище
  24. 24. Связь
  25. 25. Выбирает клиент
  26. 26. Требования •  Выбор стабильных серверов для загрузки
  27. 27. Требования •  Выбор стабильных серверов для загрузки •  Устойчивость к отказам даже в процессе закачки
  28. 28. Требования •  Выбор стабильных серверов для загрузки •  Устойчивость к отказам даже в процессе закачки •  Нативные методы фоновой загрузки (iOS, Windows Phone)
  29. 29. Требования •  Выбор стабильных серверов для загрузки •  Устойчивость к отказам даже в процессе закачки •  Нативные методы фоновой загрузки (iOS, Windows Phone) Оказалось, что эти пункты плохо уживаются
  30. 30. Точки отказа
  31. 31. Нет доступа к сети
  32. 32. Нет связи с сервером
  33. 33. Встроенная реклама Кончился Интернет
  34. 34. Сервер упал
  35. 35. Нет связи с хранилищем
  36. 36. Хранилище упало
  37. 37. Плохая связь Обрывы
  38. 38. Сломалось все
  39. 39. И еще •  Перегрузки на сервере
  40. 40. И еще •  Перегрузки на сервере •  Редиректы от провайдера
  41. 41. И еще •  Перегрузки на сервере •  Редиректы от провайдера •  Ошибки DNS
  42. 42. И еще •  Перегрузки на сервере •  Редиректы от провайдера •  Ошибки DNS •  Баги в самом web-сервере
  43. 43. И еще •  Перегрузки на сервере •  Редиректы от провайдера •  Ошибки DNS •  Баги в самом web-сервере Все эти сценарии необходимо проверить
  44. 44. Проблемы
  45. 45. Сложная настройка окружения •  Изменение конфигурации web-сервера (Nginx, Apache)
  46. 46. Сложная настройка окружения •  Изменение конфигурации web-сервера (Nginx, Apache) •  Выполнение команд в хост-системе
  47. 47. Сложная настройка окружения •  Изменение конфигурации web-сервера (Nginx, Apache) •  Выполнение команд в хост-системе •  Запуск произвольного скрипта на сервере
  48. 48. Большое количество работы •  Серверов несколько
  49. 49. Большое количество работы •  Серверов несколько •  Платформы три
  50. 50. Большое количество работы •  Серверов несколько •  Платформы три •  Релизов много
  51. 51. Ограничение по ресурсам •  Времени мало
  52. 52. Ограничение по ресурсам •  Времени мало •  Людей мало
  53. 53. Ограничение по ресурсам •  Времени мало •  Людей мало •  Людей с экспертизой очень мало
  54. 54. Ограничение по ресурсам •  Времени мало •  Людей мало •  Людей с экспертизой очень мало Но тестировать все равно надо
  55. 55. Решение
  56. 56. Требования к инструменту •  Минимум операций
  57. 57. Требования к инструменту •  Минимум операций •  Простота использования
  58. 58. Требования к инструменту •  Минимум операций •  Простота использования •  Простота реализации
  59. 59. Требования к инструменту •  Минимум операций •  Простота использования •  Простота реализации •  Надежность
  60. 60. Декомпозиция задачи •  Копирование файлов на сервер
  61. 61. Декомпозиция задачи •  Копирование файлов на сервер •  Конфигурационный файл
  62. 62. Декомпозиция задачи •  Копирование файлов на сервер •  Конфигурационный файл •  Скрипт
  63. 63. Декомпозиция задачи •  Копирование файлов на сервер •  Конфигурационный файл •  Скрипт •  Выполнение команд на сервере
  64. 64. Декомпозиция задачи •  Копирование файлов на сервер •  Конфигурационный файл •  Скрипт •  Выполнение команд на сервере •  Перезапуск сервера
  65. 65. Декомпозиция задачи •  Копирование файлов на сервер •  Конфигурационный файл •  Скрипт •  Выполнение команд на сервере •  Перезапуск сервера •  Запуск скрипта
  66. 66. Ansible
  67. 67. Аналоги
  68. 68. Ansible
  69. 69. Почему Ansible?
  70. 70. Почему Ansible?
  71. 71. Почему Ansible?
  72. 72. Про Ansible
  73. 73. Про Ansible
  74. 74. Про Ansible
  75. 75. Про Ansible
  76. 76. Про Ansible
  77. 77. Про Ansible
  78. 78. Примеры
  79. 79. Inventory. Список серверов [hosts] host1 ansible_ssh_host=127.0.0.1 ansible_ssh_user=user ansible_ssh_pass=123 host2 ansible_ssh_host=127.0.0.2 ansible_ssh_user=user ansible_ssh_pass=456
  80. 80. Inventory. Задаем переменные [hosts:vars] return_for_files=502 limit_rate=256K upstream=root.domain.name nginx_apply_method=restarted
  81. 81. Playbook. Запускаем команду - name: run-script | Run script command: tc --help async: 2678400 poll: 0
  82. 82. Playbook. Копируем файлы - name: configure-nginx | Configure nginx template: src=../resources/config.j2 dest=./your-server.conf owner=root group=root mode=0644
  83. 83. Шаблоны #содержимое config.j2 ... return {{return_for_files}}; ...
  84. 84. Эта переменная в inventory [hosts:vars] return_for_files=502 limit_rate=256K upstream=root.domain.name nginx_apply_method=restarted
  85. 85. Вернемся в playbook - name: configure-nginx | Configure nginx template: src=../resources/config.j2 dest=./your-server.conf owner=root group=root mode=0644
  86. 86. Полученный файл #содержимое your-server.conf ... return 502; ...
  87. 87. Playbook. Перезапускаем сервер - name: restart-nginx | Restart nginx service: name=nginx state=restarted when: nginx_apply_method == "restarted"
  88. 88. Та самая переменная в inventory [hosts:vars] return_for_files=502 limit_rate=256K upstream=root.domain.name nginx_apply_method=restarted
  89. 89. Реализация •  Разбиваем на классы конфигураций
  90. 90. Реализация •  Разбиваем на классы конфигураций •  Коды состояния HTTP
  91. 91. Реализация •  Разбиваем на классы конфигураций •  Коды состояния HTTP •  Лимиты скорости
  92. 92. Реализация •  Разбиваем на классы конфигураций •  Коды состояния HTTP •  Лимиты скорости •  Определяем набор параметров для каждого класса
  93. 93. Реализация •  Разбиваем на классы конфигураций •  Коды состояния HTTP •  Лимиты скорости •  Определяем набор параметров для каждого класса •  Пишем playbook'и
  94. 94. Важные моменты •  Каждая операция должна быть обратима
  95. 95. Важные моменты •  Каждая операция должна быть обратима •  Нужно уметь приводить серверы в исходное состояние
  96. 96. Важные моменты •  Каждая операция должна быть обратима •  Нужно уметь приводить серверы в исходное состояние •  Пишем мониторинг состояния
  97. 97. Профит
  98. 98. Ранее •  Подлючаемся к каждому серверу
  99. 99. Ранее •  Подлючаемся к каждому серверу •  Копируем файлы
  100. 100. Ранее •  Подлючаемся к каждому серверу •  Копируем файлы •  Редактируем конфигурацию
  101. 101. Ранее •  Подлючаемся к каждому серверу •  Копируем файлы •  Редактируем конфигурацию •  Запускаем команды
  102. 102. Ранее •  Подлючаемся к каждому серверу •  Копируем файлы •  Редактируем конфигурацию •  Запускаем команды И так каждый раз
  103. 103. Сейчас •  Меняем пару параметров в inventory
  104. 104. Сейчас •  Меняем пару параметров в inventory •  Запускаем нужный playbook
  105. 105. Сейчас •  Меняем пару параметров в inventory •  Запускаем нужный playbook И всё
  106. 106. Интерфейс
  107. 107. Делаем web интерфейс •  Интегрируем в Jenkins
  108. 108. Делаем web интерфейс •  Интегрируем в Jenkins •  Используем стандартные средства SCM
  109. 109. Делаем web интерфейс •  Интегрируем в Jenkins •  Используем стандартные средства SCM •  Пишем что-то своё
  110. 110. Результаты
  111. 111. Результаты •  Тестирование обновления данных стало простым
  112. 112. Результаты •  Тестирование обновления данных стало простым •  Найдено большое количество дефектов
  113. 113. Результаты •  Тестирование обновления данных стало простым •  Найдено большое количество дефектов •  Изучено поведение мобильных платформ
  114. 114. Ссылки •  http://www.ansible.com/ - Ansible •  http://habrahabr.ru/post/211306/ - "Обзор: Puppet, Chef, Ansible, Salt" •  https://jenkins-ci.org/ - Jenkins
  115. 115. Вопросы? Усов Андрей a.usov@2gis.ru usovand@gmail.com

×