SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Downloaden Sie, um offline zu lesen
Scalable eCommerce Platform Solutions
Визуализация покрытия
автоматизированными UI тестами
Лянгузов Алексей
План
@startuml
skinparam sequence{
ArrowColor #528526
LifeLineBorderColor #528526
ActorBorderColor #528526
ActorBackgroundColor #AAFFAA
ParticipantBorderColor #528526
ParticipantBackgroundColor white
ParticipantFontSize 18
ParticipantFontName Serif
BoxBorderColor #528526
BoxFontSize 18
}
actor " " as U
box "Введение" #DDFFDD
participant "ПроnПокрытие" as P1
participant "ПроnМодели" as P2
end box
box "Основная часть" #BBFFBB
participant "ПроnPlantUML" as P3
participant "ПроnUI покрытие" as P4
participant "ПроnАрхитектуру" as P5
end box
U -> P1
activate P1
P1 --> U
P1 -> P2
activate P2
P2 --> U
P2 -> P3
activate P3
P3 --> U
P3 -> P4
activate P4
P4 --> U
P4 -> P5
activate P5
P5 --> U
destroy P1
destroy P2
destroy P3
destroy P4
destroy P5
@enduml
* Спасибо интернету за картинки, а особенно сайту openclipart.org
Все права принадлежат авторам изображений
Про покрытие
ISTQB: http://stqbexamcertification.com/what-is-test-coverage-in-software-testing-its-advantages-and-disadvantages/
Тестовое покрытие — мера тестирования, присущая
определенному тестовому набору.
Про покрытие
Coverage =
Number of exercised items
Total number of items
x 100 %
ISTQ
B
ISTQB: http://stqbexamcertification.com/what-is-test-coverage-in-software-testing-its-advantages-and-disadvantages/
Тестовое покрытие — мера тестирования, присущая
определенному тестовому набору.
Про покрытие
Coverage =
Number of exercised items
Total number of items
x 100 %
ISTQ
B
ISTQB: http://stqbexamcertification.com/what-is-test-coverage-in-software-testing-its-advantages-and-disadvantages/
Тестовое покрытие — мера тестирования, присущая
определенному тестовому набору.
При подсчете покрытия недостаточно довольствоваться
одним аспектом. Надо смотреть на тестируемый объект в
разных измерениях (dimensions).
Зачем покрытие
Показывает места где нет
тестирования
Зачем покрытие
Показывает места где нет
тестирования
Даёт идеи для новых тестовых
сценариев / тестовых данных
Зачем покрытие
Показывает места где нет
тестирования
Даёт идеи для новых тестовых
сценариев / тестовых данных
Помогает сбалансировать тесты и
тестовые наборы
Спор
Send
У вас 200 тестов, а у нас 2,000
Ха! У вас 2,000 кейсов, у нас 4,000
Ха-ха! У вас 4,000 проверок, а у
нас 20,000. Съел?
Ха-ха-ха! У вас 4,000 уникальных
проверок и у нас 4,000 уникальных.
У нас 100% эффективность!
Зато у вас 20 человек их писало,
а у нас 5.
EditYet Another QA Lead
Спор
Send
У вас 200 тестов, а у нас 2,000
Ха! У вас 2,000 кейсов, у нас 4,000
Ха-ха! У вас 4,000 проверок, а у
нас 20,000. Съел?
Ха-ха-ха! У вас 4,000 уникальных
проверок и у нас 4,000 уникальных.
У нас 100% эффективность!
Зато у вас 20 человек их писало,
а у нас 5.
Ладно, ты победил —
ты на 200 грамм тяжелее
EditYet Another QA Lead
Зачем покрытие
Показывает места где нет
тестирования
Даёт идеи для новых тестовых
сценариев / тестовых данных
Помогает сбалансировать тесты и
тестовые наборы
Оценивает качество самих автотестов
и меру их надёжности
Зачем покрытие
Показывает места где нет
тестирования
Даёт идеи для новых тестовых
сценариев / тестовых данных
Помогает сбалансировать тесты и
тестовые наборы
Оценивает качество самих автотестов
и меру их надёжности
Отражает скорость написания тестов и
помогает в планировании работ
@story-1
Scenario: As a user I want ..
Given I am ...
When I do …
Then I see ...
@story-126
Scenario: As a user I want ..
Given I am ...
When I do …
Then I see ...
Про наше покрытие
User Story 1
AC#1
...
AC#N
...
User Story 126
AC#1
...
AC#N
@story-1 @story-126
Scenario: As a user I want ..
Given I am ...
When I do …
Then I see ...
Про модели
Модель - это система, исследование которой служит средством
для получения информации о другой системе, являясь её
упрощённым представлением
Про модели
Модель - это система, исследование которой служит средством
для получения информации о другой системе, являясь её
упрощённым представлением
Про проблемы моделей
Подвержены
частым
изменениям
Про проблемы моделей
Подвержены
частым
изменениям
Быстро и
заметно
стареют
Про проблемы моделей
Подвержены
частым
изменениям
Сложны для
восприятия или
внесения изменений
Быстро и
заметно
стареют
Про проблемы моделей
Подвержены
частым
изменениям
Быстро и
заметно
стареют
Сложны для
восприятия или
внесения изменений
С «другой планеты» -
делаются в сторонних
дорогих инструментах
Чтобы модели работали
Надо постоянно проверять
их валидность
Чтобы модели работали
Надо постоянно проверять
их валидность
(постоянно ==
автоматически)
Т. е. они должны быть легки
для понимания машинами
Чтобы модели работали
Надо постоянно проверять
их валидность
(постоянно ==
автоматически)
Т. е. они должны быть легки
для понимания машинами
Они должны быть легки
для понимания людьми
Чтобы модели работали
Надо постоянно проверять
их валидность
(постоянно ==
автоматически)
Т. е. они должны быть легки
для понимания машинами
Они должны быть легки
для понимания людьми
Они должны быть
легки для быстрого
внесения изменений
Чтобы модели работали
Надо постоянно проверять
их валидность
(постоянно ==
автоматически)
Т. е. они должны быть легки
для понимания машинами
Они должны быть легки
для понимания людьми
Они должны быть
легки для быстрого
внесения изменений
DSLDSL
EngineEngine
VisualizationVisualization
Про PlantUML
PlantUML решает!
PlantUML
diagramming
language
PlantUML
Graphviz
SVG, PNG, EPS
diagram file
EngineEngineDSLDSL VisualizationVisualization
http://plantuml.sourceforge.net/index.html
Про PlantUML
EngineEngineDSLDSL VisualizationVisualization
Простой язык создания диаграмм
Легко читать, писать и генерировать в автоматическом режиме
Отслеживание изменений
Например в системе контроля версий или IDE
Поддержка языков разметки
HTML, wiki-like
Стили элементов и связей
skinparam — что-то на подобии лёгкого CSS — цвета и классы
С-lang style preprocessing
!include(file.puml), !define(set_of_objects), !ifdef(something)
Поддержка встроенных изображений
<img filename.jpg>, спрайты и openiconic
Про PlantUML
Main Admin
Use the application
User
Start
Some note
This note is connected
to several objects.
@startuml
scale 1.2
:Main Admin: as Admin
(Use the application) as (Use)
User -> (Start)
User --> (Use)
Admin ---> (Use)
note right of (Use) : Some note
note "This note is connectednto several objects." as N2
(Start) .. N2
N2 .. (Use)
@enduml
EngineEngineDSLDSL VisualizationVisualization
VSDX file format / OMG!
Взято тут
Про PlantUML
EngineEngineDSLDSL VisualizationVisualization
Интеграция с IDE
NetBeans, Eclipse, IntelliJ Idea etc
Интеграция с Wiki движками
MediaWiki, Confluence, DokuWiki, Redmine, Trac etc
Online diagramming
plantuml.com, Google Docs etc
Запуск из командной строки или как GUI-приложение
java -jar plantuml.jar -help ИЛИ java -jar plantuml.jar -gui
Интеграция с языками программирования и инструментами
python, JS, ant, gradle etc
Работа в разных редакторах
vim, emacs, word, ОО etc
Про JetBrains Plugin
Link: https://github.com/esteinberg/plantuml4idea
EngineEngineDSLDSL VisualizationVisualization
Про PlantUML
VisualizationVisualizationDSLDSL EngineEngine
7 основных UML диаграмм
State, Activity, UseCase, Class, Object, Component, Sequence
Различные форматы картинок
Растровый(PNG), векторный(SVG), PS, LaTeX
Обычные диаграммы и графики
Используется библиотека jcckit.sourceforge.net
Встраивание в сгенерённую документацию
JavaDoc, Sphinx, Doxygen etc
Необычные не-диаграммы
ASCII диаграммы, GUI-прототипирование, XEarth
Модель в XMI-формате для обмена с другими UML тулами
Печально, но XMI у всех свой, уж поверьте
PlantUML мало?
Кросс-платформенный
Работает там, где работает Java и Graphviz
С открытым исходным кодом
http://sourceforge.net/projects/plantuml/
Бесплатный по лицензии GPL
Не нравится GPL? Есть LGPL, Apache, Eclipse и даже MIT версии
Активно развивается
Не менее 1-го релиза в месяц
Маленький
На данный момент plantuml.jar занимает 2.5Mb
Умеет генерить судоку
Killer feature!
VisualizationVisualizationDSLDSL EngineEngine
@story-1
Scenario: As a user I want ..
Given I am ...
When I do …
Then I see ...
@story-126
Scenario: As a user I want ..
Given I am ...
When I do …
Then I see ...
Про наше покрытие
User Story 1
AC#1
...
AC#N
...
User Story 126
AC#1
...
AC#N
@story-1 @story-126
Scenario: As a user I want ..
Given I am ...
When I do …
Then I see ...
Про UI покрытие
Нам нужна модель!
Код диаграммы
@startuml
skinparam state {
BackgroundColor<<Uncovered>> #DDDDDD
BackgroundColor<<System>> lightblue
FontSize 24
ArrowFontSize 18
}
[*] --> HomePage : start
HomePage --> LoginPage : login
HomePage --> SettingsPage : settings
HomePage --> MyProfilePage : profile
HomePage --> SearchPage<<Uncovered>> : search
LoginPage --> MyProfilePage : login
LoginPage --> LoginPage : login_invalid
SettingsPage --> HomePage : confirm_and_save
SettingsPage --> SystemSettingsPage<<System>> : change_system_settings
MyProfilePage -> HomePage : confirm_and_save
@enduml
Про UI покрытие
HomePage
LoginPage SettingsPage
MyProfilePage
SearchPage
SystemSettingsPage
start
login settings confirm_and_save cancel
profile
confirm_and_save
searchlogin
login_invalid
change_system_settings
Screens/Pages
HomePage
LoginPage SettingsPage
MyProfilePage
SearchPage
SystemSettingsPage
start
login settings confirm_and_save cancel
profile
confirm_and_save
searchlogin
login_invalid
change_system_settings
Screens/Pages
HomePage
LoginPage SettingsPage
MyProfilePage
SearchPage
RestorePasswordPage SystemSettingsPage
start
login settings confirm_and_save cancel
profile
confirm_and_save
searchlogin
login_invalid
restore_password change_system_settings
Код диаграммы покрытия
@startuml
skinparam state {
FontSize 24
ArrowFontSize 18
BackgroundColor<<Uncovered>> #EEEEEE
FontColor<<Uncovered>> #888888
BorderColor<<Uncovered>> #888888
BackgroundColor<<Covered>> LightGreen
BorderColor<<Covered>> Green
BackgroundColor<<Missed>> Orange
BorderColor<<Missed>> Orange
}
[*] --> HomePage<<Covered>> : start
HomePage --> LoginPage<<Covered>> : login
HomePage --> SettingsPage<<Covered>> : settings
HomePage --> MyProfilePage<<Covered>> : profile
HomePage --> SearchPage<<Uncovered>> : search
LoginPage --> RestorePasswordPage<<Missed>> : restore_password
*код диаграммы генерируется во время тестов автоматически!
Transitions
HomePage
LoginPage SettingsPage
MyProfilePage
SearchPage
RestorePasswordPage SystemSettingsPage
start
login settings confirm_and_save cancel
profile
confirm_and_save
searchlogin
login_invalid
restore_password change_system_settingsreset_password
Код диаграммы покрытия
@startuml
...
[*] --> HomePage<<Covered>> : start
HomePage -[#green]-> LoginPage<<Covered>> : <font
color=green>login</font>
HomePage -[#green]-> SettingsPage<<Covered>> : <font
color=green>settings
HomePage -[#green]-> MyProfilePage<<Covered>> : <font
color=green>profile
HomePage -[#grey]-> SearchPage<<Uncovered>> : <font
color=grey>search
LoginPage -[#green]-> MyProfilePage : <font color=green>login
LoginPage -[#grey]-> LoginPage : <font color=grey>login_invalid
LoginPage -[#grey]-> RestorePasswordPage<<Missed>> : <font
color=grey>restore_password
SettingsPage -[#orange]-> RestorePasswordPage<<Missed>> : <font
color=orange>reset_password
...
*код диаграммы генерируется во время тестов автоматически!
Actions
HomePage
LoginPage
input username
input password
sign up
SettingsPage
change option 1
change option 2
MyProfilePage
upload photo
change bio
SearchPage
RestorePasswordPage SystemSettingsPage
start
login settings confirm_and_save cancel
profile
confirm_and_save
searchlogin
login_invalid
restore_password change_system_settingsreset_password
Код диаграммы покрытия
...
LoginPage -[#green]-> MyProfilePage : <font color=green>login
LoginPage -[#grey]-> LoginPage : <font color=grey>login_invalid
LoginPage -[#grey]-> RestorePasswordPage<<Missed>> : <font
color=grey>restore_password
LoginPage : <b>input username</b>
LoginPage : <b>input password</b>
LoginPage : <i>sign up</i>
SettingsPage -[#green]-> HomePage : <font color=green>confirm_and_save
SettingsPage -[#grey]-> HomePage : <font color=grey>cancel
SettingsPage -[#green]-> SystemSettingsPage<<Covered>> : <font
color=green>change_system_settings
SettingsPage -[#orange]-> RestorePasswordPage<<Missed>> : <font
color=orange>reset_password
SettingsPage : <b>change option 1</b>
SettingsPage : <font color=orange><b>change option 2</b></font>
…
MyProfilePage : <i>upload photo</i>
MyProfilePage : <i>change bio</i>
*код диаграммы генерируется во время тестов автоматически!
Привязка к тестам
HomePage
LoginPage
input username {1, 1}
input password {1, 1}
sign up
SettingsPage
change option 1 {1, 1}
change option 2 {1, 1}
MyProfilePage
upload photo
change bio
SearchPage
RestorePasswordPage SystemSettingsPage
start
login {1, 1} settings {3, 2} confirm_and_save {2, 1} cancel
profile {1, 1}
confirm_and_save
searchlogin {1, 1}
login_invalid {0, 0}
restore_password change_system_settings {1, 1}reset_password {1, 1}
Код диаграммы покрытия
…
HomePage -[#green]-> SettingsPage<<Covered>> : <font
color=green>settings {3, 2}
LoginPage -[#green]-> MyProfilePage : <font color=green>login {1, 1}
LoginPage -[#grey]-> LoginPage : <font color=grey>login_invalid {0, 0}
LoginPage : <b>input username {1, 1}</b>
LoginPage : <b>input password {1, 1}</b>
LoginPage : <i>sign up</i>
…
*код диаграммы генерируется во время тестов автоматически!
[Transitions]
Transition: HomePage, SettingsPage, settings
Test: features/SettingsTests/test1.feature:8
Test: features/SettingsTests/test1.feature:19
Transition: LoginPage, MyProfilePage, login
Test: features/LoginTests/test1.feature:8
Transition: LoginPage, LoginPage, login_invalid
[Actions]
Action: LoginPage, input username
Test: features/LoginTests/test1.feature:8
Action: LoginPage, input password
Test: features/LoginTests/test1.feature:8
Про Архитектуру
Единое место переключения текущего экрана/страницы
PageManager.setCurrentPage(pageId)
Объектная модель страниц
aka PageObject
Деление на действия и переходы
action(:input_password)
transition(:login, :MyProfilePage)
1 действие == 1 метод в коде тестов
aka DRY — Don't Repeat Yourself
Возможность понять какое действие было сделано
callback или ActionManager
на крайний случай подойдет и логгирование
Заключение
Всё гениальное — просто!Всё гениальное — просто!
QA
Input author here
Thank you

Weitere ähnliche Inhalte

Was ist angesagt?

Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
Igor Khrol
 
Автоматизация и Selenium IDE
Автоматизация и Selenium IDEАвтоматизация и Selenium IDE
Автоматизация и Selenium IDE
ISsoft
 
автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Selenium
vyacheslavmaslov
 
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестированияCodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest
 

Was ist angesagt? (20)

Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST API
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
Grail - CodeFest'2015
Grail - CodeFest'2015Grail - CodeFest'2015
Grail - CodeFest'2015
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
 
Автоматизация и Selenium IDE
Автоматизация и Selenium IDEАвтоматизация и Selenium IDE
Автоматизация и Selenium IDE
 
Тестирование REST-сервисов с применением инженерных практик
Тестирование REST-сервисов с применением инженерных практикТестирование REST-сервисов с применением инженерных практик
Тестирование REST-сервисов с применением инженерных практик
 
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
 
автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Selenium
 
GUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioGUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test Studio
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehave
 
Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформы
 
Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demand
 
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникПодводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 
Как играть без игрока
Как играть без игрокаКак играть без игрока
Как играть без игрока
 
Автоматизация тестирования: доступна каждому или удел избранных?
Автоматизация тестирования: доступна каждому или удел избранных?Автоматизация тестирования: доступна каждому или удел избранных?
Автоматизация тестирования: доступна каждому или удел избранных?
 
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестированияCodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
 
The fast and the continuous
The fast and the continuousThe fast and the continuous
The fast and the continuous
 

Ähnlich wie Визуализация покрытия автоматизированными UI тестами

Application deployment & configuration management
Application deployment & configuration managementApplication deployment & configuration management
Application deployment & configuration management
Alexander Kirillov
 
QA Fest 2018. Анастасия Асеева. Shift-Left Testing
QA Fest 2018. Анастасия Асеева. Shift-Left TestingQA Fest 2018. Анастасия Асеева. Shift-Left Testing
QA Fest 2018. Анастасия Асеева. Shift-Left Testing
QAFest
 
Леонид Динерштейн - Разработка программ через тестирование поведения средства...
Леонид Динерштейн - Разработка программ через тестирование поведения средства...Леонид Динерштейн - Разработка программ через тестирование поведения средства...
Леонид Динерштейн - Разработка программ через тестирование поведения средства...
SQALab
 
SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#
SECON
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016
Кирилл Толкачёв
 
как инженерные практики помогают экономить бизнесу
как инженерные практики помогают экономить бизнесукак инженерные практики помогают экономить бизнесу
как инженерные практики помогают экономить бизнесу
Andrey Rebrov
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
Alexander Makarov
 
ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!
ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!
ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!
SPB SQA Group
 

Ähnlich wie Визуализация покрытия автоматизированными UI тестами (20)

Application deployment & configuration management
Application deployment & configuration managementApplication deployment & configuration management
Application deployment & configuration management
 
QA Fest 2018. Анастасия Асеева. Shift-Left Testing
QA Fest 2018. Анастасия Асеева. Shift-Left TestingQA Fest 2018. Анастасия Асеева. Shift-Left Testing
QA Fest 2018. Анастасия Асеева. Shift-Left Testing
 
Леонид Динерштейн - Разработка программ через тестирование поведения средства...
Леонид Динерштейн - Разработка программ через тестирование поведения средства...Леонид Динерштейн - Разработка программ через тестирование поведения средства...
Леонид Динерштейн - Разработка программ через тестирование поведения средства...
 
"Портирование Web SDK с JS на TS" Петров Григорий, Voximplant
"Портирование Web SDK с JS на TS" Петров Григорий, Voximplant"Портирование Web SDK с JS на TS" Петров Григорий, Voximplant
"Портирование Web SDK с JS на TS" Петров Григорий, Voximplant
 
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyЧитабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#
 
Андрей Кирпичев "Гибкая модульность инструментами АОП"
Андрей Кирпичев  "Гибкая модульность инструментами АОП"Андрей Кирпичев  "Гибкая модульность инструментами АОП"
Андрей Кирпичев "Гибкая модульность инструментами АОП"
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016
 
Вадим Макишвили "Вёрстка в IntelliJIDEA"
Вадим Макишвили "Вёрстка в IntelliJIDEA"Вадим Макишвили "Вёрстка в IntelliJIDEA"
Вадим Макишвили "Вёрстка в IntelliJIDEA"
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
 
Telerik Web aii
Telerik Web aiiTelerik Web aii
Telerik Web aii
 
Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"
 
как инженерные практики помогают экономить бизнесу
как инженерные практики помогают экономить бизнесукак инженерные практики помогают экономить бизнесу
как инженерные практики помогают экономить бизнесу
 
Kuznetcov
KuznetcovKuznetcov
Kuznetcov
 
MagicPlot @ UXSPb @ IT Global Meetup #7
MagicPlot @ UXSPb @ IT Global Meetup #7MagicPlot @ UXSPb @ IT Global Meetup #7
MagicPlot @ UXSPb @ IT Global Meetup #7
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
 
ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!
ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!
ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!
 

Mehr von SQALab

Mehr von SQALab (20)

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировку
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщика
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержки
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testing
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нужен
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихии
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советов
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестов
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIs
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджменте
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестирование
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектов
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных систем
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопрос
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
 

Визуализация покрытия автоматизированными UI тестами

  • 1. Scalable eCommerce Platform Solutions Визуализация покрытия автоматизированными UI тестами Лянгузов Алексей
  • 2. План @startuml skinparam sequence{ ArrowColor #528526 LifeLineBorderColor #528526 ActorBorderColor #528526 ActorBackgroundColor #AAFFAA ParticipantBorderColor #528526 ParticipantBackgroundColor white ParticipantFontSize 18 ParticipantFontName Serif BoxBorderColor #528526 BoxFontSize 18 } actor " " as U box "Введение" #DDFFDD participant "ПроnПокрытие" as P1 participant "ПроnМодели" as P2 end box box "Основная часть" #BBFFBB participant "ПроnPlantUML" as P3 participant "ПроnUI покрытие" as P4 participant "ПроnАрхитектуру" as P5 end box U -> P1 activate P1 P1 --> U P1 -> P2 activate P2 P2 --> U P2 -> P3 activate P3 P3 --> U P3 -> P4 activate P4 P4 --> U P4 -> P5 activate P5 P5 --> U destroy P1 destroy P2 destroy P3 destroy P4 destroy P5 @enduml * Спасибо интернету за картинки, а особенно сайту openclipart.org Все права принадлежат авторам изображений
  • 3. Про покрытие ISTQB: http://stqbexamcertification.com/what-is-test-coverage-in-software-testing-its-advantages-and-disadvantages/ Тестовое покрытие — мера тестирования, присущая определенному тестовому набору.
  • 4. Про покрытие Coverage = Number of exercised items Total number of items x 100 % ISTQ B ISTQB: http://stqbexamcertification.com/what-is-test-coverage-in-software-testing-its-advantages-and-disadvantages/ Тестовое покрытие — мера тестирования, присущая определенному тестовому набору.
  • 5. Про покрытие Coverage = Number of exercised items Total number of items x 100 % ISTQ B ISTQB: http://stqbexamcertification.com/what-is-test-coverage-in-software-testing-its-advantages-and-disadvantages/ Тестовое покрытие — мера тестирования, присущая определенному тестовому набору. При подсчете покрытия недостаточно довольствоваться одним аспектом. Надо смотреть на тестируемый объект в разных измерениях (dimensions).
  • 6. Зачем покрытие Показывает места где нет тестирования
  • 7. Зачем покрытие Показывает места где нет тестирования Даёт идеи для новых тестовых сценариев / тестовых данных
  • 8. Зачем покрытие Показывает места где нет тестирования Даёт идеи для новых тестовых сценариев / тестовых данных Помогает сбалансировать тесты и тестовые наборы
  • 9. Спор Send У вас 200 тестов, а у нас 2,000 Ха! У вас 2,000 кейсов, у нас 4,000 Ха-ха! У вас 4,000 проверок, а у нас 20,000. Съел? Ха-ха-ха! У вас 4,000 уникальных проверок и у нас 4,000 уникальных. У нас 100% эффективность! Зато у вас 20 человек их писало, а у нас 5. EditYet Another QA Lead
  • 10. Спор Send У вас 200 тестов, а у нас 2,000 Ха! У вас 2,000 кейсов, у нас 4,000 Ха-ха! У вас 4,000 проверок, а у нас 20,000. Съел? Ха-ха-ха! У вас 4,000 уникальных проверок и у нас 4,000 уникальных. У нас 100% эффективность! Зато у вас 20 человек их писало, а у нас 5. Ладно, ты победил — ты на 200 грамм тяжелее EditYet Another QA Lead
  • 11. Зачем покрытие Показывает места где нет тестирования Даёт идеи для новых тестовых сценариев / тестовых данных Помогает сбалансировать тесты и тестовые наборы Оценивает качество самих автотестов и меру их надёжности
  • 12. Зачем покрытие Показывает места где нет тестирования Даёт идеи для новых тестовых сценариев / тестовых данных Помогает сбалансировать тесты и тестовые наборы Оценивает качество самих автотестов и меру их надёжности Отражает скорость написания тестов и помогает в планировании работ
  • 13. @story-1 Scenario: As a user I want .. Given I am ... When I do … Then I see ... @story-126 Scenario: As a user I want .. Given I am ... When I do … Then I see ... Про наше покрытие User Story 1 AC#1 ... AC#N ... User Story 126 AC#1 ... AC#N @story-1 @story-126 Scenario: As a user I want .. Given I am ... When I do … Then I see ...
  • 14. Про модели Модель - это система, исследование которой служит средством для получения информации о другой системе, являясь её упрощённым представлением
  • 15. Про модели Модель - это система, исследование которой служит средством для получения информации о другой системе, являясь её упрощённым представлением
  • 18. Про проблемы моделей Подвержены частым изменениям Сложны для восприятия или внесения изменений Быстро и заметно стареют
  • 19. Про проблемы моделей Подвержены частым изменениям Быстро и заметно стареют Сложны для восприятия или внесения изменений С «другой планеты» - делаются в сторонних дорогих инструментах
  • 20. Чтобы модели работали Надо постоянно проверять их валидность
  • 21. Чтобы модели работали Надо постоянно проверять их валидность (постоянно == автоматически) Т. е. они должны быть легки для понимания машинами
  • 22. Чтобы модели работали Надо постоянно проверять их валидность (постоянно == автоматически) Т. е. они должны быть легки для понимания машинами Они должны быть легки для понимания людьми
  • 23. Чтобы модели работали Надо постоянно проверять их валидность (постоянно == автоматически) Т. е. они должны быть легки для понимания машинами Они должны быть легки для понимания людьми Они должны быть легки для быстрого внесения изменений
  • 24. Чтобы модели работали Надо постоянно проверять их валидность (постоянно == автоматически) Т. е. они должны быть легки для понимания машинами Они должны быть легки для понимания людьми Они должны быть легки для быстрого внесения изменений DSLDSL EngineEngine VisualizationVisualization
  • 25. Про PlantUML PlantUML решает! PlantUML diagramming language PlantUML Graphviz SVG, PNG, EPS diagram file EngineEngineDSLDSL VisualizationVisualization http://plantuml.sourceforge.net/index.html
  • 26. Про PlantUML EngineEngineDSLDSL VisualizationVisualization Простой язык создания диаграмм Легко читать, писать и генерировать в автоматическом режиме Отслеживание изменений Например в системе контроля версий или IDE Поддержка языков разметки HTML, wiki-like Стили элементов и связей skinparam — что-то на подобии лёгкого CSS — цвета и классы С-lang style preprocessing !include(file.puml), !define(set_of_objects), !ifdef(something) Поддержка встроенных изображений <img filename.jpg>, спрайты и openiconic
  • 27. Про PlantUML Main Admin Use the application User Start Some note This note is connected to several objects. @startuml scale 1.2 :Main Admin: as Admin (Use the application) as (Use) User -> (Start) User --> (Use) Admin ---> (Use) note right of (Use) : Some note note "This note is connectednto several objects." as N2 (Start) .. N2 N2 .. (Use) @enduml EngineEngineDSLDSL VisualizationVisualization
  • 28. VSDX file format / OMG! Взято тут
  • 29. Про PlantUML EngineEngineDSLDSL VisualizationVisualization Интеграция с IDE NetBeans, Eclipse, IntelliJ Idea etc Интеграция с Wiki движками MediaWiki, Confluence, DokuWiki, Redmine, Trac etc Online diagramming plantuml.com, Google Docs etc Запуск из командной строки или как GUI-приложение java -jar plantuml.jar -help ИЛИ java -jar plantuml.jar -gui Интеграция с языками программирования и инструментами python, JS, ant, gradle etc Работа в разных редакторах vim, emacs, word, ОО etc
  • 30. Про JetBrains Plugin Link: https://github.com/esteinberg/plantuml4idea EngineEngineDSLDSL VisualizationVisualization
  • 31. Про PlantUML VisualizationVisualizationDSLDSL EngineEngine 7 основных UML диаграмм State, Activity, UseCase, Class, Object, Component, Sequence Различные форматы картинок Растровый(PNG), векторный(SVG), PS, LaTeX Обычные диаграммы и графики Используется библиотека jcckit.sourceforge.net Встраивание в сгенерённую документацию JavaDoc, Sphinx, Doxygen etc Необычные не-диаграммы ASCII диаграммы, GUI-прототипирование, XEarth Модель в XMI-формате для обмена с другими UML тулами Печально, но XMI у всех свой, уж поверьте
  • 32. PlantUML мало? Кросс-платформенный Работает там, где работает Java и Graphviz С открытым исходным кодом http://sourceforge.net/projects/plantuml/ Бесплатный по лицензии GPL Не нравится GPL? Есть LGPL, Apache, Eclipse и даже MIT версии Активно развивается Не менее 1-го релиза в месяц Маленький На данный момент plantuml.jar занимает 2.5Mb Умеет генерить судоку Killer feature! VisualizationVisualizationDSLDSL EngineEngine
  • 33. @story-1 Scenario: As a user I want .. Given I am ... When I do … Then I see ... @story-126 Scenario: As a user I want .. Given I am ... When I do … Then I see ... Про наше покрытие User Story 1 AC#1 ... AC#N ... User Story 126 AC#1 ... AC#N @story-1 @story-126 Scenario: As a user I want .. Given I am ... When I do … Then I see ...
  • 34. Про UI покрытие Нам нужна модель!
  • 35. Код диаграммы @startuml skinparam state { BackgroundColor<<Uncovered>> #DDDDDD BackgroundColor<<System>> lightblue FontSize 24 ArrowFontSize 18 } [*] --> HomePage : start HomePage --> LoginPage : login HomePage --> SettingsPage : settings HomePage --> MyProfilePage : profile HomePage --> SearchPage<<Uncovered>> : search LoginPage --> MyProfilePage : login LoginPage --> LoginPage : login_invalid SettingsPage --> HomePage : confirm_and_save SettingsPage --> SystemSettingsPage<<System>> : change_system_settings MyProfilePage -> HomePage : confirm_and_save @enduml
  • 36. Про UI покрытие HomePage LoginPage SettingsPage MyProfilePage SearchPage SystemSettingsPage start login settings confirm_and_save cancel profile confirm_and_save searchlogin login_invalid change_system_settings
  • 37. Screens/Pages HomePage LoginPage SettingsPage MyProfilePage SearchPage SystemSettingsPage start login settings confirm_and_save cancel profile confirm_and_save searchlogin login_invalid change_system_settings
  • 38. Screens/Pages HomePage LoginPage SettingsPage MyProfilePage SearchPage RestorePasswordPage SystemSettingsPage start login settings confirm_and_save cancel profile confirm_and_save searchlogin login_invalid restore_password change_system_settings
  • 39. Код диаграммы покрытия @startuml skinparam state { FontSize 24 ArrowFontSize 18 BackgroundColor<<Uncovered>> #EEEEEE FontColor<<Uncovered>> #888888 BorderColor<<Uncovered>> #888888 BackgroundColor<<Covered>> LightGreen BorderColor<<Covered>> Green BackgroundColor<<Missed>> Orange BorderColor<<Missed>> Orange } [*] --> HomePage<<Covered>> : start HomePage --> LoginPage<<Covered>> : login HomePage --> SettingsPage<<Covered>> : settings HomePage --> MyProfilePage<<Covered>> : profile HomePage --> SearchPage<<Uncovered>> : search LoginPage --> RestorePasswordPage<<Missed>> : restore_password *код диаграммы генерируется во время тестов автоматически!
  • 40. Transitions HomePage LoginPage SettingsPage MyProfilePage SearchPage RestorePasswordPage SystemSettingsPage start login settings confirm_and_save cancel profile confirm_and_save searchlogin login_invalid restore_password change_system_settingsreset_password
  • 41. Код диаграммы покрытия @startuml ... [*] --> HomePage<<Covered>> : start HomePage -[#green]-> LoginPage<<Covered>> : <font color=green>login</font> HomePage -[#green]-> SettingsPage<<Covered>> : <font color=green>settings HomePage -[#green]-> MyProfilePage<<Covered>> : <font color=green>profile HomePage -[#grey]-> SearchPage<<Uncovered>> : <font color=grey>search LoginPage -[#green]-> MyProfilePage : <font color=green>login LoginPage -[#grey]-> LoginPage : <font color=grey>login_invalid LoginPage -[#grey]-> RestorePasswordPage<<Missed>> : <font color=grey>restore_password SettingsPage -[#orange]-> RestorePasswordPage<<Missed>> : <font color=orange>reset_password ... *код диаграммы генерируется во время тестов автоматически!
  • 42. Actions HomePage LoginPage input username input password sign up SettingsPage change option 1 change option 2 MyProfilePage upload photo change bio SearchPage RestorePasswordPage SystemSettingsPage start login settings confirm_and_save cancel profile confirm_and_save searchlogin login_invalid restore_password change_system_settingsreset_password
  • 43. Код диаграммы покрытия ... LoginPage -[#green]-> MyProfilePage : <font color=green>login LoginPage -[#grey]-> LoginPage : <font color=grey>login_invalid LoginPage -[#grey]-> RestorePasswordPage<<Missed>> : <font color=grey>restore_password LoginPage : <b>input username</b> LoginPage : <b>input password</b> LoginPage : <i>sign up</i> SettingsPage -[#green]-> HomePage : <font color=green>confirm_and_save SettingsPage -[#grey]-> HomePage : <font color=grey>cancel SettingsPage -[#green]-> SystemSettingsPage<<Covered>> : <font color=green>change_system_settings SettingsPage -[#orange]-> RestorePasswordPage<<Missed>> : <font color=orange>reset_password SettingsPage : <b>change option 1</b> SettingsPage : <font color=orange><b>change option 2</b></font> … MyProfilePage : <i>upload photo</i> MyProfilePage : <i>change bio</i> *код диаграммы генерируется во время тестов автоматически!
  • 44. Привязка к тестам HomePage LoginPage input username {1, 1} input password {1, 1} sign up SettingsPage change option 1 {1, 1} change option 2 {1, 1} MyProfilePage upload photo change bio SearchPage RestorePasswordPage SystemSettingsPage start login {1, 1} settings {3, 2} confirm_and_save {2, 1} cancel profile {1, 1} confirm_and_save searchlogin {1, 1} login_invalid {0, 0} restore_password change_system_settings {1, 1}reset_password {1, 1}
  • 45. Код диаграммы покрытия … HomePage -[#green]-> SettingsPage<<Covered>> : <font color=green>settings {3, 2} LoginPage -[#green]-> MyProfilePage : <font color=green>login {1, 1} LoginPage -[#grey]-> LoginPage : <font color=grey>login_invalid {0, 0} LoginPage : <b>input username {1, 1}</b> LoginPage : <b>input password {1, 1}</b> LoginPage : <i>sign up</i> … *код диаграммы генерируется во время тестов автоматически! [Transitions] Transition: HomePage, SettingsPage, settings Test: features/SettingsTests/test1.feature:8 Test: features/SettingsTests/test1.feature:19 Transition: LoginPage, MyProfilePage, login Test: features/LoginTests/test1.feature:8 Transition: LoginPage, LoginPage, login_invalid [Actions] Action: LoginPage, input username Test: features/LoginTests/test1.feature:8 Action: LoginPage, input password Test: features/LoginTests/test1.feature:8
  • 46. Про Архитектуру Единое место переключения текущего экрана/страницы PageManager.setCurrentPage(pageId) Объектная модель страниц aka PageObject Деление на действия и переходы action(:input_password) transition(:login, :MyProfilePage) 1 действие == 1 метод в коде тестов aka DRY — Don't Repeat Yourself Возможность понять какое действие было сделано callback или ActionManager на крайний случай подойдет и логгирование
  • 47. Заключение Всё гениальное — просто!Всё гениальное — просто!