2. Об авторах
Сергей Борисов
В настоящее время:
- Руководитель проекта в ТомскСофт
- ст. преп-ль в ТУСУР, каф. КСУП
Ранее:
- MobilTeck
- SiberLogic
- ЭлеСи
- ТМЦДО ТУСУР
- НИИ АЭМ
Общий стаж в разработке ПО: 19 лет
Общий стаж в высшем образовании: 15 лет
2
3. Об авторах
Иван Лебедев
В настоящее время:
- Интерн в ТомскСофт
- студент 5-го курса ТУСУР, каф. КСУП
3
9. Тестирование
• Если вы разрабатываете приложение по принципу:
“сделали – отдали – забыли”, то вам не нужно
тестирование
• Если вы разрабатываете приложение, которое
собираетесь развивать и поддерживать, то вам нужно
тестирование
9
16. Тестирование UI
Тестирование UI по элементам
– дело занудное
16
17. Вопросы на которые может ответить
фунциональное тестирование через UI
• Наличие/отсутствие элемента управления
• Видимость этого элемента управления
• Различные другие свойства объекта
• Корректность реакции элемента управления на
действия пользователя
17
20. Выглядит ли элемент управления, так как того
ожидал дизайнер?
Или с каким конкретным набором данных он выглядит:
● слишком мелко
● не полностью
● и т.д.
20
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
32. Что нужно сделать, чтобы это
заработало
Подготовить данные (БД или другое хранилище)
Отвязать UI приложения от сервисов
Сделать скриншоты экранов
Сравнить два изображения и найти разницу
32
34. Состав фреймворка
Программная
Тесты часть
(библиотека *.jar)
Скриптовая
часть
34
35. Виды тестов в Android
Система Android на данный момент позволяет
проводить два вида тестирования Activity:
Unit-testing — тестирование, изолированное
от инфраструктуры системы, позволет
заменять некоторые объекты системы.
Используется класс ActivityUnitTestCase
Instrumentational-testing — тестирование,
использующее реальную инфраструктуру
системы, позволяет управлять действиями
тестируемой Activity напрямую. Используется
класс ActivityInstrumentationTestCase2
35
36. Состав библиотеки
Основные классы:
ScreenshotTaker – непосредственно занимается
созданием скриншотов
Вспомоготельные классы:
DatabaseHelper – обнуляет базу данных и заполняет
начальными данными
DataSetReader – считывает исходные данные из файла
Table – обеспечивает промежуточное хранение данных
36
39. Загрузка данных в БД приложения
Использовать DBUnit
было сложно
Разработали свой
модуль загрузки данных
Поддерживает один
из двух форматов DBUnit
39
45. Входные данные метода
Метод, создающий скриншоты, принимает следующие
агрументы:
Activity — та активити, скриншот элемента которой
будет производиться
Int — идентификатор элемента, снимок которого
будет производиться
Int — список индетификаторов тех элементов,
котороые надо исключить
String — уникальное имя скриншота, используется в
именовании в файловой системе
45
46. Создание скриншота
Пример вызова функции, где создается скриншот
корневого элемента с исключением элемента с
идентификатором «contact_progressbar»
46
47. Алгоритм скрипта сравнения
скриншотов
Копирование скриншотов с
устройства Начало
Остались непроверенные нет
скриншоты?
да
Есть ли нет Принять за
эталонный? эталонный
Генерирование
да отчета
Есть разница с да Отправить на
проверку
эталонным?
тестировщику
нет
Конец
47
48. Заключение
• Был реализован фреймворк для ОС Android,
позволяющий тестировать графический
интерфейс приложения
• Планируется реализовать аналогичную систему
для iOS, затем для WinPhone8
• Исходный код доступен по лицензии
Creative Commons Attribution-NonCommercial-
ShareAlike 3.0
48