SlideShare una empresa de Scribd logo
1 de 116
Descargar para leer sin conexión
Тестируем мобильное приложение в
суровых реалиях интернета
Усов Андрей
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

Más contenido relacionado

La actualidad más candente

Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
Сергей Татаринцев — Тестирование CSS-регрессий с GeminiСергей Татаринцев — Тестирование CSS-регрессий с Gemini
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
Yandex
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Yandex
 

La actualidad más candente (20)

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

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

Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Ontico
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
Stanfy
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON
 
непрерывная интеграция шаг к непрерывному деплою родионов игорь
непрерывная интеграция   шаг к непрерывному деплою родионов игорьнепрерывная интеграция   шаг к непрерывному деплою родионов игорь
непрерывная интеграция шаг к непрерывному деплою родионов игорь
drupalconf
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ontico
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилище
it-people
 
Иван Евтухович — Как перестать релизиться и начать жить
Иван Евтухович — Как перестать релизиться и начать житьИван Евтухович — Как перестать релизиться и начать жить
Иван Евтухович — Как перестать релизиться и начать жить
Daria Oreshkina
 

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

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

Más de SQALab

Más de SQALab (20)

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

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