SlideShare une entreprise Scribd logo
1  sur  49
Автоматическое тестирование мобильных
   приложений на основе скриншотов


                     Сергей Борисов, tech lead, ТомскСофт
                        Иван Лебедев, интерн, ТомскСофт
Об авторах

Сергей Борисов
В настоящее время:
- Руководитель проекта в ТомскСофт
- ст. преп-ль в ТУСУР, каф. КСУП

Ранее:
- MobilTeck
- SiberLogic
- ЭлеСи
- ТМЦДО ТУСУР
- НИИ АЭМ

Общий стаж в разработке ПО: 19 лет
Общий стаж в высшем образовании: 15 лет


                                          2
Об авторах

Иван Лебедев
В настоящее время:
- Интерн в ТомскСофт
- студент 5-го курса ТУСУР, каф. КСУП




                                          3
Суть проблемы
1. Приложения обладают UI (особенно мобильные)




                                                 4
Суть проблемы
2. UI включает множество различных элементов с разным
форматированием




                                                        5
Суть проблемы
3. Зоопарк различных разрешающих способностей




                                                6
Суть проблемы
3. Зоопарк различных разрешающих способностей

                  120 точек на дюйм   160 точек на дюйм   240 точек на дюйм   320 точек на дюйм


   Маленький      240x320                                 480x640


   Нормальный     240x400             320x480             480x800             640x960
                  240x432                                 480x854
                                                          600x1024

    Большой       480x800             480x800

                  480x854             480x854
                                      600x1024

  Очень большой   1024x600            1280x800            1536x1152           2048x1536
                                      1024x768            1920x1152           2560x1536
                                      1280x768            1920x1200           2560x1600



                                                                                                  7
Суть проблемы
4. Зоопарк соотношений экрана




                                     8
Тестирование

• Если вы разрабатываете приложение по принципу:
 “сделали – отдали – забыли”, то вам не нужно
тестирование

• Если вы разрабатываете приложение, которое
собираетесь развивать и поддерживать, то вам нужно
тестирование




                                                     9
Классификация тестирования: объект тестирования

 • Функциональное тестирование (functional testing)
 • Тестирование производительности (performance testing)
 • Юзабилити-тестирование (usability testing)
 • Тестирование интерфейса пользователя (UI testing)
 • Тестирование безопасности (security testing)
 • Тестирование локализации (localization testing)
 • Тестирование совместимости (compatibility testing)




                                                     10
Классификация тестирования: по времени проведения


 • Альфа-тестирование (alpha testing)
     • Тестирование при приёмке (smoke testing)
     • Тестирование новой функциональности
       (new feature testing)
     • Регрессионное тестирование (regression testing)
     • Тестирование при сдаче (acceptance testing)
 • Бета-тестирование (beta testing)




                                                         11
Автоматизированное тестирование




Разработчики     Репозитарий      CI сервер

                                              12
Регрессионное автоматическое тестирование

         • Модульные тесты

         • Функциональные интеграционные тесты

         • Тесты UI




                                             13
Тестирование UI




                  14
Тестирование UI




                  15
Тестирование UI


     Тестирование UI по элементам
     – дело занудное




                               16
Вопросы на которые может ответить
  фунциональное тестирование через UI

• Наличие/отсутствие элемента управления

• Видимость этого элемента управления

• Различные другие свойства объекта

• Корректность реакции элемента управления на
действия пользователя




                                                17
Вопросы на которые
фунциональное тестирование
 через UI ответить не может



                              18
Находится ли элемент управления там, где того
             ожидал дизайнер?




                                                19
Выглядит ли элемент управления, так как того
              ожидал дизайнер?




Или с каким конкретным набором данных он выглядит:
● слишком мелко
● не полностью
● и т.д.

                                                     20
Соответствует ли отображение интерфейса
            ожиданиям дизайнера?




А соответствует ли оно ожиданиям заказчика?
                                              21
На эти вопросы может легко
       ответить человек
Надо всего лишь просмотреть все экраны…

Со всеми возможными данными…

На всех возможных разрешениях устройств…

На всех версиях операционной системы…




                                           22
Объем работы тестировщика




                            23
Расчетное время
Количество экранов для разных наборов данных –
 100
Количество разрешений экрана – 5
Время подготовки и изучения одного экрана – 5
 минут

Итоговое время:
              100х5х5=2500мин ~1 неделя
                Для каждой версии ОС
                                                 24
