SlideShare a Scribd company logo
Тестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в
суровых реалиях интернета
Усов Андрей
a.usov@2gis.ru    usovand@gmail.com    techno.2gis.ru
•  2 года в тестировании
О себе
•  2 года в тестировании
•  Автоматизирую тестирование бекендов
О себе
•  2 года в тестировании
•  Автоматизирую тестирование бекендов
•  Разрабатываю инстументы для
тестирования
О себе
Мобильное приложение 2ГИС v4
•  iOS, Widows Phone, Android (beta)
Мобильное приложение 2ГИС v4
•  iOS, Widows Phone, Android (beta)
•  3 млн. пользователей
Мобильное приложение 2ГИС v4
•  iOS, Widows Phone, Android (beta)
•  3 млн. пользователей
•  9 стран
•  288 городов
Мобильное приложение 2ГИС v4
•  iOS, Widows Phone, Android (beta)
•  3 млн. пользователей
•  9 стран
•  288 городов
•  Работает офлайн
Ищи 2ГИС в любом магазине приложений
Доставка
данных
Нагрузка
•  Пиковый трафик 4 Gbps
Нагрузка
•  Пиковый трафик 4 Gbps
•  Максимум 400 rps
Нагрузка
•  Пиковый трафик 4 Gbps
•  Максимум 400 rps
•  Объем данных 512 Tb в месяц
Нагрузка
•  Пиковый трафик 4 Gbps
•  Максимум 400 rps
•  Объем данных 512 Tb в месяц
Но ещё не вышло обновление для Android (65% пользователей)
Критичность
•  Всегда актуальные данные
Критичность
•  Всегда актуальные данные
•  Обязательства перед партнерами
Критичность
•  Всегда актуальные данные
•  Обязательства перед партнерами
•  Доставка фич
Технология
доставки
Устройство
Приложение
Сеть
Серверы
Nginx
Хранилище
Связь
Выбирает клиент
Требования
•  Выбор стабильных серверов для загрузки
Требования
•  Выбор стабильных серверов для загрузки
•  Устойчивость к отказам даже в процессе закачки
Требования
•  Выбор стабильных серверов для загрузки
•  Устойчивость к отказам даже в процессе закачки
•  Нативные методы фоновой загрузки (iOS, Windows Phone)
Требования
•  Выбор стабильных серверов для загрузки
•  Устойчивость к отказам даже в процессе закачки
•  Нативные методы фоновой загрузки (iOS, Windows Phone)
Оказалось, что эти пункты плохо уживаются
Точки отказа
Нет доступа к сети
Нет связи с сервером
Встроенная реклама
Кончился Интернет
Сервер упал
Нет связи с хранилищем
Хранилище упало
Плохая связь
Обрывы
Сломалось все
И еще
•  Перегрузки на сервере
И еще
•  Перегрузки на сервере
•  Редиректы от провайдера
И еще
•  Перегрузки на сервере
•  Редиректы от провайдера
•  Ошибки DNS
И еще
•  Перегрузки на сервере
•  Редиректы от провайдера
•  Ошибки DNS
•  Баги в самом web-сервере
И еще
•  Перегрузки на сервере
•  Редиректы от провайдера
•  Ошибки DNS
•  Баги в самом web-сервере
Все эти сценарии необходимо проверить
Проблемы
Сложная настройка окружения
•  Изменение конфигурации web-сервера (Nginx, Apache)
Сложная настройка окружения
•  Изменение конфигурации web-сервера (Nginx, Apache)
•  Выполнение команд в хост-системе
Сложная настройка окружения
•  Изменение конфигурации web-сервера (Nginx, Apache)
•  Выполнение команд в хост-системе
•  Запуск произвольного скрипта на сервере
Большое количество работы
•  Серверов несколько
Большое количество работы
•  Серверов несколько
•  Платформы три
Большое количество работы
•  Серверов несколько
•  Платформы три
•  Релизов много
Ограничение по ресурсам
•  Времени мало
Ограничение по ресурсам
•  Времени мало
•  Людей мало
Ограничение по ресурсам
•  Времени мало
•  Людей мало
•  Людей с экспертизой очень мало
Ограничение по ресурсам
•  Времени мало
•  Людей мало
•  Людей с экспертизой очень мало
Но тестировать все равно надо
Решение
Требования к инструменту
•  Минимум операций
Требования к инструменту
•  Минимум операций
•  Простота использования
Требования к инструменту
•  Минимум операций
•  Простота использования
•  Простота реализации
Требования к инструменту
•  Минимум операций
•  Простота использования
•  Простота реализации
•  Надежность
Декомпозиция задачи
•  Копирование файлов на сервер
Декомпозиция задачи
•  Копирование файлов на сервер
•  Конфигурационный файл
Декомпозиция задачи
•  Копирование файлов на сервер
•  Конфигурационный файл
•  Скрипт
Декомпозиция задачи
•  Копирование файлов на сервер
•  Конфигурационный файл
•  Скрипт
•  Выполнение команд на сервере
Декомпозиция задачи
•  Копирование файлов на сервер
•  Конфигурационный файл
•  Скрипт
•  Выполнение команд на сервере
•  Перезапуск сервера
Декомпозиция задачи
•  Копирование файлов на сервер
•  Конфигурационный файл
•  Скрипт
•  Выполнение команд на сервере
•  Перезапуск сервера
•  Запуск скрипта
Ansible
Аналоги
Ansible
Почему Ansible?
Почему Ansible?
Почему Ansible?
Про Ansible
Про Ansible
Про Ansible
Про Ansible
Про Ansible
Про Ansible
Примеры
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
Inventory. Задаем переменные
[hosts:vars]
return_for_files=502
limit_rate=256K
upstream=root.domain.name
nginx_apply_method=restarted
Playbook. Запускаем команду
- name: run-script | Run script
command: tc --help
async: 2678400
poll: 0
Playbook. Копируем файлы
- name: configure-nginx | Configure nginx
template: src=../resources/config.j2
dest=./your-server.conf
owner=root group=root mode=0644
Шаблоны
#содержимое config.j2
...
return {{return_for_files}};
...
Эта переменная в inventory
[hosts:vars]
return_for_files=502
limit_rate=256K
upstream=root.domain.name
nginx_apply_method=restarted
Вернемся в playbook
- name: configure-nginx | Configure nginx
template: src=../resources/config.j2
dest=./your-server.conf
owner=root group=root mode=0644
Полученный файл
#содержимое your-server.conf
...
return 502;
...
Playbook. Перезапускаем сервер
- name: restart-nginx | Restart nginx
service: name=nginx state=restarted
when: nginx_apply_method == "restarted"
Та самая переменная в inventory
[hosts:vars]
return_for_files=502
limit_rate=256K
upstream=root.domain.name
nginx_apply_method=restarted
Реализация
•  Разбиваем на классы конфигураций
Реализация
•  Разбиваем на классы конфигураций
•  Коды состояния HTTP
Реализация
•  Разбиваем на классы конфигураций
•  Коды состояния HTTP
•  Лимиты скорости
Реализация
•  Разбиваем на классы конфигураций
•  Коды состояния HTTP
•  Лимиты скорости
•  Определяем набор параметров для каждого класса
Реализация
•  Разбиваем на классы конфигураций
•  Коды состояния HTTP
•  Лимиты скорости
•  Определяем набор параметров для каждого класса
•  Пишем playbook'и
Важные моменты
•  Каждая операция должна быть обратима
Важные моменты
•  Каждая операция должна быть обратима
•  Нужно уметь приводить серверы в исходное состояние
Важные моменты
•  Каждая операция должна быть обратима
•  Нужно уметь приводить серверы в исходное состояние
•  Пишем мониторинг состояния
Профит
Ранее
•  Подлючаемся к каждому серверу
Ранее
•  Подлючаемся к каждому серверу
•  Копируем файлы
Ранее
•  Подлючаемся к каждому серверу
•  Копируем файлы
•  Редактируем конфигурацию
Ранее
•  Подлючаемся к каждому серверу
•  Копируем файлы
•  Редактируем конфигурацию
•  Запускаем команды
Ранее
•  Подлючаемся к каждому серверу
•  Копируем файлы
•  Редактируем конфигурацию
•  Запускаем команды
И так каждый раз
Сейчас
•  Меняем пару параметров в inventory
Сейчас
•  Меняем пару параметров в inventory
•  Запускаем нужный playbook
Сейчас
•  Меняем пару параметров в inventory
•  Запускаем нужный playbook
И всё
Интерфейс
Делаем web интерфейс
•  Интегрируем в Jenkins
Делаем web интерфейс
•  Интегрируем в Jenkins
•  Используем стандартные средства SCM
Делаем web интерфейс
•  Интегрируем в Jenkins
•  Используем стандартные средства SCM
•  Пишем что-то своё
Результаты
Результаты
•  Тестирование обновления данных стало простым
Результаты
•  Тестирование обновления данных стало простым
•  Найдено большое количество дефектов
Результаты
•  Тестирование обновления данных стало простым
•  Найдено большое количество дефектов
•  Изучено поведение мобильных платформ
Ссылки
•  http://www.ansible.com/ - Ansible
•  http://habrahabr.ru/post/211306/ - "Обзор: Puppet, Chef, Ansible, Salt"
•  https://jenkins-ci.org/ - Jenkins
Вопросы?
Усов Андрей
a.usov@2gis.ru
usovand@gmail.com

