SlideShare a Scribd company logo
Об опыте тестирования
программного компонента без UI
      Игорь Любин, Казань
Вступительное слово
 Немного о Казани




                      2
Вступительное слово
  Немного о себе
     Закончил КГУ, ФизФак
     В тестировании с 2007 г.
     Руководитель группы
     тестирования в iiko

     Опыт автоматизации
     • Selenium, TestComplete
     • Собственные разработки
                                3
Программный компонент
– это «кубик» программы




                          4
Программный компонент
             Примеры
• API приложений
• WEB-сервисы
• «Внутренности» приложения




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




                        6
Постановка задачи
              Проект
Интернет газета с сервисами блогосферы

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


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

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


                                           8
Постановка задачи
      На проекте идет разработка
Появляется API (Программный компонент)




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


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


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

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




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

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


/login?username=user@mail.ru&password=123
              Пример визуализации POSТ запроса в виде GET



                                                        12
Постановка задачи
            На выходе JSON
JSON — текстовый формат обмена данными


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

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

                                         13
Постановка задачи
           На выходе JSON
JSON — текстовый формат обмена данными


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

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




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


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


                                 15
Постановка задачи
   Почему надо тестировать API?
Для команды разработки API

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




                                          16
Постановка задачи
   Почему надо тестировать API?
Для команды разработки моб. клиента

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


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


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




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

     Тестовый инструмент
       – Управление набором
         тестов
       – Запуск/остановка
       – Отчетность
       – Конфигурирование



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


 Формировать
   запрос
  Проверять
  результат




                          20
Решение
         Организация тестов
Отделить тесты от инструмента




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



   Загружать
     тесты




                          22
Решение
             Организация тестов
1 тест = 1 файл
Следствие
• Управление тестами сводится к управлению файлами




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



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




                      24
Решение
               Пример тест-кейса
{
    "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} }
}
/login?username=user@mail.ru&password=123

                                                   26