Задача
Нужен фреймоворк, который позволяет:
 Делать автоматическое регрессионное
тестирование приложения

 Учитывать все особенности отображения
элементов управления

 Делать тесты на разных разрешениях экранов и
разных версиях операционной системы
                                                 25
Решение: шаг 1
Для каждого экрана приложения нужно
подготовить наборы тестовых данных, которые
будут в нем отображаться

                          Screen2

     Screen1   DataSet1   DataSet2   DataSet3


                                                …




                                                    26
Решение: шаг 2

Создать тестовое приложение, которое в
автоматическом режиме:
 Загружает заранее подготовленные данные
 Отображает экран
 Делает скриншот этого экрана


                     Примечание: функциональность
                     элементов управления, в данном
                     случае не важна
                                                      27
Решение: шаг 3
                      Screen2
  Screen1    DataSet1 DataSet2 DataSet3

                                           …


 320х240
 640х480
 800х480
 1280х720
 1260х800
 240x320
 480x640
 480x800
 720x1280
 800x1260                     CI сервер       .   .   .   .
…

                                                               28
Первая проверка




                  29
Решение: шаг 4
                     Screen2
Screen1   DataSet1   DataSet2
          DataSet3


                                  …


 320х240
 640х480
                                      .   .     . .
 800х480
 1280х720
 1260х800
 240x320
 480x640
 480x800
 720x1280
 800x1260
…
                                              CI сервер   .   .   . .   30
Последующие проверки



              ?




                       31
Что нужно сделать, чтобы это
          заработало

 Подготовить данные (БД или другое хранилище)

 Отвязать UI приложения от сервисов

 Сделать скриншоты экранов

 Сравнить два изображения и найти разницу




                                                 32
Реализация фреймворка




                        33
Состав фреймворка

             Программная
  Тесты         часть
           (библиотека *.jar)




              Скриптовая
                 часть



                                34
Виды тестов в Android
Система Android на данный момент позволяет
  проводить два вида тестирования Activity:
   
      Unit-testing — тестирование, изолированное
      от    инфраструктуры      системы,    позволет
      заменять некоторые объекты системы.
      Используется класс ActivityUnitTestCase
   
      Instrumentational-testing — тестирование,
      использующее       реальную    инфраструктуру
      системы, позволяет управлять действиями
      тестируемой Activity напрямую. Используется
      класс ActivityInstrumentationTestCase2
                                                   35
Состав библиотеки

Основные классы:
 ScreenshotTaker – непосредственно занимается
созданием скриншотов

Вспомоготельные классы:
 DatabaseHelper – обнуляет базу данных и заполняет
начальными данными

 DataSetReader – считывает исходные данные из файла

 Table – обеспечивает промежуточное хранение данных

                                                       36
Cхема работы теста




                compare


.   .   .   .             37
Инициализация теста
 Инициализируем ScreenshotTaker

 Загружаем данные (если они одинаковые для всех
тестов группы)




                                                   38
Загрузка данных в БД приложения

 Использовать DBUnit
было сложно

 Разработали свой
модуль загрузки данных

 Поддерживает один
из двух форматов DBUnit




                                  39
Загрузка данных в БД приложения




                                  40
Выполнение скриншота
 Выполнение скриншота делается внутренними
механизмами Android

 Рассматривался вариант выполнения скриншота
хостовой ОС




                                                41
Сравнение скриншотов
 Сравнение двух изображений построено на базе
ImageMagick

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




                                                 42
Исключение части экрана
Интерфейс иногда содержит компоненты, значения
которых постоянно меняются, типа часов, прогресс
баров и т.д.




                                                   43
Строение экрана в Android




                            44
Входные данные метода
Метод, создающий скриншоты, принимает следующие
 агрументы:

 Activity — та активити, скриншот элемента которой
 будет производиться
 Int — идентификатор элемента, снимок которого
 будет производиться
 Int — список индетификаторов тех элементов,
 котороые надо исключить
 String — уникальное имя скриншота, используется в
 именовании в файловой системе
                                                      45
Создание скриншота
Пример вызова функции, где создается скриншот
корневого элемента с исключением      элемента с
идентификатором «contact_progressbar»




                                               46
Алгоритм скрипта сравнения
            скриншотов