More Related Content

PDF
Winium — это как Selenium, только под Windows
PDF
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
PDF
«Тестируем веб приложения», Павел Сташевский
PPTX
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
PPTX
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
PPTX
GUI-автоматизация в Telerik Test Studio
PDF
Дефицит ресурсов тестирования... или нет?
PDF
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
Winium — это как Selenium, только под Windows
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
«Тестируем веб приложения», Павел Сташевский
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
GUI-автоматизация в Telerik Test Studio
Дефицит ресурсов тестирования... или нет?
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования

What's hot (20)

PDF
UICov - инструмент анализа покрытия UI-тестами
PPTX
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика
PPT
Инструментация среды исполнения в арсенале тестировщика
PDF
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
PPTX
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр Ковалев
PPTX
Опыт автоматизации интеграционного тестирования и внедрения DevOps в банковск...
PPTX
Тестирование REST-сервисов с применением инженерных практик
PDF
WP как экспериментальная платформа
PDF
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
PPTX
Автоматическое тестирование Web api
PDF
Как мы приручили демона или процесс тестирования демонов в Badoo
PDF
Денис Чистяков: Workflow. Работа над проектом в Яндексе
PDF
«Winium — это как Selenium, только под Windows» – Глеб Головин, 2ГИС
PPTX
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
PPTX
Использование анализатора кода SonarQube
PDF
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
PDF
Как Cluster Membership Software может помочь QA
PPTX
Как играть без игрока
PPTX
Free Desktop QA Engineers: implement automation testing
PDF
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
UICov - инструмент анализа покрытия UI-тестами
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика
Инструментация среды исполнения в арсенале тестировщика
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр Ковалев
Опыт автоматизации интеграционного тестирования и внедрения DevOps в банковск...
Тестирование REST-сервисов с применением инженерных практик
WP как экспериментальная платформа
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
Автоматическое тестирование Web api
Как мы приручили демона или процесс тестирования демонов в Badoo
Денис Чистяков: Workflow. Работа над проектом в Яндексе
«Winium — это как Selenium, только под Windows» – Глеб Головин, 2ГИС
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Использование анализатора кода SonarQube
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Как Cluster Membership Software может помочь QA
Как играть без игрока
Free Desktop QA Engineers: implement automation testing
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Ad

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

