Игорь Любин - Об опыте тестирования ПК без ui
DESCRIPTION
Доклад на SQAdays-8TRANSCRIPT
Об опыте тестирования
программного компонента без UI
Игорь Любин, Казань
Вступительное слово
Немного о Казани
2
Вступительное слово
Немного о себе
3
Закончил КГУ, ФизФак
В тестировании с 2007 г.
Руководитель группы
тестирования в iiko
Опыт автоматизации
• Selenium, TestComplete
• Собственные разработки
Программный компонент
– это «кубик» программы
4
Программный компонент
Примеры
• API приложений
• WEB-сервисы
• «Внутренности» приложения
5
Программный компонент
– это чѐрный ящик
6
Постановка задачи
Проект
• Профили пользователей
• Лента новостей
• Блоги
• Друзья, Фотки
• Избранное
• …
7
Интернет газета с сервисами блогосферы
Постановка задачи
Проект развивается
• Профили пользователей
• Лента новостей
• Блоги
• Друзья, Фотки
• Избранное, Теги
• …
8
Расширяет возможности доступа
Постановка задачи
На проекте идет разработка
9
Появляется API (Программный компонент)
Постановка задачи
Имеем картину
• Профили пользователей
• Лента новостей
• Блоги
• Друзья, Фотки
• Избранное, Теги
• …
10
Постановка задачи
На входе POST запрос
11
• ~40 команд– login / logoff
– blog
– friends
– favorite
– …
POST — метод запроса для передачи данных
заданному ресурсу
Постановка задачи
На входе POST запрос
12
• ~40 команд
• Параметры
/[email protected]&password=123
Пример визуализации POSТ запроса в виде GET
POST — метод запроса для передачи данных
заданному ресурсу
Постановка задачи
На выходе JSON
13
• {} – объект
• [] – массив
JSON — текстовый формат обмена данными
{
"ключ1" : "значение1",
"ключ2" : "значение2"
}
Постановка задачи
На выходе JSON
14
• Статус
• Данные
{ "status": 0, "data": {"id_user": 1024} }
JSON — текстовый формат обмена данными
Постановка задачи
Надо тестировать!?
• Профили пользователей
• Лента новостей
• Блоги
• Друзья, Фотки
• Избранное, Теги
• …
15
• Уверенность, что API
работает
• Обратная совместимость
API с моб. клиентом
Постановка задачи
Почему надо тестировать API?
16
Для команды разработки API
Постановка задачи
Почему надо тестировать API?
• Профили пользователей
• Лента новостей
• Блоги
• Друзья, Фотки
• Избранное, Теги
• …
17
Для команды разработки моб. клиента
• Пример использования
• Документация
Постановка задачи
Цель
Проверить работу
команд API сервиса
18
Решение
Программировать
Тестовый инструмент
– Управление набором
тестов
– Запуск/остановка
– Отчетность
– Конфигурирование
19
Решение
Инструмент должен уметь
20
Формировать
запрос
Проверять
результат
Решение
Организация тестов
Отделить тесты от инструмента
21
Решение
Инструмент должен уметь
22
Загружать
тесты
Решение
Организация тестов
1 тест = 1 файл
Следствие• Управление тестами сводится к управлению файлами
23
Решение
Организация тестов
24
Формат тестов
задает API
Решение
Пример тест-кейса
{
"name" : "Вход пользователя на сайт",
"command" : "login",
"input" : { "username": "[email protected]",
"password": "123" },
"assert" : "equal",
"output" : { "status": 0,
"data": {"id_user": 1024} }
}
25
Решение
Формирование POST запроса
{
"name" : "Вход пользователя на сайт",
"command" : "login",
"input" : { "username": "[email protected]",
"password": "123" },
"assert" : "equal",
"output" : { "status": 0,
"data": {"id_user": 1024} }
}
26
/[email protected]&password=123
Решение
Проверка результата
{
"name" : "Вход пользователя на сайт",
"command" : "login",
"input" : { "username": "[email protected]",
"password": "123" },
"assert" : "equal",
"output" : { "status": 0,
"data": {"id_user": 1024} }
}
27
Решение
Пример тест-сценария{
"testsuite_name" : "Название сценария",
"testcases":
[
{
"name" : "Тест-кейс 1",
"command": "login",
"input" : {"username":"[email protected]","password":"123"},
"output" : {"status": 0, "data": []}
},
{
"name" : "Тест-кейс 2",
"command": "logoff",
"input" : {},
"output" : {"status": 0, "data": []}
}
]
}28
Решение
Тестовый инструмент
29
Решение
Формирование POST запроса
30
Решение
Проверка результата
31
array_diff_assoc($array1, $array2)
Решение
Схема тестового инструмента
32
Решение
Лог
20.06.2010 06:15:49 Run test case: Вход пользователя
Request: /[email protected]&password=123
20.06.2010 06:15:50 End test case.
Response: {"status":0,"data":{"id_user":1024}}
20.06.2010 06:15:50 TEST PASSED
33
Решение
Лог
20.06.2010 06:15:49 Run test case: Вход пользователя
Request: /[email protected]&password=123
20.06.2010 06:15:50 End test case.
Response: {"status":1,"data":[]}
20.06.2010 06:15:50 TEST FAILED
Expected: {"status":0,"data":{"id_user":1024}}
Разница cur-exp: [status => 1]
Разница exp-cur: [status => 0]
34
Решение
Лог
20.06.2010 06:15:49 Run test case: Вход пользователя
Request: /[email protected]&password=123
20.06.2010 06:15:50 End test case.
Response: {"status":0,"data":{"id_user":1024}}
20.06.2010 06:15:50 TEST PASSED
...
**********************************
Time: 268 sec.
Tests: 199, Passed: 191, Failed: 8
**********************************
35
Результат
Статистика
36
Время разработки инструмента 14 д.Первая версия инструмента через 5 д.
Время разработки тестов 13 д.Время подготовки документации 2 д.
Количество тест-кейсов ~300Количество тест-сценариев 63
1 д. = 8 ч.
Другие примеры
Проект экстрактор
37
Другие примеры
Проект сбора статистики
38
Результат
Резюмируем
39
DoRequest() Diff()
Спасибо за внимание!
Вопросы?
igor.lyubin
ap-test-team.blogspot.com
40