47
QaApi взгляд на тестирование с другой стороны баррикад Дмитрий Марущенко

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

  • Upload
    sqalab

  • View
    846

  • Download
    0

Embed Size (px)

DESCRIPTION

Презентация Дмитрия Марущенко на SQA Days-16 14-15 ноября 2014, Санкт-Петербург, Россия www.sqadays.com

Citation preview

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

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

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

Badoo - это про знакомства...

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

...и про технологии

У нас было 2 веб-сайта, 4 разных мобильных платформы и целое море различных версий мобильных приложений, а также версия для мобильных браузеров и приложения в социальных сетях. Не то что бы все это было категорически необходимо для бизнеса, но если уж начали делать социальную сеть, то становится трудно остановиться. Единственное, что вызывало у меня опасения - это релизы вечером в пятницу. Нет ничего более беспомощного, безответственного и испорченного, чем пятничный релиз. Я знал, что рано или поздно мы перейдем и эту грань.

“”

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

Что такое QaApi?

QaApi - это API (Application Programming Interface) для отдела QA (Quality Assurance).

Это API предназначено для изменения внутреннего состояния системы в процессе ручного или автоматизированного тестирования приложения.

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

Что такое QaApi?

QaApi - это API (Application Programming Interface) для отдела QA (Quality Assurance).

Это API предназначено для изменения внутреннего состояния системы в процессе ручного или автоматизированного тестирования приложения.

БОЖЕ МОЙ! ДА ЧТО Ж ТАК СКУЧНО-ТО, А?

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

Начнем издалека

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

Знаете, что самое важное на этом плане?

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

Знаете, что самое важное на этом плане?

?

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

Знаете, что самое важное на этом плане?

Короткие пути!

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

Пользователи, зарегистрированные на Badoo более месяца назад, в день своего рождения получают в подарок 100 кредитов*.

Типичный тест-кейс

“”

* Пример выдуманный! :)

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

Как будем тестировать?

● регистрируемся● ждем месяц???● ждем ещё...● … до дня рождения?● получаем кредиты● PROFIT?

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

Или поищем короткий путь?

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

Эволюция обращений к программистам:

“Подкрутите мне в базе…”

1. “А сделайте мне, чтоб дата регистрации была месяц назад?”

2. “А скажите, где в базе хранится дата регистрации, я вручную изменю?”

3. “А давайте сделаем интерфейс, где каждый сможет менять дату?”

4. “А запилите нам API?”

Все любят короткие пути!

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

Почему именно API?Чем это лучше веб-интерфейса?

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

CalabashСистема тестирования

мобильных приложений, основанная на Ruby и Cucumber.

Автотесты

SeleniumМощный инструмент

автоматизации браузеров.

Эти инструменты легко интегрировать с API, но очень сложно - с веб-интерфейсом:

Интеграционные тесты

Тестирование клиент-серверного взаимодействия.

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

Наша идея вам подойдет, если:

● ваше приложение имеет серверную частьQaApi не поможет тестировщикам оффлайн-игры на телефоне

● ваше приложение хранит состояние между запросамичастный случай ‒ в системе регистрируются пользователи

● вы уже как минимум на 3 этапеинтерфейс уже есть, пора пилить API

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

Что за API такое?Лапа̀роскопи́я (др.-греч. λαπάρα — пах, чрево + др.-греч. σκοπέω — смотрю) — современный метод хирургии, в котором операции на внутренних органах проводят через небольшие (обычно 0,5—1,5 см) отверстия, в то время как при традиционной хирургии требуются большие разрезы.

“”QaApi - это то самое

небольшое отверстие, через которое тестировщики смогут вмешиваться в деятельность живой (“боевой”) системы.

Page 18: Концепция 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}

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

Что оно должно уметь?Зависит от вашего проекта. У каждого - своё API.

Наше API умеет:● регистрировать, изменять и удалять юзеров

● голосовать за пользователей

● отправлять сообщения

● включать/выключать платные услуги

● добавлять “кредиты”

● загружать и “модерировать” фотки

● давать информацию (например свойства юзера)

● и всякое другое

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

Куда идти?

Отдел QA Отдел разработки

Запилите мне API, тысяча чертей! Okay

Конечно, к разработчикам! Можно так:

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

Но лучше так.

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