PDF
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
PDF
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
PDF
Вадим Мадисон "Опыт разработки через микросервисы"
PDF
И снова разработка под iOS. Павел Тайкало
PPTX
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
PDF
Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"
PDF
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
PPT
непрерывная интеграция шаг к непрерывному деплою родионов игорь
PDF
Continuous integration testing of mobile SDK
PDF
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
PDF
My Open Source (Sept 2017)
PDF
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
PDF
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
PDF
So Your WAF Needs a Parser
PDF
Александр Киракозов "Архитектура загрузчика Яндекс.Диска"
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PDF
Continuousdelivery
PPTX
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
PDF
ekbpy'2012 - Данила Штань - Распределенное хранилище
PDF
Иван Евтухович — Как перестать релизиться и начать жить
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
Вадим Мадисон "Опыт разработки через микросервисы"
И снова разработка под iOS. Павел Тайкало
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
непрерывная интеграция шаг к непрерывному деплою родионов игорь
Continuous integration testing of mobile SDK
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
My Open Source (Sept 2017)
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
So Your WAF Needs a Parser
Александр Киракозов "Архитектура загрузчика Яндекс.Диска"
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Continuousdelivery
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
ekbpy'2012 - Данила Штань - Распределенное хранилище
Иван Евтухович — Как перестать релизиться и начать жить
Ad

More from SQALab (20)

PDF
Готовим стажировку
PPTX
Куда приводят мечты? или Искусство развития тестировщика
PPT
Оптимизация Selenium тестов и ускорение их поддержки
PPT
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
PPTX
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
PPTX
Continuous performance testing
PDF
Конфиги вместо костылей. Pytestconfig и зачем он нужен
PPT
Команда чемпионов в ИТ стихии
PPTX
API. Серебряная пуля в магазине советов
PPTX
Добиваемся эффективности каждого из 9000+ UI-тестов
PPT
Делаем автоматизацию проектных KPIs
PDF
Вредные привычки в тест-менеджменте
PPTX
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
PPT
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
PPTX
Стили лидерства и тестирование
PPT
"Давайте не будем про качество"
PDF
Apache.JMeter для .NET-проектов
PPTX
Тестирование геолокационных систем
PPTX
Лидер или босс? Вот в чем вопрос
PPTX
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
Готовим стажировку
Куда приводят мечты? или Искусство развития тестировщика
Оптимизация Selenium тестов и ускорение их поддержки
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Continuous performance testing
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Команда чемпионов в ИТ стихии
API. Серебряная пуля в магазине советов
Добиваемся эффективности каждого из 9000+ UI-тестов
Делаем автоматизацию проектных KPIs
Вредные привычки в тест-менеджменте
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Стили лидерства и тестирование
"Давайте не будем про качество"
Apache.JMeter для .NET-проектов
Тестирование геолокационных систем
Лидер или босс? Вот в чем вопрос
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...

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