Копирование скриншотов с
       устройства                       Начало



 Остались непроверенные     нет
      скриншоты?

               да
         Есть ли           нет     Принять за
       эталонный?                  эталонный
                                                 Генерирование
               да                                    отчета
     Есть разница с        да     Отправить на
                                    проверку
      эталонным?
                                  тестировщику
             нет
                                                    Конец


                                                             47
Заключение
• Был реализован фреймворк для ОС Android,
  позволяющий тестировать графический
  интерфейс приложения
• Планируется реализовать аналогичную систему
  для iOS, затем для WinPhone8
• Исходный код доступен по лицензии
  Creative Commons Attribution-NonCommercial-
  ShareAlike 3.0



                                                48
Благодарим за внимание
https://github.com/tomsksoft/screen-tester-android




                               Сергей Борисов, tech lead, ТомскСофт
                                                  bsi@tomsksoft.com

                                  Иван Лебедев, интерн, ТомскСофт
                                                 lia@tomsksoft.com




                                                               49

Contenu connexe

Tendances

Тестирование мобильных приложений
Тестирование мобильных приложенийТестирование мобильных приложений
Тестирование мобильных приложений
Alexander Khozya
 
Appium confet qa
Appium confet qaAppium confet qa
Appium confet qa
ISsoft
 

Tendances (20)

До зеленых человечков: исследовательское тестирование мобильных приложений
До зеленых человечков: исследовательское тестирование мобильных приложенийДо зеленых человечков: исследовательское тестирование мобильных приложений
До зеленых человечков: исследовательское тестирование мобильных приложений
 
Подходы к тестированию андроид приложений
Подходы к тестированию андроид приложенийПодходы к тестированию андроид приложений
Подходы к тестированию андроид приложений
 
Тестирование мобильных приложений
Тестирование мобильных приложенийТестирование мобильных приложений
Тестирование мобильных приложений
 
Тестируем мобильные приложения в облаках с appium
Тестируем мобильные приложения в облаках с appiumТестируем мобильные приложения в облаках с appium
Тестируем мобильные приложения в облаках с appium
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Степан Гончаров «Тестирование Android-приложений с помощью Robotium и Spoon»
Степан Гончаров «Тестирование Android-приложений с помощью Robotium и Spoon»Степан Гончаров «Тестирование Android-приложений с помощью Robotium и Spoon»
Степан Гончаров «Тестирование Android-приложений с помощью Robotium и Spoon»
 
Виртуализация и автоматизация тестирования мобильных приложений
Виртуализация и автоматизация тестирования мобильных приложенийВиртуализация и автоматизация тестирования мобильных приложений
Виртуализация и автоматизация тестирования мобильных приложений
 
Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
 Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва  Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
 
Лайфхаки ручного тестирования на мобилках
Лайфхаки ручного тестирования на мобилкахЛайфхаки ручного тестирования на мобилках
Лайфхаки ручного тестирования на мобилках
 
Эффективное тестирование сайта на мобильных устройствах
Эффективное тестирование сайта на мобильных устройствахЭффективное тестирование сайта на мобильных устройствах
Эффективное тестирование сайта на мобильных устройствах
 
Поиск багов при тестировании переходов с веба в мобильное приложение
Поиск багов при тестировании переходов с веба в мобильное приложениеПоиск багов при тестировании переходов с веба в мобильное приложение
Поиск багов при тестировании переходов с веба в мобильное приложение
 
Как оптимизировать тестирование мобильных приложений
Как оптимизировать тестирование мобильных приложенийКак оптимизировать тестирование мобильных приложений
Как оптимизировать тестирование мобильных приложений
 
Appium confet qa
Appium confet qaAppium confet qa
Appium confet qa
 
Тестирование мобильных API: Behind The Scenes
Тестирование мобильных API: Behind The ScenesТестирование мобильных API: Behind The Scenes
Тестирование мобильных API: Behind The Scenes
 
Антон Семенченко, Никита Беликов "Инструменты автоматизации тестирования моби...
Антон Семенченко, Никита Беликов "Инструменты автоматизации тестирования моби...Антон Семенченко, Никита Беликов "Инструменты автоматизации тестирования моби...
Антон Семенченко, Никита Беликов "Инструменты автоматизации тестирования моби...
 
Михаил Левин: Автоматизация в мобильном тестировании
Михаил Левин: Автоматизация в мобильном тестированииМихаил Левин: Автоматизация в мобильном тестировании
Михаил Левин: Автоматизация в мобильном тестировании
 
