ݺߣ

ݺߣShare a Scribd company logo
QaApi 
взгляд на тестирование с другой стороны баррикад 
Дмитрий Марущенко
Badoo - это про знакомства...
...и про технологии 
У нас было 2 веб-сайта, 4 разных мобильных платформы 
и целое море различных версий мобильных приложений, 
а также версия для мобильных браузеров и приложения в 
социальных сетях. Не то что бы все это было 
категорически необходимо для бизнеса, но если уж 
начали делать социальную сеть, то становится трудно 
остановиться. Единственное, что вызывало у меня 
опасения - это релизы вечером в пятницу. Нет ничего 
более беспомощного, безответственного и испорченного, 
чем пятничный релиз. Я знал, что рано или поздно мы 
перейдем и эту грань. 
“ 
”
Что такое QaApi? 
QaApi - это API (Application Programming 
Interface) для отдела QA (Quality Assurance). 
Это API предназначено для изменения 
внутреннего состояния системы в процессе 
ручного или автоматизированного 
тестирования приложения.
Что такое QaApi? 
QaApi - это API (Application Programming 
Interface) для отдела QA (Quality Assurance). 
БОЖЕ МОЙ! 
ДА ЧТО Ж ТАК 
СКУЧНО-ТО, А? 
Это API предназначено для изменения 
внутреннего состояния системы в процессе 
ручного или автоматизированного 
тестирования приложения.
Начнем издалека
Знаете, что самое важное на этом плане?
? 
Знаете, что самое важное на этом плане?
Короткие пути! 
Знаете, что самое важное на этом плане?
Типичный тест-кейс 
“ 
Пользователи, зарегистрированные 
на Badoo более месяца назад, в день 
своего рождения получают в подарок 
100 кредитов*. 
” 
* Пример выдуманный! :)
Как будем тестировать? 
● регистрируемся 
● ждем месяц??? 
● ждем ещё... 
● … до дня рождения? 
● получаем кредиты 
● PROFIT?
Или поищем короткий 
путь?
“Подкрутите мне в базе…” 
Эволюция обращений к программистам: 
1. “А сделайте мне, чтоб дата 
регистрации была месяц назад?” 
2. “А скажите, где в базе хранится дата 
регистрации, я вручную изменю?” 
3. “А давайте сделаем интерфейс, где 
каждый сможет менять дату?” 
4. “А запилите нам API?” 
Все любят короткие пути!
Почему именно API? 
Чем это лучше веб-интерфейса?
Автотесты 
Эти инструменты легко интегрировать с API, но очень сложно - с веб-интерфейсом: 
Calabash 
Система тестирования 
мобильных приложений, 
основанная на Ruby и Cucumber. 
Selenium 
Мощный инструмент 
автоматизации 
браузеров. 
Интеграционные 
тесты 
Тестирование клиент-серверного 
взаимодействия.
Наша идея вам подойдет, если: 
● ваше приложение имеет 
серверную часть 
QaApi не поможет тестировщикам 
оффлайн-игры на телефоне 
● ваше приложение хранит 
состояние между запросами 
частный случай ‒ в системе 
регистрируются пользователи 
● вы уже как минимум на 3 этапе 
интерфейс уже есть, пора пилить API
Что за API такое? 
Лапа̀роскопи́я (др.-греч. λαπάρα — пах, 
чрево + др.-греч. σκοπέω — смотрю) — 
современный метод хирургии, в котором 
операции на внутренних органах 
проводят через небольшие (обычно 
0,5—1,5 см) отверстия, в то время как 
при традиционной хирургии требуются 
большие разрезы. 
“ 
” QaApi - это то самое 
небольшое отверстие, через 
которое тестировщики смогут 
вмешиваться в деятельность 
живой (“боевой”) системы.
Как это работает 
дай мне нового юзера 
registerNewUser(age=25) 
да пожалуйста! 
{success:true, user_id:123, name:Alex, login:test123, passwd:Aj8SD8} 
добавь ему фото 
addPhoto(count=1) 
нет проблем! 
{success: true} 
и дату регистрации смени 
setRegistrationDate(date=2014-02-12) 
как скажешь, хозяин! 
{success: true}
Что оно должно уметь? 
Зависит от вашего проекта. У каждого - своё API. 
Наше API умеет: 
● регистрировать, изменять и удалять юзеров 
● голосовать за пользователей 
● отправлять сообщения 
● включать/выключать платные услуги 
● добавлять “кредиты” 
● загружать и “модерировать” фотки 
● давать информацию (например свойства юзера) 
● и всякое другое
Куда идти? 
Конечно, к разработчикам! Можно так: 
Запилите мне API, тысяча чертей! Okay 
Отдел QA Отдел разработки
Но лучше так.
Что мы хотим получить? 
● все функции в одном месте 
● простота протокола 
● страничка помощи 
● система авторизации 
● управление тестовыми юзерами 
● безопасность “боевых” данных
А что под капотом?
Keep it simple 
˟̀˾́̂˾˹+773˷˰˿̀˾́ 
http://qaapi.example.com/setRegistrationDate?user_id=123date=20140612 
˞̂˲˵̂˲̄˾̀˼˰̂˵-621 
{ 
status: success, 
user: { 
user_id: 123, 
registration_date: 2014-06-12, 
} 
}
Что у нас есть? 
✓ все функции в одном месте 
✓ простота протокола 
● страничка помощи 
● система авторизации 
● управление тестовыми юзерами 
● безопасность “боевых” данных
Страница помощи 
В QaApi есть страничка помощи, где перечислены все имеющиеся методы 
(описание, возможные аргументы и тип возвращаемого значения). 
Эта страничка генерируется автоматически из исходного кода QaApi.
Авторизация 
Ручной режим 
Интеграция с существующей системой доступа 
для сотрудников, с возможностью управлять 
полномочиями. 
Автоматизация 
Сущестует несколько простых подходов: 
1. Секретный ключ в HTTP-заголовке 
GET /methodName?foo=bar HTTP/1.1 
Host: qaapi.example.com 
Connection: keep-alive 
X-Secret-Header : abcdEfg76kGkljhJHk92 
2. HTTP Basic Auth 
GET /methodName?foo=bar HTTP/1.1 
Host: qaapi.example.com 
Connection: keep-alive 
Authorization : Basic cdEfа3GkljhJHk54== 
3. Логин-пароль в параметрах запроса 
GET /methodName? login=testpass=123 HTTP/1.1 
Host: qaapi.example.com 
Connection: keep-alive
Что у нас есть? 
✓ все функции в одном месте 
✓ простота протокола 
✓ страничка помощи 
✓ система авторизации 
● управление тестовыми юзерами 
● безопасность “боевых” данных
Тестовые пользователи 
Для тестирования постоянно требуются 
пользователи с разными свойствами.
Где их взять? 
Создавать новых юзеров 
+ юзер “чистый” 
+ его никто не использует 
+ можно делать что хотим и не чистить 
− быстро плодятся 
− нужно готовить к тесту 
Использовать заранее созданных 
+ юзер готов к тесту 
+ юзеров немного 
− нужно чистить 
− может использоваться кем-то ещё 
− другие могли не почистить 
VS
Наше решение - пул юзеров 
Цикл жизни тестового юзера в пуле 
Создан ˜˾˶˵̂˱̋̂̌˸˷˼˵˽˵˽ 
Ждет в пуле Используется 
Очистка “Использован” 
˲˿̀˾̆˵́́˵̂˵́̂˰ 
˝˵˼˾˶˵̂˱̋̂̌ 
˸́˿˾˻̌˷˾˲˰˽ 
˿˾˲̂˾̀˽˾˴˾˾̇˸́̂˺˸ 
registerUser()
Регистрация юзеров 
Создание новых юзеров - только тогда, когда подходящего нет в пуле. 
Регистрируем Ж, 25 лет, 
Москва 
Есть такой 
юзер? 
Создать нового юзера 
˽˵̂ 
˴˰ 
Взять из пула Добавить в пул 
˔˾˱˰˲˻˵˽́ 
˿˰̀˰˼˵̂̀˰˼˸ 
˖˜˾́˺˲˰ 
registerUser() 
ˣ˺˰˷̋˲˰˵˼̂˾˻̌˺˾ 
́̃̉˵́̂˲˵˽˽̋˵˴˻̏ 
˽˰́˿˰̀˰˼˵̂̀̋
Подготовка юзеров 
Так как пользователь “новый”, необходимо 
подготовить его к тесту, например: 
● сменить дату регистрации 
● добавить фото, сообщения и т.д. 
● добавить и подтвердить номер телефона 
● и т. д. 
Все это делается с помощью QaApi
Схема подготовки юзера 
Подготовка юзера с помощью QaApi 
http://qaapi.example.com/registerUser?gender=Fage=25location=Moscow 
# {success: true, user_id: 123, login: testuser123, passwd: Qa6G9v} 
http://qaapi.example.com/uploadPhotos?user_id=123count=1 
# {success: true} 
http://qaapi.example.com/setRegistrationDate?user_id=123date=2014-02-12 
# {success: true}
Немного о процессе очистки пользователей
Идеального решения нет 
Наш путь: 
● очистка - набор предопределенных шагов 
● на каждое “сохраняемое состояние” - свой шаг очистки 
(примеры: сообщения, отзывы, покупки…) 
● юзер считается “очищенным” и готовым к использованию, если 
успешно отработали все шаги очистки 
Шаги очистки будут добавлять программисты. Они 
могут забыть добавить новый шаг при добавлении 
новой фичи. Следить за этим придется вам.
Что у нас есть? 
✓ все функции в одном месте 
✓ простота протокола 
✓ страничка помощи 
✓ система авторизации 
✓ управление тестовыми юзерами 
● безопасность “боевых” данных
Люди не идеальны. Нам нужна защита от дурака.
Живые пользователи 
Методы QaApi работают только с тестовыми 
пользователями. 
Это не может защитить вас от намеренного злоупотребления, но 
помогает защититься от таких ошибок, как опечатка в user id. 
В качестве дополнительной защиты вы можете реализовать 
различные права доступа к различным методам QaApi.
No robots allowed! 
Юзеры из пула QaApi не видны живым пользователям!
Что у нас есть? 
✓ все функции в одном месте 
✓ простота протокола 
✓ страничка помощи 
✓ система авторизации 
✓ управление тестовыми юзерами 
✓ безопасность “боевых” данных
Продвинутое кунг-фу
Сценарии QaAPI 
Было: 
RSXVHUBLG 
http://qaapi.example.com/registerUser?gender=Fage=25 
# {success: true, user_id: 123, login: testuser123, passwd: Qa6G9v} 
http://qaapi.example.com/setRegistrationDate?user_id=123date=2014-02-12 
3DVWHXVHUBLG 
Стало: 
$rslt = run registerUser({gender: F, age: 25, location: Moscow}) 
# {success: true, user_id: 123, login: testuser123, passwd: Qa6G9v} 
run setRegistrationDate({user_id:$rslt[user_id], date: 2014-02-12})
A/B-тестирование 
A/B - тестирование - это инструмент для оценки эффективности какого-либо нововведения. 
Выберешь синюю пилюлю – и эта история 
закончится. Ты проснешься в своей постели и 
будешь верить в то, во что тебе хочется 
верить. Выберешь красную – попадешь в 
Страну Чудес, и я покажу тебе, насколько 
глубока кроличья нора ... “ 
” Где взять пользователя, который точно 
? пойдет за белым кроликом? 
Поручите это QaApi!
Статистика команд 
Выявление регрессий в новых версиях мобильных клиентов 
● клиент с помощью QaApi проставляет отметку о том, что выполняется определенный тестовый сценарий 
● система осуществляет сбор логов взаимодействия клиента и сервера 
● производится автоматическая обработка этих логов 
● строятся графики по количеству команд в каждом тестовом сценарии 
WTF?
Мы внедрили QaApi и стали более лучше 
жить! 
Почему вам стоит начать делать техническое задание 
уже завтра? 
● меньше рутины 
● проще тестировать сложные кейсы 
● автотесты - на новый уровень 
● разработчики - ваши друзья! 
Что в итоге?
Что я не рассказал 
но должен был рассказать?

