40
Об опыте тестирования программного компонента без UI Игорь Любин, Казань

Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Embed Size (px)

Citation preview

Page 1: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Об опыте тестирования программного компонента без UI

Игорь Любин, Казань

Page 2: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Вступительное словоНемного о Казани

2

Page 3: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Вступительное словоНемного о себе

3

Закончил КГУ, ФизФак

В тестировании с 2007 г.

Руководитель группы тестирования в iiko

Опыт автоматизации• Selenium, TestComplete• Собственные разработки

Page 4: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Программный компонент– это «кубик» программы

4

Page 5: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Программный компонентПримеры

• API приложений• WEB-сервисы• «Внутренности» приложения

5

Page 6: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Программный компонент– это чёрный ящик

6

Page 7: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Постановка задачиПроект

• Профили пользователей• Лента новостей• Блоги• Друзья, Фотки• Избранное• …

7

Интернет газета с сервисами блогосферы

Page 8: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Постановка задачиПроект развивается

• Профили пользователей• Лента новостей• Блоги• Друзья, Фотки• Избранное, Теги• …

8

Расширяет возможности доступа

Page 9: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Постановка задачиНа проекте идет разработка

9

Появляется API (Программный компонент)

Page 10: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Постановка задачиИмеем картину

• Профили пользователей• Лента новостей• Блоги• Друзья, Фотки• Избранное, Теги• …

10

Page 11: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Постановка задачиНа входе POST запрос

11

• ~40 команд– login / logoff– blog– friends– favorite– …

POST — метод запроса для передачи данных заданному ресурсу

Page 12: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Постановка задачиНа входе POST запрос

12

• ~40 команд• Параметры

/[email protected]&password=123

Пример визуализации POSТ запроса в виде GET

POST — метод запроса для передачи данных заданному ресурсу

Page 13: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Постановка задачиНа выходе JSON

13

• {} – объект• [] – массив

JSON — текстовый формат обмена данными

{ "ключ1" : "значение1", "ключ2" : "значение2"}

Page 14: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Постановка задачиНа выходе JSON

14

• Статус• Данные

{ "status": 0, "data": {"id_user": 1024} }

JSON — текстовый формат обмена данными

Page 15: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Постановка задачиНадо тестировать!?

• Профили пользователей• Лента новостей• Блоги• Друзья, Фотки• Избранное, Теги• …

15

Page 16: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

• Уверенность, что API работает

• Обратная совместимость API с моб. клиентом

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

16

Для команды разработки API

Page 17: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

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

• Профили пользователей• Лента новостей• Блоги• Друзья, Фотки• Избранное, Теги• …

17

Для команды разработки моб. клиента

• Пример использования• Документация

Page 18: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Постановка задачиЦель

Проверить работу команд API сервиса

18

Page 19: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

РешениеПрограммировать

Тестовый инструмент– Управление набором

тестов– Запуск/остановка– Отчетность– Конфигурирование

19

Page 20: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

РешениеИнструмент должен уметь

20

Формировать запрос

Проверять результат

Page 21: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

РешениеОрганизация тестов

Отделить тесты от инструмента

21

Page 22: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

РешениеИнструмент должен уметь

22

Загружать

тесты

Page 23: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

РешениеОрганизация тестов

1 тест = 1 файлСледствие• Управление тестами сводится к управлению файлами

23

Page 24: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

РешениеОрганизация тестов

24

Формат тестов задает API

Page 25: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

РешениеПример тест-кейса

{ "name" : "Вход пользователя на сайт",

"command" : "login",

"input" : { "username": "[email protected]", "password":

"123" },

"assert" : "equal",

"output" : { "status": 0, "data":

{"id_user": 1024} }}

25

Page 26: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

РешениеФормирование POST запроса

{ "name" : "Вход пользователя на сайт",

"command" : "login",

"input" : { "username": "[email protected]", "password":

"123" },

"assert" : "equal",

"output" : { "status": 0, "data":

{"id_user": 1024} }}

26

/[email protected]&password=123

Page 27: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

РешениеПроверка результата

{ "name" : "Вход пользователя на сайт",

"command" : "login",

"input" : { "username": "[email protected]", "password":

"123" },

"assert" : "equal",

"output" : { "status": 0, "data":

{"id_user": 1024} }}

27

Page 28: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

РешениеПример тест-сценария

{ "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

Page 29: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

РешениеТестовый инструмент

29

Page 30: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

РешениеФормирование POST запроса

30

Page 31: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

РешениеПроверка результата

31

array_diff_assoc($array1, $array2)

Page 32: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

РешениеСхема тестового инструмента

32

Page 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":0,"data":{"id_user":1024}}20.06.2010 06:15:50 TEST PASSED

33

Page 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":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

Page 35: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

РешениеЛог

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

Page 36: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

РезультатСтатистика

36

Время разработки инструмента 14 д.Первая версия инструмента через 5 д.

Время разработки тестов 13 д.Время подготовки документации 2 д.

Количество тест-кейсов ~300Количество тест-сценариев 63

1 д. = 8 ч.

Page 37: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Другие примерыПроект экстрактор

37

Page 38: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

Другие примерыПроект сбора статистики

38

Page 39: Игорь Любин -- Об опыте тестирования программного компонента без пользовательского интерфейса

РезультатРезюмируем

39

DoRequest() Diff()