Эльдар Гусейнов "Эффективная архитектура мобильной автоматизации для проектов...
Эльдар Гусейнов "Эффективная архитектура мобильной автоматизации для проектов...Эльдар Гусейнов "Эффективная архитектура мобильной автоматизации для проектов...
Эльдар Гусейнов "Эффективная архитектура мобильной автоматизации для проектов...
 
Mobile Automation based on Appium
Mobile Automation based on AppiumMobile Automation based on Appium
Mobile Automation based on Appium
 
Тестируем игры для мобильных устройств: от прототипа до запуска
Тестируем игры для мобильных устройств: от прототипа до запускаТестируем игры для мобильных устройств: от прототипа до запуска
Тестируем игры для мобильных устройств: от прототипа до запуска
 
Mobile testing. Tips and tricks
Mobile testing. Tips and tricksMobile testing. Tips and tricks
Mobile testing. Tips and tricks
 

Similaire à Автоматическое тестирование мобильных приложений на основе скриншотов

Software testing in practice
Software testing in practiceSoftware testing in practice
Software testing in practice
nikolay_vasiliev
 
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
InTRUEdeR
 
Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"
Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"
Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"
Dmitry Savchenko
 
Успешный проект внедрения Docsvision вертекс юнайтед
Успешный проект внедрения Docsvision вертекс юнайтедУспешный проект внедрения Docsvision вертекс юнайтед
Успешный проект внедрения Docsvision вертекс юнайтед
Docsvision
 
Производительность и надежность Docsvision 5
Производительность и надежность Docsvision 5Производительность и надежность Docsvision 5
Производительность и надежность Docsvision 5
Docsvision
 

Similaire à Автоматическое тестирование мобильных приложений на основе скриншотов (20)

Разрабатываем качественное Windows 8 приложение
Разрабатываем качественное Windows 8 приложениеРазрабатываем качественное Windows 8 приложение
Разрабатываем качественное Windows 8 приложение
 
QA Fest 2016. Денис Яременко. Как облегчить процесс мобильного тестирования
QA Fest 2016. Денис Яременко. Как облегчить процесс мобильного тестированияQA Fest 2016. Денис Яременко. Как облегчить процесс мобильного тестирования
QA Fest 2016. Денис Яременко. Как облегчить процесс мобильного тестирования
 
E2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийE2E-тестирование мобильных приложений
E2E-тестирование мобильных приложений
 
Software testing in practice
Software testing in practiceSoftware testing in practice
Software testing in practice
 
Особенности автоматизации с помощью скриншотов
Особенности автоматизации с помощью скриншотовОсобенности автоматизации с помощью скриншотов
Особенности автоматизации с помощью скриншотов
 
Разработка безопасных веб приложений
Разработка безопасных веб приложенийРазработка безопасных веб приложений
Разработка безопасных веб приложений
 
Анатолий Любомиров -- Тестирование пользовательского интерфейса – как это дел...
Анатолий Любомиров -- Тестирование пользовательского интерфейса – как это дел...Анатолий Любомиров -- Тестирование пользовательского интерфейса – как это дел...
Анатолий Любомиров -- Тестирование пользовательского интерфейса – как это дел...
 
Automation testing desktop applications
Automation testing desktop applicationsAutomation testing desktop applications
Automation testing desktop applications
 
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
 
MockServer-driven development
MockServer-driven developmentMockServer-driven development
MockServer-driven development
 
Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"
Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"
Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"
 
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
 
Успешный проект внедрения Docsvision вертекс юнайтед
Успешный проект внедрения Docsvision вертекс юнайтедУспешный проект внедрения Docsvision вертекс юнайтед
Успешный проект внедрения Docsvision вертекс юнайтед
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Производительность и надежность Docsvision 5
Производительность и надежность Docsvision 5Производительность и надежность Docsvision 5
Производительность и надежность Docsvision 5
 
Виктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIВиктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public API
 
Image-based automation
Image-based automationImage-based automation
Image-based automation
 
Автоматизация с помощью скриншотов. Как научить скрипт видеть графический инт...
Автоматизация с помощью скриншотов. Как научить скрипт видеть графический инт...Автоматизация с помощью скриншотов. Как научить скрипт видеть графический инт...
Автоматизация с помощью скриншотов. Как научить скрипт видеть графический инт...
 