More Related Content

What's hot (19)

Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
CEE-SEC(R)
Как мы приручили демона или процесс тестирования демонов в Badoo
Как мы приручили демона или процесс тестирования демонов в BadooКак мы приручили демона или процесс тестирования демонов в Badoo
Как мы приручили демона или процесс тестирования демонов в Badoo
SQALab
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
Багфиксинг процесса разработки в iOS: взгляд с двух сторонБагфиксинг процесса разработки в iOS: взгляд с двух сторон
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
Badoo Development
Эволюция нагрузочного тестирования – от простой автоматизации до BDD
Эволюция нагрузочного тестирования – от простой автоматизации до BDDЭволюция нагрузочного тестирования – от простой автоматизации до BDD
Эволюция нагрузочного тестирования – от простой автоматизации до BDD
CEE-SEC(R)
Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demand
SQALab
Реактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложенияРеактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложения
Matvey Malkov
Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформы
SQALab
Behavior Driven Development
Behavior Driven DevelopmentBehavior Driven Development
Behavior Driven Development
Return on Intelligence
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙСтановление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
CEE-SEC(R)
Load testing with Tsung
Load testing with TsungLoad testing with Tsung
Load testing with Tsung
Alex Chistyakov
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
CodeFest
Мобильный веб: назад в будущее
Мобильный веб: назад в будущееМобильный веб: назад в будущее
Мобильный веб: назад в будущее
Badoo Development
Behat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектахBehat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектах
SQALab
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Oleg Nenashev
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
CEE-SEC(R)
CI для тестировщиков или как отказаться от релизов
CI для тестировщиков или как отказаться от релизовCI для тестировщиков или как отказаться от релизов
CI для тестировщиков или как отказаться от релизов
SQALab
Роман Приходько, Владимир Беспрозванных, «Сбербанк-Технологии» — Платформа ЕФС
Роман Приходько, Владимир Беспрозванных, «Сбербанк-Технологии» — Платформа ЕФСРоман Приходько, Владимир Беспрозванных, «Сбербанк-Технологии» — Платформа ЕФС
Роман Приходько, Владимир Беспрозванных, «Сбербанк-Технологии» — Платформа ЕФС
Dev_Party
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST API
Pavel Asanov
WP как экспериментальная платформа
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформа
SQALab
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
CEE-SEC(R)
Как мы приручили демона или процесс тестирования демонов в Badoo
Как мы приручили демона или процесс тестирования демонов в BadooКак мы приручили демона или процесс тестирования демонов в Badoo
Как мы приручили демона или процесс тестирования демонов в Badoo
SQALab
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
Багфиксинг процесса разработки в iOS: взгляд с двух сторонБагфиксинг процесса разработки в iOS: взгляд с двух сторон
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
Badoo Development
Эволюция нагрузочного тестирования – от простой автоматизации до BDD
Эволюция нагрузочного тестирования – от простой автоматизации до BDDЭволюция нагрузочного тестирования – от простой автоматизации до BDD
Эволюция нагрузочного тестирования – от простой автоматизации до BDD
CEE-SEC(R)
Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demand
SQALab
Реактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложенияРеактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложения
Matvey Malkov
Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформы
SQALab
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙСтановление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
CEE-SEC(R)
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
CodeFest
Мобильный веб: назад в будущее
Мобильный веб: назад в будущееМобильный веб: назад в будущее
Мобильный веб: назад в будущее
Badoo Development
Behat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектахBehat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектах
SQALab
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Oleg Nenashev
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
CEE-SEC(R)
CI для тестировщиков или как отказаться от релизов
CI для тестировщиков или как отказаться от релизовCI для тестировщиков или как отказаться от релизов
CI для тестировщиков или как отказаться от релизов
SQALab
Роман Приходько, Владимир Беспрозванных, «Сбербанк-Технологии» — Платформа ЕФС
Роман Приходько, Владимир Беспрозванных, «Сбербанк-Технологии» — Платформа ЕФСРоман Приходько, Владимир Беспрозванных, «Сбербанк-Технологии» — Платформа ЕФС
Роман Приходько, Владимир Беспрозванных, «Сбербанк-Технологии» — Платформа ЕФС
Dev_Party
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST API
Pavel Asanov
WP как экспериментальная платформа
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформа
SQALab

