Upload
sqalab
View
846
Download
0
Embed Size (px)
DESCRIPTION
Презентация Дмитрия Марущенко на SQA Days-16 14-15 ноября 2014, Санкт-Петербург, Россия www.sqadays.com
Citation preview
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?Чем это лучше веб-интерфейса?
CalabashСистема тестирования
мобильных приложений, основанная на Ruby и Cucumber.
Автотесты
SeleniumМощный инструмент
автоматизации браузеров.
Эти инструменты легко интегрировать с API, но очень сложно - с веб-интерфейсом:
Интеграционные тесты
Тестирование клиент-серверного взаимодействия.
Наша идея вам подойдет, если:
● ваше приложение имеет серверную часть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 умеет:● регистрировать, изменять и удалять юзеров
● голосовать за пользователей
● отправлять сообщения
● включать/выключать платные услуги
● добавлять “кредиты”
● загружать и “модерировать” фотки
● давать информацию (например свойства юзера)
● и всякое другое
Куда идти?
Отдел QA Отдел разработки
Запилите мне API, тысяча чертей! Okay
Конечно, к разработчикам! Можно так:
Но лучше так.
● все функции в одном месте● простота протокола● страничка помощи● система авторизации● управление тестовыми юзерами● безопасность “боевых” данных
Что мы хотим получить?
А что под капотом?
Keep it simple
http://qaapi.example.com/setRegistrationDate?user_id=123&date=20140612
{ "status": "success", "user": { "user_id": "123", "registration_date": "2014-06-12", }}
Простой HTTP-запрос:
Ответ в формате JSON:
✓ все функции в одном месте✓ простота протокола● страничка помощи● система авторизации● управление тестовыми юзерами● безопасность “боевых” данных
Что у нас есть?
Страница помощи
В QaApi есть страничка помощи, где перечислены все имеющиеся методы(описание, возможные аргументы и тип возвращаемого значения).
Эта страничка генерируется автоматически из исходного кода QaApi.
Ручной режимИнтеграция с существующей системой доступа для сотрудников, с возможностью управлять полномочиями.
АвторизацияАвтоматизацияСущестует несколько простых подходов:
1. Секретный ключ в HTTP-заголовке
2. HTTP Basic Auth
3. Логин-пароль в параметрах запроса
GET /methodName?foo=bar HTTP/1.1
Host: qaapi.example.com
Connection: keep-alive
X-Secret-Header : abcdEfg76kGkljhJHk92
GET /methodName?foo=bar HTTP/1.1
Host: qaapi.example.com
Connection: keep-alive
Authorization : Basic cdEfа3GkljhJHk54==
GET /methodName? login=test&pass=123 HTTP/1.1
Host: qaapi.example.com
Connection: keep-alive
✓ все функции в одном месте✓ простота протокола✓ страничка помощи✓ система авторизации● управление тестовыми юзерами● безопасность “боевых” данных
Что у нас есть?
Тестовые пользователиДля тестирования постоянно требуются пользователи с разными свойствами.
Создавать новых юзеров+ юзер “чистый”+ его никто не использует+ можно делать что хотим и не чистить
− быстро плодятся− нужно готовить к тесту
Где их взять?
Использовать заранее созданных+ юзер готов к тесту+ юзеров немного
− нужно чистить− может использоваться кем-то ещё− другие могли не почистить
VS
Наше решение - пул юзеров
Цикл жизни тестового юзера в пуле
Ждет в пуле Используется
Очистка “Использован”
Создан Может быть изменен в процессе теста
Не может быть использован повторно до очистки
registerUser()
Регистрация юзеров
Регистрируем Ж, 25 лет, Москва
Есть такой юзер?
Создать нового юзера
Добавить в пулВзять из пула
нет
да
Добавлен с параметрамиЖ, 25, Москва
registerUser()
Указываем только существенные для нас параметры
Создание новых юзеров - только тогда, когда подходящего нет в пуле.
Так как пользователь “новый”, необходимо подготовить его к тесту, например:
● сменить дату регистрации
● добавить фото, сообщения и т.д.
● добавить и подтвердить номер телефона
● и т. д.
Все это делается с помощью QaApi
Подготовка юзеров
Подготовка юзера с помощью QaApi
Схема подготовки юзера
http://qaapi.example.com/registerUser?gender=F&age=25&location=Moscow# {"success": true, "user_id": 123, "login": "testuser123", "passwd": "Qa6G9v"}
http://qaapi.example.com/uploadPhotos?user_id=123&count=1# {"success": true}
http://qaapi.example.com/setRegistrationDate?user_id=123&date=2014-02-12# {"success": true}
Немного о процессе очистки пользователей
Наш путь: ● очистка - набор предопределенных шагов● на каждое “сохраняемое состояние” - свой шаг очистки
(примеры: сообщения, отзывы, покупки…)● юзер считается “очищенным” и готовым к использованию, если
успешно отработали все шаги очистки
Идеального решения нет
Шаги очистки будут добавлять программисты. Они могут забыть добавить новый шаг при добавлении новой фичи. Следить за этим придется вам.
✓ все функции в одном месте✓ простота протокола✓ страничка помощи✓ система авторизации✓ управление тестовыми юзерами● безопасность “боевых” данных
Что у нас есть?
Люди не идеальны. Нам нужна защита от дурака.
Методы QaApi работают только с тестовыми пользователями.
Это не может защитить вас от намеренного злоупотребления, но помогает защититься от таких ошибок, как опечатка в user id.
В качестве дополнительной защиты вы можете реализовать различные права доступа к различным методам QaApi.
Живые пользователи
No robots allowed!
Юзеры из пула QaApi не видны живым пользователям!
✓ все функции в одном месте✓ простота протокола✓ страничка помощи✓ система авторизации✓ управление тестовыми юзерами✓ безопасность “боевых” данных
Что у нас есть?
Продвинутое кунг-фу
Было:
Сценарии QaAPI
http://qaapi.example.com/registerUser?gender=F&age=25# {"success": true, "user_id": 123, "login": "testuser123", "passwd": "Qa6G9v"}
http://qaapi.example.com/setRegistrationDate?user_id=123&date=2014-02-12
Copy user_id
Paste user_id
Стало:
$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 и стали более лучше жить!
Почему вам стоит начать делать техническое задание уже завтра?
● меньше рутины● проще тестировать сложные кейсы● автотесты - на новый уровень● разработчики - ваши друзья!
Что в итоге?
Что я не рассказално должен был рассказать?