● все функции в одном месте● простота протокола● страничка помощи● система авторизации● управление тестовыми юзерами● безопасность “боевых” данных

Что мы хотим получить?

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

А что под капотом?

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

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:

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

✓ все функции в одном месте✓ простота протокола● страничка помощи● система авторизации● управление тестовыми юзерами● безопасность “боевых” данных

Что у нас есть?

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

Страница помощи

В QaApi есть страничка помощи, где перечислены все имеющиеся методы(описание, возможные аргументы и тип возвращаемого значения).

Эта страничка генерируется автоматически из исходного кода QaApi.

Page 27: Концепция 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

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

✓ все функции в одном месте✓ простота протокола✓ страничка помощи✓ система авторизации● управление тестовыми юзерами● безопасность “боевых” данных

Что у нас есть?

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

Тестовые пользователиДля тестирования постоянно требуются пользователи с разными свойствами.

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

Создавать новых юзеров+ юзер “чистый”+ его никто не использует+ можно делать что хотим и не чистить

− быстро плодятся− нужно готовить к тесту

Где их взять?

Использовать заранее созданных+ юзер готов к тесту+ юзеров немного

− нужно чистить− может использоваться кем-то ещё− другие могли не почистить

VS

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

Наше решение - пул юзеров

Цикл жизни тестового юзера в пуле

Ждет в пуле Используется

Очистка “Использован”

Создан Может быть изменен в процессе теста

Не может быть использован повторно до очистки

registerUser()

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

Регистрация юзеров

Регистрируем Ж, 25 лет, Москва

Есть такой юзер?

Создать нового юзера

Добавить в пулВзять из пула

нет

да

Добавлен с параметрамиЖ, 25, Москва

registerUser()

Указываем только существенные для нас параметры

Создание новых юзеров - только тогда, когда подходящего нет в пуле.

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

Так как пользователь “новый”, необходимо подготовить его к тесту, например:

● сменить дату регистрации

● добавить фото, сообщения и т.д.

● добавить и подтвердить номер телефона

● и т. д.

Все это делается с помощью QaApi

Подготовка юзеров

Page 34: Концепция 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}

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

Немного о процессе очистки пользователей

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

Наш путь: ● очистка - набор предопределенных шагов● на каждое “сохраняемое состояние” - свой шаг очистки

(примеры: сообщения, отзывы, покупки…)● юзер считается “очищенным” и готовым к использованию, если

успешно отработали все шаги очистки

Идеального решения нет

Шаги очистки будут добавлять программисты. Они могут забыть добавить новый шаг при добавлении новой фичи. Следить за этим придется вам.

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

✓ все функции в одном месте✓ простота протокола✓ страничка помощи✓ система авторизации✓ управление тестовыми юзерами● безопасность “боевых” данных

Что у нас есть?

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

Люди не идеальны. Нам нужна защита от дурака.

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

Методы QaApi работают только с тестовыми пользователями.

Это не может защитить вас от намеренного злоупотребления, но помогает защититься от таких ошибок, как опечатка в user id.

В качестве дополнительной защиты вы можете реализовать различные права доступа к различным методам QaApi.

Живые пользователи

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

No robots allowed!

Юзеры из пула QaApi не видны живым пользователям!

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

✓ все функции в одном месте✓ простота протокола✓ страничка помощи✓ система авторизации✓ управление тестовыми юзерами✓ безопасность “боевых” данных

Что у нас есть?

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

Продвинутое кунг-фу

Page 43: Концепция 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"})

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

A/B - тестирование - это инструмент для оценки эффективности какого-либо нововведения.

A/B-тестирование

Выберешь синюю пилюлю – и эта история закончится. Ты проснешься в своей постели и будешь верить в то, во что тебе хочется верить. Выберешь красную – попадешь в Страну Чудес, и я покажу тебе, насколько глубока кроличья нора ...

“”Где взять пользователя, который точно

пойдет за белым кроликом??Поручите это QaApi!

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

Выявление регрессий в новых версиях мобильных клиентов● клиент с помощью QaApi проставляет отметку о том, что выполняется определенный тестовый сценарий● система осуществляет сбор логов взаимодействия клиента и сервера● производится автоматическая обработка этих логов● строятся графики по количеству команд в каждом тестовом сценарии

Статистика команд

WTF?

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

Мы внедрили QaApi и стали более лучше жить!

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

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

Что в итоге?

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

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