Разработка WinRT приложений для Windows 8: реальный опыт, UA Mobile 2012
Разработка WinRT приложений для  Windows 8: реальный опыт, UA Mobile 2012Разработка WinRT приложений для  Windows 8: реальный опыт, UA Mobile 2012
Разработка WinRT приложений для Windows 8: реальный опыт, UA Mobile 2012
 

Автоматическое тестирование мобильных приложений на основе скриншотов

  • 1. Автоматическое тестирование мобильных приложений на основе скриншотов Сергей Борисов, tech lead, ТомскСофт Иван Лебедев, интерн, ТомскСофт
  • 2. Об авторах Сергей Борисов В настоящее время: - Руководитель проекта в ТомскСофт - ст. преп-ль в ТУСУР, каф. КСУП Ранее: - MobilTeck - SiberLogic - ЭлеСи - ТМЦДО ТУСУР - НИИ АЭМ Общий стаж в разработке ПО: 19 лет Общий стаж в высшем образовании: 15 лет 2
  • 3. Об авторах Иван Лебедев В настоящее время: - Интерн в ТомскСофт - студент 5-го курса ТУСУР, каф. КСУП 3
  • 4. Суть проблемы 1. Приложения обладают UI (особенно мобильные) 4
  • 5. Суть проблемы 2. UI включает множество различных элементов с разным форматированием 5
  • 6. Суть проблемы 3. Зоопарк различных разрешающих способностей 6
  • 7. Суть проблемы 3. Зоопарк различных разрешающих способностей 120 точек на дюйм 160 точек на дюйм 240 точек на дюйм 320 точек на дюйм Маленький 240x320 480x640 Нормальный 240x400 320x480 480x800 640x960 240x432 480x854 600x1024 Большой 480x800 480x800 480x854 480x854 600x1024 Очень большой 1024x600 1280x800 1536x1152 2048x1536 1024x768 1920x1152 2560x1536 1280x768 1920x1200 2560x1600 7
  • 8. Суть проблемы 4. Зоопарк соотношений экрана 8
  • 9. Тестирование • Если вы разрабатываете приложение по принципу: “сделали – отдали – забыли”, то вам не нужно тестирование • Если вы разрабатываете приложение, которое собираетесь развивать и поддерживать, то вам нужно тестирование 9
  • 10. Классификация тестирования: объект тестирования • Функциональное тестирование (functional testing) • Тестирование производительности (performance testing) • Юзабилити-тестирование (usability testing) • Тестирование интерфейса пользователя (UI testing) • Тестирование безопасности (security testing) • Тестирование локализации (localization testing) • Тестирование совместимости (compatibility testing) 10
  • 11. Классификация тестирования: по времени проведения • Альфа-тестирование (alpha testing) • Тестирование при приёмке (smoke testing) • Тестирование новой функциональности (new feature testing) • Регрессионное тестирование (regression testing) • Тестирование при сдаче (acceptance testing) • Бета-тестирование (beta testing) 11
  • 13. Регрессионное автоматическое тестирование • Модульные тесты • Функциональные интеграционные тесты • Тесты UI 13
  • 16. Тестирование UI Тестирование UI по элементам – дело занудное 16
  • 17. Вопросы на которые может ответить фунциональное тестирование через UI • Наличие/отсутствие элемента управления • Видимость этого элемента управления • Различные другие свойства объекта • Корректность реакции элемента управления на действия пользователя 17
  • 18. Вопросы на которые фунциональное тестирование через UI ответить не может 18
  • 19. Находится ли элемент управления там, где того ожидал дизайнер? 19
  • 20. Выглядит ли элемент управления, так как того ожидал дизайнер? Или с каким конкретным набором данных он выглядит: ● слишком мелко ● не полностью ● и т.д. 20
  • 21. Соответствует ли отображение интерфейса ожиданиям дизайнера? А соответствует ли оно ожиданиям заказчика? 21
  • 22. На эти вопросы может легко ответить человек Надо всего лишь просмотреть все экраны… Со всеми возможными данными… На всех возможных разрешениях устройств… На всех версиях операционной системы… 22
  • 24. Расчетное время Количество экранов для разных наборов данных – 100 Количество разрешений экрана – 5 Время подготовки и изучения одного экрана – 5 минут Итоговое время: 100х5х5=2500мин ~1 неделя Для каждой версии ОС 24
  • 25. Задача Нужен фреймоворк, который позволяет:  Делать автоматическое регрессионное тестирование приложения  Учитывать все особенности отображения элементов управления  Делать тесты на разных разрешениях экранов и разных версиях операционной системы 25
  • 26. Решение: шаг 1 Для каждого экрана приложения нужно подготовить наборы тестовых данных, которые будут в нем отображаться Screen2 Screen1 DataSet1 DataSet2 DataSet3 … 26
  • 27. Решение: шаг 2 Создать тестовое приложение, которое в автоматическом режиме:  Загружает заранее подготовленные данные  Отображает экран  Делает скриншот этого экрана Примечание: функциональность элементов управления, в данном случае не важна 27
  • 28. Решение: шаг 3 Screen2 Screen1 DataSet1 DataSet2 DataSet3 …  320х240  640х480  800х480  1280х720  1260х800  240x320  480x640  480x800  720x1280  800x1260 CI сервер . . . . … 28
  • 30. Решение: шаг 4 Screen2 Screen1 DataSet1 DataSet2 DataSet3 …  320х240  640х480 . . . .  800х480  1280х720  1260х800  240x320  480x640  480x800  720x1280  800x1260 … CI сервер . . . . 30
  • 32. Что нужно сделать, чтобы это заработало  Подготовить данные (БД или другое хранилище)  Отвязать UI приложения от сервисов  Сделать скриншоты экранов  Сравнить два изображения и найти разницу 32
  • 34. Состав фреймворка Программная Тесты часть (библиотека *.jar) Скриптовая часть 34
  • 35. Виды тестов в Android Система Android на данный момент позволяет проводить два вида тестирования Activity:  Unit-testing — тестирование, изолированное от инфраструктуры системы, позволет заменять некоторые объекты системы. Используется класс ActivityUnitTestCase  Instrumentational-testing — тестирование, использующее реальную инфраструктуру системы, позволяет управлять действиями тестируемой Activity напрямую. Используется класс ActivityInstrumentationTestCase2 35
  • 36. Состав библиотеки Основные классы:  ScreenshotTaker – непосредственно занимается созданием скриншотов Вспомоготельные классы:  DatabaseHelper – обнуляет базу данных и заполняет начальными данными  DataSetReader – считывает исходные данные из файла  Table – обеспечивает промежуточное хранение данных 36
  • 37. Cхема работы теста compare . . . . 37
  • 38. Инициализация теста  Инициализируем ScreenshotTaker  Загружаем данные (если они одинаковые для всех тестов группы) 38
  • 39. Загрузка данных в БД приложения  Использовать DBUnit было сложно  Разработали свой модуль загрузки данных  Поддерживает один из двух форматов DBUnit 39
  • 40. Загрузка данных в БД приложения 40
  • 41. Выполнение скриншота  Выполнение скриншота делается внутренними механизмами Android  Рассматривался вариант выполнения скриншота хостовой ОС 41
  • 42. Сравнение скриншотов  Сравнение двух изображений построено на базе ImageMagick  Различия между двумя скриншотами помечаются 42
  • 43. Исключение части экрана Интерфейс иногда содержит компоненты, значения которых постоянно меняются, типа часов, прогресс баров и т.д. 43
  • 45. Входные данные метода Метод, создающий скриншоты, принимает следующие агрументы:  Activity — та активити, скриншот элемента которой будет производиться  Int — идентификатор элемента, снимок которого будет производиться  Int — список индетификаторов тех элементов, котороые надо исключить  String — уникальное имя скриншота, используется в именовании в файловой системе 45
  • 46. Создание скриншота Пример вызова функции, где создается скриншот корневого элемента с исключением элемента с идентификатором «contact_progressbar» 46
  • 47. Алгоритм скрипта сравнения скриншотов Копирование скриншотов с устройства Начало Остались непроверенные нет скриншоты? да Есть ли нет Принять за эталонный? эталонный Генерирование да отчета Есть разница с да Отправить на проверку эталонным? тестировщику нет Конец 47
  • 48. Заключение • Был реализован фреймворк для ОС Android, позволяющий тестировать графический интерфейс приложения • Планируется реализовать аналогичную систему для iOS, затем для WinPhone8 • Исходный код доступен по лицензии Creative Commons Attribution-NonCommercial- ShareAlike 3.0 48
  • 49. Благодарим за внимание https://github.com/tomsksoft/screen-tester-android Сергей Борисов, tech lead, ТомскСофт bsi@tomsksoft.com Иван Лебедев, интерн, ТомскСофт lia@tomsksoft.com 49