Решение
              Проверка результата
{
    "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
Решение
        Проверка результата
array_diff_assoc($array1, $array2)




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




                              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
Результат
                 Статистика

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

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


                                          1 д. = 8 ч.
                                                   36
Другие примеры
Проект экстрактор




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




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




   DoRequest()   Diff()



                          39
Спасибо за внимание!
     Вопросы?




       igor.lyubin
       ilyubin@yandex.ru
       ap-test-team.blogspot.com
                              40

More Related Content

What's hot

JDI: Автоматизировать проще, чем кажется
JDI: Автоматизировать проще, чем кажетсяJDI: Автоматизировать проще, чем кажется
JDI: Автоматизировать проще, чем кажется
SQALab
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
Roman Dvornov
 
Web осень 2013 лекция 4
Web осень 2013 лекция 4Web осень 2013 лекция 4
Web осень 2013 лекция 4Technopark
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Andrey Rebrov
 
basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворк
Roman Dvornov
 
SECON'2016. Иовлев Роман, JDI is UI Automation Future
SECON'2016. Иовлев Роман, JDI is UI Automation FutureSECON'2016. Иовлев Роман, JDI is UI Automation Future
SECON'2016. Иовлев Роман, JDI is UI Automation Future
SECON
 
Tequila - язык для продвинутой генерации JSON
Tequila - язык для продвинутой генерации JSONTequila - язык для продвинутой генерации JSON
Tequila - язык для продвинутой генерации JSONIvan Nemytchenko
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
Igor Shkulipa
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
тестирование защищенности веб приложений
тестирование защищенности веб приложенийтестирование защищенности веб приложений
тестирование защищенности веб приложений
Zestranec
 
Производительность и надежность Docsvision 5
Производительность и надежность Docsvision 5Производительность и надежность Docsvision 5
Производительность и надежность Docsvision 5Docsvision
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Roman Dvornov
 
Сергей Татаринцев — Написание модулей технологий для bem-tools
Сергей Татаринцев — Написание модулей технологий для bem-toolsСергей Татаринцев — Написание модулей технологий для bem-tools
Сергей Татаринцев — Написание модулей технологий для bem-tools
Yandex
 
Как построить DOM
Как построить DOMКак построить DOM
Как построить DOM
Roman Dvornov
 
Олег Мохов: Модель Отображения. Браузеры
Олег Мохов: Модель Отображения. БраузерыОлег Мохов: Модель Отображения. Браузеры
Олег Мохов: Модель Отображения. БраузерыYandex
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
Roman Dvornov
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Yandex
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
Roman Dvornov
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Badoo Development
 

What's hot (20)

JDI: Автоматизировать проще, чем кажется
JDI: Автоматизировать проще, чем кажетсяJDI: Автоматизировать проще, чем кажется
JDI: Автоматизировать проще, чем кажется
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
 
Web осень 2013 лекция 4
Web осень 2013 лекция 4Web осень 2013 лекция 4
Web осень 2013 лекция 4
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
 
Bdd + SpecFlow + WatiN
Bdd + SpecFlow + WatiNBdd + SpecFlow + WatiN
Bdd + SpecFlow + WatiN
 
basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворк
 
SECON'2016. Иовлев Роман, JDI is UI Automation Future
SECON'2016. Иовлев Роман, JDI is UI Automation FutureSECON'2016. Иовлев Роман, JDI is UI Automation Future
SECON'2016. Иовлев Роман, JDI is UI Automation Future
 
Tequila - язык для продвинутой генерации JSON
Tequila - язык для продвинутой генерации JSONTequila - язык для продвинутой генерации JSON
Tequila - язык для продвинутой генерации JSON
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
тестирование защищенности веб приложений
тестирование защищенности веб приложенийтестирование защищенности веб приложений
тестирование защищенности веб приложений
 
Производительность и надежность Docsvision 5
Производительность и надежность Docsvision 5Производительность и надежность Docsvision 5
Производительность и надежность Docsvision 5
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
 
Сергей Татаринцев — Написание модулей технологий для bem-tools
Сергей Татаринцев — Написание модулей технологий для bem-toolsСергей Татаринцев — Написание модулей технологий для bem-tools
Сергей Татаринцев — Написание модулей технологий для bem-tools
 
Как построить DOM
Как построить DOMКак построить DOM
Как построить DOM
 
Олег Мохов: Модель Отображения. Браузеры
Олег Мохов: Модель Отображения. БраузерыОлег Мохов: Модель Отображения. Браузеры
Олег Мохов: Модель Отображения. Браузеры
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
 

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

Игорь Любин -- Об опыте тестирования программного компонента без пользователь...
Игорь Любин -- Об опыте тестирования программного компонента без пользователь...Игорь Любин -- Об опыте тестирования программного компонента без пользователь...
Игорь Любин -- Об опыте тестирования программного компонента без пользователь...sqadays8
 
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
Омские ИТ-субботники
 
Архитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной областиАрхитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной области
SQALab
 
automation is iOS development
automation is iOS developmentautomation is iOS development
automation is iOS development
Ivan Trifonov
 
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Yulia Tsisyk
 
Тестирование Web API
Тестирование Web APIТестирование Web API
Тестирование Web API
Byndyusoft
 
Автоматическое тестирование Web api
Автоматическое тестирование Web apiАвтоматическое тестирование Web api
Автоматическое тестирование Web api
Igor Lyubin
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012InTRUEdeR
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
SQALab
 
Решения сообщества для SharePoint
Решения сообщества для SharePointРешения сообщества для SharePoint
Решения сообщества для SharePoint
Vitaly Baum
 
Простой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NETПростой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NET
Mikhail Shcherbakov
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
GeeksLab Odessa
 
Microservices for test automation - OK.RU expirience
Microservices for test automation - OK.RU expirienceMicroservices for test automation - OK.RU expirience
Microservices for test automation - OK.RU expirience
Nikita Makarov
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформуVadim Kruchkov
 
От простого к сложному: автоматизируем ручные тест-планы | Сергей Тимченко
От простого к сложному: автоматизируем ручные тест-планы | Сергей ТимченкоОт простого к сложному: автоматизируем ручные тест-планы | Сергей Тимченко
От простого к сложному: автоматизируем ручные тест-планы | Сергей Тимченко
Positive Hack Days
 
Protrarctor and Angular
Protrarctor and AngularProtrarctor and Angular
Protrarctor and Angular
SQALab
 
Виталий Каторгин, Wamba
Виталий Каторгин, WambaВиталий Каторгин, Wamba
Виталий Каторгин, Wamba
Ontico
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
SQALab
 

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

Игорь Любин -- Об опыте тестирования программного компонента без пользователь...
Игорь Любин -- Об опыте тестирования программного компонента без пользователь...Игорь Любин -- Об опыте тестирования программного компонента без пользователь...
Игорь Любин -- Об опыте тестирования программного компонента без пользователь...
 
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
 
Архитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной областиАрхитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной области
 
automation is iOS development
automation is iOS developmentautomation is iOS development
automation is iOS development
 
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
 
Тестирование Web API
Тестирование Web APIТестирование Web API
Тестирование Web API
 
Автоматическое тестирование Web api
Автоматическое тестирование Web apiАвтоматическое тестирование Web api
Автоматическое тестирование Web api
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с Codeception
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с Codeception
 
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
 
Решения сообщества для SharePoint
Решения сообщества для SharePointРешения сообщества для SharePoint
Решения сообщества для SharePoint
 
Простой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NETПростой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NET
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
 
Microservices for test automation - OK.RU expirience
Microservices for test automation - OK.RU expirienceMicroservices for test automation - OK.RU expirience
Microservices for test automation - OK.RU expirience
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформу
 
От простого к сложному: автоматизируем ручные тест-планы | Сергей Тимченко
От простого к сложному: автоматизируем ручные тест-планы | Сергей ТимченкоОт простого к сложному: автоматизируем ручные тест-планы | Сергей Тимченко
От простого к сложному: автоматизируем ручные тест-планы | Сергей Тимченко
 
Protrarctor and Angular
Protrarctor and AngularProtrarctor and Angular
Protrarctor and Angular
 
Виталий Каторгин, Wamba
Виталий Каторгин, WambaВиталий Каторгин, Wamba
Виталий Каторгин, Wamba
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 

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

  • 1. Об опыте тестирования программного компонента без UI Игорь Любин, Казань
  • 3. Вступительное слово Немного о себе Закончил КГУ, ФизФак В тестировании с 2007 г. Руководитель группы тестирования в iiko Опыт автоматизации • Selenium, TestComplete • Собственные разработки 3
  • 4. Программный компонент – это «кубик» программы 4
  • 5. Программный компонент Примеры • API приложений • WEB-сервисы • «Внутренности» приложения 5
  • 6. Программный компонент – это чѐрный ящик 6
  • 7. Постановка задачи Проект Интернет газета с сервисами блогосферы • Профили пользователей • Лента новостей • Блоги • Друзья, Фотки • Избранное • … 7
  • 8. Постановка задачи Проект развивается Расширяет возможности доступа • Профили пользователей • Лента новостей • Блоги • Друзья, Фотки • Избранное, Теги • … 8
  • 9. Постановка задачи На проекте идет разработка Появляется API (Программный компонент) 9
  • 10. Постановка задачи Имеем картину • Профили пользователей • Лента новостей • Блоги • Друзья, Фотки • Избранное, Теги • … 10
  • 11. Постановка задачи На входе POST запрос POST — метод запроса для передачи данных заданному ресурсу • ~40 команд – login / logoff – blog – friends – favorite – … 11
  • 12. Постановка задачи На входе POST запрос POST — метод запроса для передачи данных заданному ресурсу • ~40 команд • Параметры /login?username=user@mail.ru&password=123 Пример визуализации POSТ запроса в виде GET 12
  • 13. Постановка задачи На выходе JSON JSON — текстовый формат обмена данными • {} – объект • [] – массив { "ключ1" : "значение1", "ключ2" : "значение2" } 13
  • 14. Постановка задачи На выходе JSON JSON — текстовый формат обмена данными • Статус • Данные { "status": 0, "data": {"id_user": 1024} } 14
  • 15. Постановка задачи Надо тестировать!? • Профили пользователей • Лента новостей • Блоги • Друзья, Фотки • Избранное, Теги • … 15
  • 16. Постановка задачи Почему надо тестировать API? Для команды разработки API • Уверенность, что API работает • Обратная совместимость API с моб. клиентом 16
  • 17. Постановка задачи Почему надо тестировать API? Для команды разработки моб. клиента • Профили пользователей • Пример использования • Документация • Лента новостей • Блоги • Друзья, Фотки • Избранное, Теги • … 17
  • 18. Постановка задачи Цель Проверить работу команд API сервиса 18
  • 19. Решение Программировать Тестовый инструмент – Управление набором тестов – Запуск/остановка – Отчетность – Конфигурирование 19
  • 20. Решение Инструмент должен уметь Формировать запрос Проверять результат 20
  • 21. Решение Организация тестов Отделить тесты от инструмента 21
  • 23. Решение Организация тестов 1 тест = 1 файл Следствие • Управление тестами сводится к управлению файлами 23
  • 25. Решение Пример тест-кейса { "name" : "Вход пользователя на сайт", "command" : "login", "input" : { "username": "user@mail.ru", "password": "123" }, "assert" : "equal", "output" : { "status": 0, "data": {"id_user": 1024} } } 25
  • 26. Решение Формирование POST запроса { "name" : "Вход пользователя на сайт", "command" : "login", "input" : { "username": "user@mail.ru", "password": "123" }, "assert" : "equal", "output" : { "status": 0, "data": {"id_user": 1024} } } /login?username=user@mail.ru&password=123 26
  • 27. Решение Проверка результата { "name" : "Вход пользователя на сайт", "command" : "login", "input" : { "username": "user@mail.ru", "password": "123" }, "assert" : "equal", "output" : { "status": 0, "data": {"id_user": 1024} } } 27
  • 28. Решение { Пример тест-сценария "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
  • 31. Решение Проверка результата array_diff_assoc($array1, $array2) 31
  • 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":0,"data":{"id_user":1024}} 20.06.2010 06:15:50 TEST PASSED 33
  • 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":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
  • 35. Решение Лог 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 ч. 36
  • 40. Спасибо за внимание! Вопросы? igor.lyubin ilyubin@yandex.ru ap-test-team.blogspot.com 40

Editor's Notes

  1. Компонент это кубик программы. Вот кубики из которых состоит программа.Кубики на певрхности – есть UIКубики внутри – нет UI
  2. Программа обычно для тестировщика – это черный ящик, а программный компонент без UI тем более.В этот ящик каким-то образом можно посылать запросы и получать отклик. Посылаться и получать можем любые форматы.Все это надо уметь тестировать?Тестировать в ручную невозможно.Для тестирования необходимо иметь инструмент, который умел бы делать запросы и обрабатывать ответы. А можно инструмент написать. На деле оказывается не всё так сложно. –> Давайте обратимся к примеру.
  3. Есть проект одной «интернет газеты с сервисами блогосферы». У пользователей этого ресурса есть возможность вести свои профили, блоги, общаться с друзьями, обмениваться фотками, добавлять в избранное и многое другое.
  4. Компания решает расширять возможности доступа. И обращается к мобильным устройствам.
  5. На проекте ведется активная разработка, появляется API сервис.Это типичный представитель – ПК без UI.
  6. Через упомянутый API сервис запросы делаются методом POST, а отправляемые данные пользователю приходят в формате файлов JSON.–> Давайте подробнее разберем что у нас на входе и на выходе.
  7. Через сервис можно выполнить 4 десятка команд, таких как логин пользователя, написать пост, запросить данные о друзьях пользователя, отправить сообщение или фотографию, обновить статус, залезть в избранное и т.п.
  8. У каждой команды есть параметры.Пример…Для визуализации POST, использую GET.
  9. На выходе JSON.Это особый текстовый формат обмена данными.Позволяет описывать JS объекты.Может использовать с любым языком и во многих языках есть функции для обработки JSON объектов.Легче чем XML. Так как используются скобки {} [] вместо тегов.
  10. В ответе приходит статус выполнения команды и набор ещё каких-то параметров. Статус 0 команда успешно выполнилась, статус 1 команда не прошла.
  11. –> А давайте подумаем почему надо тестировать АПИ?
  12. Перед тестированием стоит задача протестировать этот API сервис. И при дальнейшей разработке следить, не сломался ли базовый функционал этого сервиса.–> Создать тестовый инструментУдобныйПонятныйЛегко поддерживаемый
  13. Мной было предложено программное решение, написать инструмент для автоматического тестирования. В котором удобно формировать и управлять наборами тестов. У которого есть возможность запуска и остановки тестов. В конце тестирования формирует отчет. И есть возможность конфигурирования.
  14. 2 основные функции инструмента – это…
  15. Не шарманкаПаралельная разработка инструмента и тестов
  16. + Нужно придумать некую удобную форму записи