Тестируем мобильное приложение всуровых реалиях интернетаУсов Андрей
[email protected] [email protected] techno.2gis.ru
• 2 года в тестировании
• Автоматизирую тестирование бекендов
• Разрабатываю инстументы для
тестирования
О себе
Мобильное приложение 2ГИС v4• iOS, Widows Phone, Android (beta)
• 3 млн. пользователей
• 9 стран
• 288 городов
Мобильное приложение 2ГИС v4• iOS, Widows Phone, Android (beta)
• 3 млн. пользователей
• 9 стран
• 288 городов
• Работает офлайн
Ищи 2ГИС в любом магазине приложений
Нагрузка
• Пиковый трафик 4 Gbps
• Максимум 400 rps
• Объем данных 512 Tb в месяц
Но ещё не вышло обновление для Android (65% пользователей)
Требования
• Выбор стабильных серверов для загрузки
• Устойчивость к отказам даже в процессе закачки
Требования
• Выбор стабильных серверов для загрузки
• Устойчивость к отказам даже в процессе закачки
• Нативные методы фоновой загрузки (iOS, Windows Phone)
Требования
• Выбор стабильных серверов для загрузки
• Устойчивость к отказам даже в процессе закачки
• Нативные методы фоновой загрузки (iOS, Windows Phone)
Оказалось, что эти пункты плохо уживаются
И еще• Перегрузки на сервере
• Редиректы от провайдера
• Ошибки DNS
• Баги в самом web-сервере
Все эти сценарии необходимо проверить
Сложная настройка окружения• Изменение конфигурации web-сервера (Nginx, Apache)
• Выполнение команд в хост-системе
Сложная настройка окружения• Изменение конфигурации web-сервера (Nginx, Apache)
• Выполнение команд в хост-системе
• Запуск произвольного скрипта на сервере
Ограничение по ресурсам• Времени мало
• Людей мало
• Людей с экспертизой очень мало
Но тестировать все равно надо
Требования к инструменту• Минимум операций
• Простота использования
• Простота реализации
• Надежность
Декомпозиция задачи• Копирование файлов на сервер
• Конфигурационный файл
• Скрипт
• Выполнение команд на сервере
Декомпозиция задачи• Копирование файлов на сервер
• Конфигурационный файл
• Скрипт
• Выполнение команд на сервере
• Перезапуск сервера
Декомпозиция задачи• Копирование файлов на сервер
• Конфигурационный файл
• Скрипт
• Выполнение команд на сервере
• Перезапуск сервера
• Запуск скрипта
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
Эта переменная в 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
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
• Лимиты скорости
• Определяем набор параметров для каждого класса
• Пишем playbook'и
Важные моменты• Каждая операция должна быть обратима
• Нужно уметь приводить серверы в исходное состояние
Важные моменты• Каждая операция должна быть обратима
• Нужно уметь приводить серверы в исходное состояние
• Пишем мониторинг состояния
Ранее
• Подлючаемся к каждому серверу
• Копируем файлы
• Редактируем конфигурацию
• Запускаем команды
Ранее
• Подлючаемся к каждому серверу
• Копируем файлы
• Редактируем конфигурацию
• Запускаем команды
И так каждый раз
Делаем web интерфейс• Интегрируем в Jenkins
• Используем стандартные средства SCM
• Пишем что-то своё
Результаты
• Тестирование обновления данных стало простым
• Найдено большое количество дефектов
• Изучено поведение мобильных платформ
Ссылки
• http://www.ansible.com/ - Ansible
• http://habrahabr.ru/post/211306/ - "Обзор: Puppet, Chef, Ansible, Salt"
• https://jenkins-ci.org/ - Jenkins
Top Related