Игорь Любин - Об опыте тестирования ПК без UI

Preview:

DESCRIPTION

Доклад на SQAdays-8

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 команд

• Параметры

/login?username=user@mail.ru&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": "user@mail.ru",

"password": "123" },

"assert" : "equal",

"output" : { "status": 0,

"data": {"id_user": 1024} }

}

25

Решение

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

{

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

"command" : "login",

"input" : { "username": "user@mail.ru",

"password": "123" },

"assert" : "equal",

"output" : { "status": 0,

"data": {"id_user": 1024} }

}

26

/login?username=user@mail.ru&password=123

Решение

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

{

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

"command" : "login",

"input" : { "username": "user@mail.ru",

"password": "123" },

"assert" : "equal",

"output" : { "status": 0,

"data": {"id_user": 1024} }

}

27

Решение

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

"testsuite_name" : "Название сценария",

"testcases":

[

{

"name" : "Тест-кейс 1",

"command": "login",

"input" : {"username":"user@mail.ru","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: /login?username=user@mail.ru&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: /login?username=user@mail.ru&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: /login?username=user@mail.ru&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()