Similar to QaApi: взгляд на тестирование с другой стороны баррикад (20)

Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
WrikeTechClub
Развитие процессов тестирования в Badoo за три года
Развитие процессов тестирования в Badoo за три годаРазвитие процессов тестирования в Badoo за три года
Развитие процессов тестирования в Badoo за три года
SQALab
Seamy side of autotests
Seamy side of autotestsSeamy side of autotests
Seamy side of autotests
Anton Stepanenko
Илья Кудинов
Илья КудиновИлья Кудинов
Илья Кудинов
CodeFest
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
DevDay
еще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийеще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложений
snowytoxa
Vladimir Trandafilov - When you need your system of cross browser testing
Vladimir Trandafilov - When you need your system of cross browser testingVladimir Trandafilov - When you need your system of cross browser testing
Vladimir Trandafilov - When you need your system of cross browser testing
Ievgenii Katsan
iMetrics 2012. Станислав Видяев - Google Russia. Настройка, обзор системы, но...
iMetrics 2012. Станислав Видяев - Google Russia. Настройка, обзор системы, но...iMetrics 2012. Станислав Видяев - Google Russia. Настройка, обзор системы, но...
iMetrics 2012. Станислав Видяев - Google Russia. Настройка, обзор системы, но...
Artyom Tsiplakov
Мастер-класс по Google Analytics
Мастер-класс по Google AnalyticsМастер-класс по Google Analytics
Мастер-класс по Google Analytics
iMetrics
10_tips_for_become_qa
10_tips_for_become_qa10_tips_for_become_qa
10_tips_for_become_qa
SoftengiTrainingCenter
Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»
Sergey Xek
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Alexey Kostin
Аналитика мобильных приложений
Аналитика мобильных приложенийАналитика мобильных приложений
Аналитика мобильных приложений
Anatoly Sharifulin
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
Igor Khrol
Виды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спроститьВиды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спростить
GoIT
Cоздание приложений со знанием Perl
Cоздание приложений со знанием PerlCоздание приложений со знанием Perl
Cоздание приложений со знанием Perl
Anatoly Sharifulin
10M tests per day
10M tests per day10M tests per day
10M tests per day
Sergey Grinev
Web аналитика на полную!
Web аналитика на полную!Web аналитика на полную!
Web аналитика на полную!
MarkEd - Образовательная платформа
Как автоматизировать тестирование метрик на сайте
Как автоматизировать тестирование метрик на сайтеКак автоматизировать тестирование метрик на сайте
Как автоматизировать тестирование метрик на сайте
Маркетинг-аналитика с OWOX BI
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...
QAFest
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
WrikeTechClub
Развитие процессов тестирования в Badoo за три года
Развитие процессов тестирования в Badoo за три годаРазвитие процессов тестирования в Badoo за три года
Развитие процессов тестирования в Badoo за три года
SQALab
Илья Кудинов
Илья КудиновИлья Кудинов
Илья Кудинов
CodeFest
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
DevDay
еще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийеще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложений
snowytoxa
Vladimir Trandafilov - When you need your system of cross browser testing
Vladimir Trandafilov - When you need your system of cross browser testingVladimir Trandafilov - When you need your system of cross browser testing
Vladimir Trandafilov - When you need your system of cross browser testing
Ievgenii Katsan
iMetrics 2012. Станислав Видяев - Google Russia. Настройка, обзор системы, но...
iMetrics 2012. Станислав Видяев - Google Russia. Настройка, обзор системы, но...iMetrics 2012. Станислав Видяев - Google Russia. Настройка, обзор системы, но...
iMetrics 2012. Станислав Видяев - Google Russia. Настройка, обзор системы, но...
Artyom Tsiplakov
Мастер-класс по Google Analytics
Мастер-класс по Google AnalyticsМастер-класс по Google Analytics
Мастер-класс по Google Analytics
iMetrics
Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»
Sergey Xek
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Alexey Kostin
Аналитика мобильных приложений
Аналитика мобильных приложенийАналитика мобильных приложений
Аналитика мобильных приложений
Anatoly Sharifulin
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
Igor Khrol
Виды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спроститьВиды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спростить
GoIT
Cоздание приложений со знанием Perl
Cоздание приложений со знанием PerlCоздание приложений со знанием Perl
Cоздание приложений со знанием Perl
Anatoly Sharifulin
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...
QAFest

