Upload
sqadays8
View
2.671
Download
0
Embed Size (px)
Citation preview
Об опыте тестирования программного компонента без 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=12320.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=12320.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=12320.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