Концепция QaAPI: взгляд на тестирование с другой стороны...

Preview:

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 и стали более лучше жить!

Почему вам стоит начать делать техническое задание уже завтра?

● меньше рутины● проще тестировать сложные кейсы● автотесты - на новый уровень● разработчики - ваши друзья!

Что в итоге?

Что я не рассказално должен был рассказать?

Recommended