QaApi: взгляд на тестирование с другой стороны баррикад

  • 1. QaApi взгляд на тестирование с другой стороны баррикад Дмитрий Марущенко
  • 2. Badoo - это про знакомства...
  • 3. ...и про технологии У нас было 2 веб-сайта, 4 разных мобильных платформы и целое море различных версий мобильных приложений, а также версия для мобильных браузеров и приложения в социальных сетях. Не то что бы все это было категорически необходимо для бизнеса, но если уж начали делать социальную сеть, то становится трудно остановиться. Единственное, что вызывало у меня опасения - это релизы вечером в пятницу. Нет ничего более беспомощного, безответственного и испорченного, чем пятничный релиз. Я знал, что рано или поздно мы перейдем и эту грань. “ ”
  • 4. Что такое QaApi? QaApi - это API (Application Programming Interface) для отдела QA (Quality Assurance). Это API предназначено для изменения внутреннего состояния системы в процессе ручного или автоматизированного тестирования приложения.
  • 5. Что такое QaApi? QaApi - это API (Application Programming Interface) для отдела QA (Quality Assurance). БОЖЕ МОЙ! ДА ЧТО Ж ТАК СКУЧНО-ТО, А? Это API предназначено для изменения внутреннего состояния системы в процессе ручного или автоматизированного тестирования приложения.
  • 7. Знаете, что самое важное на этом плане?
  • 8. ? Знаете, что самое важное на этом плане?
  • 9. Короткие пути! Знаете, что самое важное на этом плане?
  • 10. Типичный тест-кейс “ Пользователи, зарегистрированные на Badoo более месяца назад, в день своего рождения получают в подарок 100 кредитов*. ” * Пример выдуманный! :)
  • 11. Как будем тестировать? ● регистрируемся ● ждем месяц??? ● ждем ещё... ● … до дня рождения? ● получаем кредиты ● PROFIT?
  • 13. “Подкрутите мне в базе…” Эволюция обращений к программистам: 1. “А сделайте мне, чтоб дата регистрации была месяц назад?” 2. “А скажите, где в базе хранится дата регистрации, я вручную изменю?” 3. “А давайте сделаем интерфейс, где каждый сможет менять дату?” 4. “А запилите нам API?” Все любят короткие пути!
  • 14. Почему именно API? Чем это лучше веб-интерфейса?
  • 15. Автотесты Эти инструменты легко интегрировать с API, но очень сложно - с веб-интерфейсом: Calabash Система тестирования мобильных приложений, основанная на Ruby и Cucumber. Selenium Мощный инструмент автоматизации браузеров. Интеграционные тесты Тестирование клиент-серверного взаимодействия.
  • 16. Наша идея вам подойдет, если: ● ваше приложение имеет серверную часть QaApi не поможет тестировщикам оффлайн-игры на телефоне ● ваше приложение хранит состояние между запросами частный случай ‒ в системе регистрируются пользователи ● вы уже как минимум на 3 этапе интерфейс уже есть, пора пилить API
  • 17. Что за API такое? Лапа̀роскопи́я (др.-греч. λαπάρα — пах, чрево + др.-греч. σκοπέω — смотрю) — современный метод хирургии, в котором операции на внутренних органах проводят через небольшие (обычно 0,5—1,5 см) отверстия, в то время как при традиционной хирургии требуются большие разрезы. “ ” QaApi - это то самое небольшое отверстие, через которое тестировщики смогут вмешиваться в деятельность живой (“боевой”) системы.
  • 18. Как это работает дай мне нового юзера registerNewUser(age=25) да пожалуйста! {success:true, user_id:123, name:Alex, login:test123, passwd:Aj8SD8} добавь ему фото addPhoto(count=1) нет проблем! {success: true} и дату регистрации смени setRegistrationDate(date=2014-02-12) как скажешь, хозяин! {success: true}
  • 19. Что оно должно уметь? Зависит от вашего проекта. У каждого - своё API. Наше API умеет: ● регистрировать, изменять и удалять юзеров ● голосовать за пользователей ● отправлять сообщения ● включать/выключать платные услуги ● добавлять “кредиты” ● загружать и “модерировать” фотки ● давать информацию (например свойства юзера) ● и всякое другое
  • 20. Куда идти? Конечно, к разработчикам! Можно так: Запилите мне API, тысяча чертей! Okay Отдел QA Отдел разработки
  • 22. Что мы хотим получить? ● все функции в одном месте ● простота протокола ● страничка помощи ● система авторизации ● управление тестовыми юзерами ● безопасность “боевых” данных
  • 23. А что под капотом?
  • 24. Keep it simple ˟̀˾́̂˾˹+773˷˰˿̀˾́ http://qaapi.example.com/setRegistrationDate?user_id=123date=20140612 ˞̂˲˵̂˲̄˾̀˼˰̂˵-621 { status: success, user: { user_id: 123, registration_date: 2014-06-12, } }
  • 25. Что у нас есть? ✓ все функции в одном месте ✓ простота протокола ● страничка помощи ● система авторизации ● управление тестовыми юзерами ● безопасность “боевых” данных
  • 26. Страница помощи В QaApi есть страничка помощи, где перечислены все имеющиеся методы (описание, возможные аргументы и тип возвращаемого значения). Эта страничка генерируется автоматически из исходного кода QaApi.
  • 27. Авторизация Ручной режим Интеграция с существующей системой доступа для сотрудников, с возможностью управлять полномочиями. Автоматизация Сущестует несколько простых подходов: 1. Секретный ключ в HTTP-заголовке GET /methodName?foo=bar HTTP/1.1 Host: qaapi.example.com Connection: keep-alive X-Secret-Header : abcdEfg76kGkljhJHk92 2. HTTP Basic Auth GET /methodName?foo=bar HTTP/1.1 Host: qaapi.example.com Connection: keep-alive Authorization : Basic cdEfа3GkljhJHk54== 3. Логин-пароль в параметрах запроса GET /methodName? login=testpass=123 HTTP/1.1 Host: qaapi.example.com Connection: keep-alive
  • 28. Что у нас есть? ✓ все функции в одном месте ✓ простота протокола ✓ страничка помощи ✓ система авторизации ● управление тестовыми юзерами ● безопасность “боевых” данных
  • 29. Тестовые пользователи Для тестирования постоянно требуются пользователи с разными свойствами.
  • 30. Где их взять? Создавать новых юзеров + юзер “чистый” + его никто не использует + можно делать что хотим и не чистить − быстро плодятся − нужно готовить к тесту Использовать заранее созданных + юзер готов к тесту + юзеров немного − нужно чистить − может использоваться кем-то ещё − другие могли не почистить VS
  • 31. Наше решение - пул юзеров Цикл жизни тестового юзера в пуле Создан ˜˾˶˵̂˱̋̂̌˸˷˼˵˽˵˽ Ждет в пуле Используется Очистка “Использован” ˲˿̀˾̆˵́́˵̂˵́̂˰ ˝˵˼˾˶˵̂˱̋̂̌ ˸́˿˾˻̌˷˾˲˰˽ ˿˾˲̂˾̀˽˾˴˾˾̇˸́̂˺˸ registerUser()
  • 32. Регистрация юзеров Создание новых юзеров - только тогда, когда подходящего нет в пуле. Регистрируем Ж, 25 лет, Москва Есть такой юзер? Создать нового юзера ˽˵̂ ˴˰ Взять из пула Добавить в пул ˔˾˱˰˲˻˵˽́ ˿˰̀˰˼˵̂̀˰˼˸ ˖˜˾́˺˲˰ registerUser() ˣ˺˰˷̋˲˰˵˼̂˾˻̌˺˾ ́̃̉˵́̂˲˵˽˽̋˵˴˻̏ ˽˰́˿˰̀˰˼˵̂̀̋
  • 33. Подготовка юзеров Так как пользователь “новый”, необходимо подготовить его к тесту, например: ● сменить дату регистрации ● добавить фото, сообщения и т.д. ● добавить и подтвердить номер телефона ● и т. д. Все это делается с помощью QaApi
  • 34. Схема подготовки юзера Подготовка юзера с помощью QaApi http://qaapi.example.com/registerUser?gender=Fage=25location=Moscow # {success: true, user_id: 123, login: testuser123, passwd: Qa6G9v} http://qaapi.example.com/uploadPhotos?user_id=123count=1 # {success: true} http://qaapi.example.com/setRegistrationDate?user_id=123date=2014-02-12 # {success: true}
  • 35. Немного о процессе очистки пользователей
  • 36. Идеального решения нет Наш путь: ● очистка - набор предопределенных шагов ● на каждое “сохраняемое состояние” - свой шаг очистки (примеры: сообщения, отзывы, покупки…) ● юзер считается “очищенным” и готовым к использованию, если успешно отработали все шаги очистки Шаги очистки будут добавлять программисты. Они могут забыть добавить новый шаг при добавлении новой фичи. Следить за этим придется вам.
  • 37. Что у нас есть? ✓ все функции в одном месте ✓ простота протокола ✓ страничка помощи ✓ система авторизации ✓ управление тестовыми юзерами ● безопасность “боевых” данных
  • 38. Люди не идеальны. Нам нужна защита от дурака.
  • 39. Живые пользователи Методы QaApi работают только с тестовыми пользователями. Это не может защитить вас от намеренного злоупотребления, но помогает защититься от таких ошибок, как опечатка в user id. В качестве дополнительной защиты вы можете реализовать различные права доступа к различным методам QaApi.
  • 40. No robots allowed! Юзеры из пула QaApi не видны живым пользователям!
  • 41. Что у нас есть? ✓ все функции в одном месте ✓ простота протокола ✓ страничка помощи ✓ система авторизации ✓ управление тестовыми юзерами ✓ безопасность “боевых” данных
  • 43. Сценарии QaAPI Было: RSXVHUBLG http://qaapi.example.com/registerUser?gender=Fage=25 # {success: true, user_id: 123, login: testuser123, passwd: Qa6G9v} http://qaapi.example.com/setRegistrationDate?user_id=123date=2014-02-12 3DVWHXVHUBLG Стало: $rslt = run registerUser({gender: F, age: 25, location: Moscow}) # {success: true, user_id: 123, login: testuser123, passwd: Qa6G9v} run setRegistrationDate({user_id:$rslt[user_id], date: 2014-02-12})
  • 44. A/B-тестирование A/B - тестирование - это инструмент для оценки эффективности какого-либо нововведения. Выберешь синюю пилюлю – и эта история закончится. Ты проснешься в своей постели и будешь верить в то, во что тебе хочется верить. Выберешь красную – попадешь в Страну Чудес, и я покажу тебе, насколько глубока кроличья нора ... “ ” Где взять пользователя, который точно ? пойдет за белым кроликом? Поручите это QaApi!
  • 45. Статистика команд Выявление регрессий в новых версиях мобильных клиентов ● клиент с помощью QaApi проставляет отметку о том, что выполняется определенный тестовый сценарий ● система осуществляет сбор логов взаимодействия клиента и сервера ● производится автоматическая обработка этих логов ● строятся графики по количеству команд в каждом тестовом сценарии WTF?
  • 46. Мы внедрили QaApi и стали более лучше жить! Почему вам стоит начать делать техническое задание уже завтра? ● меньше рутины ● проще тестировать сложные кейсы ● автотесты - на новый уровень ● разработчики - ваши друзья! Что в итоге?
  • 47. Что я не рассказал но должен был рассказать?