UICov — инструмент измерения
UI покрытия
SQA Days 18
Преамбула
А вам приходилось быть в такой ситуации?
Заказчик:
Какое покрытие?
Автотестеры:
Программисты:
Мануальщики:
Я:
Преамбула
А вам приходилось быть в такой ситуации?
Заказчик:
Какое покрытие?
Автотестеры:
Программисты:
А «смоки» это отловят?
Мануальщики:
Я:
Преамбула
А вам приходилось быть в такой ситуации?
Заказчик:
Какое покрытие?
Автотестеры:
Программисты:
А «смоки» это отловят?
Мануальщики:
А давайте мы будем
смотреть то, что ваши
автотесты не делают?
Я:
Преамбула
А вам приходилось быть в такой ситуации?
Заказчик:
Какое покрытие?
Автотестеры:
А мы это уже тестировали?
Программисты:
А «смоки» это отловят?
Мануальщики:
А давайте мы будем
смотреть то, что ваши
автотесты не делают?
Я:
Преамбула
А вам приходилось быть в такой ситуации?
Заказчик:
Какое покрытие?
Автотестеры:
А мы это уже тестировали?
Программисты:
А «смоки» это отловят?
Мануальщики:
А давайте мы будем
смотреть то, что ваши
автотесты не делают?
Я:
Огурец!
Идея
Сделать модель и высчитывать покрытие во
время запуска автотестов, ведь они сами
знают на каком они экране и что они делают!
http://sqadays.com/ru/talk/26051
И я об этом уже рассказывал год назад
Что будем измерять?
Экраны
Screens
Экраны
Что будем измерять?
Экраны, Переходы
Transitions
Переходы
Что будем измерять?
Экраны, Переходы, Действия
Actions
Действия
Что будем измерять?
Экраны, Переходы, Действия, Элементы
Elements
Элементы
Что будем измерять?
Экраны, Переходы, Действия, Элементы, Проверки
Checks
Проверки
?
?
Готово!
Opensource project on GitHub
https://github.com/budabum/uicov
Сущности
Исходная Модель
Шаблон, сделанный по модели
Лог-файл тестов, полученный после прогона
Файл покрытия, созданный по лог-файлам
Отчёт, созданный на основе файлов покрытия и шаблона
Генерируем шаблон
Мо
де
ль
template
g
e
n
t
p
l
Генерируем шаблон
Мо
де
ль
template
g
e
n
t
p
l
>uicov gentpl model-file1 model-file2 model-fileN
Запускаем тесты
Test Suite 1 Test Suite 2 Test Suite N
Тесты
запускаются
как обычно
file1.log file2.log fileN.log
Возможны варианты
Собираем единое покрытие
file1.log file2.log fileN.log
coverage.uic
g
a
t
h
e
r
Собираем единое покрытие
file1.log file2.log fileN.log
coverage.uic
>uicov gather file1.log file2.log fileN.log
Собираем покрытие раздельно
file1.log file2.log fileN.log
file1.uic file2.uic fileN.uic
g
a
t
h
e
r
g
a
t
h
e
r
g
a
t
h
e
r
Собираем покрытие раздельно
file1.log file2.log fileN.log
file1.uic file2.uic fileN.uic
>uicov gather –cov-file=file1.uic file1.log
>uicov gather –cov-file=fileN.uic fileN.log
Создаём единый отчёт (1)
report
coverage.uic
template.uic
r
e
p
o
r
t
Создаём единый отчёт (1)
report
coverage.uic
template.uic
>uicov report template.uic coverage.uic
Создаём единый отчёт (2)
file1.uic file2.uic fileN.uic
report
template.uic
r
e
p
o
r
t
Создаём единый отчёт (2)
file1.uic file2.uic fileN.uic
report
template.uic
>uicov report template.uic file1.uic file2.uic fileN.uic
Создаём раздельные отчёты
file1.uic file2.uic fileN.uic
file1 file2 fileN
template.uic
r
e
p
o
r
t
r
e
p
o
r
t
r
e
p
o
r
t
file1 file2 fileN
Создаём раздельные отчёты
file1.uic file2.uic fileN.uic
template.uic
>uicov report –out-file=file1.html template.uic file1.uic
>uicov report –out-file=fileN.html template.uic fileN.uic
Зачем нужен файл покрытия?
coverage.uic
Зачем нужен файл покрытия?
coverage.uic
file1.log
coverage
report
Почему нельзя так?
Зачем нужен файл покрытия?
coverage.uic
Это сериализованная модель,
которую легко десериализовывать
и преобразовывать и тестировать
Зачем нужен файл покрытия?
coverage.uic
file1.log
coverage
report
А так конечно тоже можно...
Это сериализованная модель,
которую легко десериализовывать
и преобразовывать и тестировать
Зачем нужен файл покрытия?
coverage.uic
file1.log
coverage
report
А так конечно тоже можно, но где же шаблон?
Это сериализованная модель,
которую легко десериализовывать
и преобразовывать и тестировать
Зачем нужен шаблон?
Зачем нужен шаблон?
Что будет, если мы создадим отчёт без использования
шаблона?
Зачем нужен шаблон?
Что будет, если мы создадим отчёт без использования
шаблона?
Покрытие всегда будет 100%
Вот что будет.
А как на самом деле?
file1.log report
file1.log
report
coverage
template
gather
gentmp
merge
merged
coverage report
Откуда вы знаете какие логи?
Откуда вы знаете какие логи?
А почему вы думаете, что я знаю какие у вас логи?
Откуда вы знаете какие логи?
А почему вы думаете, что я знаю какие у вас логи?
RegExp спешат на помощь
А вот вы точно знаете какие у вас логи!
>uicov gather —pattern-file=my_patterns1 log.file
Pattern File
Это Ruby файл, который загрузится и выполнится
UICov::patterns_override :log do
set_current_screen /Your pattern here/
set_transition /Your pattern here/
set_action /Your pattern here/
set_check /Your pattern here/
set_element /Your pattern here/
end
Откуда взять модель?
Откуда взять модель?
Экраны, Переходы, Действия, Элементы, Проверки
Вытащить из
исходного кода
приложения
Откуда взять модель?
Экраны, Переходы, Действия, Элементы, Проверки
Вытащить из
исходного кода
приложения
Вытащить из UI
страниц по спец.
признакам
Откуда взять модель?
Экраны, Переходы, Действия, Элементы, Проверки
Вытащить из
исходного кода
приложения
Вытащить из UI
страниц по спец.
признакам
Нарисовать в
plantuml
Откуда взять модель?
Экраны, Переходы, Действия, Элементы, Проверки
Вытащить из
исходного кода
приложения
Вытащить из UI
страниц по спец.
признакам
Нарисовать в
plantuml
Вытащить из
автотестов
из PageObject
Модель как диаграмма состояний
Модель как диаграмма классов
Так выглядит диаграмма
Модель как диаграмма классов
А так исходный код
@startuml
class LoginScreen{
Element username
Element password
Element login_button
Transition login(HomeScreen)
Transition login(LoginScreen)
Action restore_password()
Check restore_password_message()
Check error_login_message()
}
class PreferencesScreen{
Element email
Element password
Element confirm_password
Element photo_image
Element save_button
Transition apply_changes(HomeScreen)
Action change_password()
Action change_email()
Action upload_photo()
Action delete_photo()
Check correct_photo()
Check new_email_confirmed()
}
@enduml
Модель как диаграмма классов
И это лёгким движением клавиш превращается в шаблон!
… и еще вот так
Закрепим
>uicov gentpl model-files
Создать шаблон по модели
>uicov gather log-files
Собрать информацию о покрытии
>uicov report template coverage-files
Сгенерировать отчёт
>uicov merge coverage-file1 coverage-fileN
Соединить файлы покрытия
Пример html отчёта
Спасибо!
Вопросы?
author: Alexey Lyanguzov
mailto: budabum@gmail.com
skype: budabum

UICov - инструмент анализа покрытия UI-тестами