Upload
badoo-development
View
135
Download
4
Embed Size (px)
Citation preview
...и про технологии
У нас было 2 веб-сайта, 4 разных мобильных платформы и целое море различных версий мобильных приложений, а также версия для мобильных браузеров и приложения в социальных сетях. Не то что бы все это было категорически необходимо для бизнеса, но если уж начали делать социальную сеть, то становится трудно остановиться. Единственное, что вызывало у меня опасения - это релизы вечером в пятницу. Нет ничего более беспомощного, безответственного и испорченного, чем пятничный релиз. Я знал, что рано или поздно мы перейдем и эту грань.
“”
Пользователь получает дайджест непрочитанных сообщений письмом на электронную почту не чаще раза в неделю*.
Типичный тест-кейс
“”
* Пример выдуманный! :)
Как будем тестировать?
● регистрируемся● … проходит неделя● получаем письмо● ждем ещё неделю● получаем письмо● PROFIT?
Эволюция обращений к программистам:
“Подкрутите мне в базе…”
1. “А сделайте мне, чтоб дата отправки последнего письма была больше недели назад?”
2. “А скажите, где в базе хранится дата отправки, я вручную изменю?”
3. “А давайте сделаем интерфейс, где каждый сможет менять дату?”
4. “А запилите нам API?”
Все любят короткие пути!
CalabashСистема тестирования
мобильных приложений, основанная на Ruby и Cucumber.
Автотесты
SeleniumМощный инструмент
автоматизации браузеров.
Эти инструменты легко интегрировать с API, но очень сложно - с веб-интерфейсом:
Интеграционные тесты
Тестирование клиент-серверного взаимодействия.
Как это работаетдай мне нового юзера
да пожалуйста!
добавь ему фото
нет проблем!
и дату регистрации смени
как скажешь, хозяин!
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 умеет:● регистрировать, изменять и удалять юзеров
● голосовать за пользователей
● отправлять сообщения
● включать/выключать платные услуги
● добавлять “кредиты”
● загружать и “модерировать” фотки
● давать информацию (например свойства юзера)
● и всякое другое
● все функции в одном месте● простота протокола● страничка помощи● система авторизации● управление тестовыми юзерами● безопасность “боевых” данных
Что мы хотим получить?
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 на Lua
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
Стало:
user = qaapi("registerUser",{gender="F", age=25,location="Moscow"})# {"success": true, "user_id": 123, "login": "testuser123", "passwd": "Qa6G9v"}
qaapi("setRegistrationDate",{user_id=user["user_id"], date="2014-02-12"})
Наш путь: ● очистка - набор предопределенных шагов● на каждое “сохраняемое состояние” - свой шаг очистки
(примеры: сообщения, отзывы, покупки…)● юзер считается “очищенным” и готовым к использованию, если
успешно отработали все шаги очистки
Идеального решения нет
Шаги очистки будут добавлять программисты. Они могут забыть добавить новый шаг при добавлении новой фичи. Следить за этим придется вам.