28
EPAM JDI UI TEST AUTOMATION FRAMEWORK QA Conference March 2016

SECON'2016. Иовлев Роман, JDI is UI Automation Future

  • Upload
    secon

  • View
    312

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SECON'2016. Иовлев Роман, JDI is UI Automation Future

EPAM JDI UI TEST AUTOMATION FRAMEWORK

QA Conference

March 2016

Page 2: SECON'2016. Иовлев Роман, JDI is UI Automation Future

Chief QA AutomationРаботал руководителем отдела

тестированияБолее 11 лет в тестировании из них 9 в

автоматизации

Роман Иовлев

Page 3: SECON'2016. Иовлев Роман, JDI is UI Automation Future

•Новый проект (сверху)

•Новый проект (снизу)

•Долгий проект без автоматизации

Автоматизация

Page 4: SECON'2016. Иовлев Роман, JDI is UI Automation Future

UI Автоматизация

Виды тестирования Виды UI тестирования

UI Web

Roman Iovlev
Page 5: SECON'2016. Иовлев Роман, JDI is UI Automation Future

Just Develop It together

Page 6: SECON'2016. Иовлев Роман, JDI is UI Automation Future

UI OBJECTS

Page 7: SECON'2016. Иовлев Роман, JDI is UI Automation Future

Шаблон UI Objects

• UI Objects (Epam)

• Пользовательские типизированные элементы для UI (Web, Mobile, Desktop…)• Реализованные Page Objects (Page, Form, Search, Pagination, Login и т.д..)

• HTML Elements (Yandex)

• Пользовательские типизированные элементы (Button, Label, Table…) для Web

• Page Objects (Selenium)

• Список WebElement-ов (тегов в Html)• Действия с WebElement-ами

Page 8: SECON'2016. Иовлев Роман, JDI is UI Automation Future

@Test public void menuTest() { menu.select("Man"); sizes.check("M", "L"); searchButton.click(); Assert.areEquals(results.rows().count(), 4); Assert.isNotEmpty(results.row("Best Jacket", column("Title"))); }

Пример теста

Page 9: SECON'2016. Иовлев Роман, JDI is UI Automation Future

@JPage(url = "http://www.epam.com")public class BuyPage extends WebPage { @FindBy(css = “.menu") public Menu menu; @FindBy(xpath = “//[@class=‘sizes’]") public CheckList sizes; @FindBy(id = “button") public Button searchButton; @FindBy(css = “.table") public Table results;

}

Пример UI Object

WebPageMenuCheckListButtonTable

Page 10: SECON'2016. Иовлев Роман, JDI is UI Automation Future

@Test public void menuTest() { selectInMenu("Man"); checkSizes("M", "L");

clickOnSearchButton(); Assert.areEquals(getResultRowsCount(), 4); Assert.isEmpty(!getRowFromResults("Best Jacket", "Title")); }

А как это выглядит на Selenium?

Page 11: SECON'2016. Иовлев Роман, JDI is UI Automation Future

@FindBy(css = "") private List<WebElement> menuElements; @FindBy(css = "") private WebElement menuIsSelected;

@FindBy(css = "") private List<WebElement> sizesElements; @FindBy(css = "") private WebElement sizesIsChecked; @FindBy(css = "") private List<WebElement> sizesLabels;

@FindBy(css = "") private WebElement searchButton;

@FindBy(css = "") private List<WebElement> resultsColHeaders; @FindBy(css = "") private List<WebElement> resultsRowsHeaders; @FindBy(css = "") private List<WebElement> resultsCellsHeaders; @FindBy(css = "") private List<WebElement> resultsColumn; @FindBy(css = "") private List<WebElement> resultsRow;

…}

А как это выглядит на Selenium?

…public void selectInMenu(string name) { … }

public void checkSizes(string… sizes) { … }public void clickOnSearchButton() { … }public int getResultRowsCount () { … }public Map<string, string> getRowFromResults(string expectedValue, string

colName) { … }…public int getResultsCount() { … }public boolean isResultPresent(String name) { … }public WebElement getSomeAttributeForResult(String

name) { … }…public List<WebElement> findAllResultsMatch(String name)

{ … }

}

protected WebDriver driver;public JacketPage(WebDriver driver) {

this.driver = driver}

public class JacketPage {

Page 12: SECON'2016. Иовлев Роман, JDI is UI Automation Future

Web, Mobile, Desktop…

C# .Net

Java

JDI.UITestFramework

Web-Selenium<dependency> <groupId>com.epam.jdi</groupId> <artifactId>jdi-uitest-web</artifactId> <version>1.0.2-SNAPSHOT </version></dependency>

Desktop-Sikuli<dependency> <groupId>com.epam.jdi</groupId> <artifactId>jdi-uitest-gui</artifactId> <version>1.0.2-SNAPSHOT </version></dependency>

Mobile-Appium<dependency> <groupId>com.epam.jdi</groupId> <artifactId>jdi-uitest-mobile</artifactId> <version>1.0.2-SNAPSHOT </version></dependency>

Page 13: SECON'2016. Иовлев Роман, JDI is UI Automation Future

@JSite(domain = "https://www.epam.com")public class EpamSite extends WebSite {

@JPage(url = "/")public static HomePage homePage;@JPage(url = "/careers", title = "Careers") public static CareerPage careerPage;

@JPage(url = "/careers/job-listings", title = "Job Listings", urlCheckType = CONTAIN, titleCheckType = CONTAIN)

public static JobPage jobPage;...

}

Сайт и страницы

Epam siteHome page• Navigation Menu : IMenu• Search : ISearch• Footer : Footer

• About : Ilink• Contacts: IText

Career page• JobFilter

• Keywords• Category• City

Job page• …WebSite.init(EpamSite.class);WebSite.init(EpamSite.class);

Page 14: SECON'2016. Иовлев Роман, JDI is UI Automation Future

@JPage(url = "http://www.epam.com")public class BuyPage extends WebPage { @FindBy(css = “.menu") public Menu menu; @FindBy(xpath = “//[@class=‘sizes’]") public CheckList sizes; @FindBy(id = “button") public Button searchButton; @FindBy(css = “.table") public Table results; @Frame(css = “.store") public Store store;

}

Пример UI Object

Page 15: SECON'2016. Иовлев Роман, JDI is UI Automation Future

public class AddCVForm extends Form<Attendee> { @FindBy(css = “.first-name“) private ITextField name;@FindBy(css = “.last-name“) private ITextField lastName;@FindBy(css = “.email“) private ITextField email;@FindBy(css = “.file-upload“) private RFileInput cv;@FindBy(css = “.comment-input“) private ITextArea comment;

@FindBy(xpath = “//*[.='Submit']“) private IButton submit;@FindBy(xpath = “//*[.='Cancel']“) private IButton cancel;

}

Формы

Page 16: SECON'2016. Иовлев Роман, JDI is UI Automation Future

@Test(dataProvider = “attendees”) public void menuTest(Attendee attendee) {

searchFilter.fill(attendee); checkSuggestionsContains(attendee); searchFilter.search(attendee); assertEquals(results.rows().count(), 1); results.row(attendee.name, column(“Name”))

addCVForm.submit(attendee.cv); checkCVInDB(attendee.cv);

previewForm.verify(attendee);}

EDT (Entities driven testing)

loginForm.login(user); purchase.cancel(wear); experiment.publish(experiment); creditForm.save(order.data);

public class User { public String name; public String password; public User(String name, String password) { this.name = name; this.password = password; }}

Page 17: SECON'2016. Иовлев Роман, JDI is UI Automation Future

• JDI – фреймворк реализующий подход UI Objects

• Большое количество элементов (более 30) включая сложные (с 10-ками действий)

• Иерархическая инициализация UI Objects• Умеет работать с Фреймами• Поддерживает EDT

UI Objects

Page 18: SECON'2016. Иовлев Роман, JDI is UI Automation Future

ИНТЕГРАЦИЯКАСТОМИЗАЦИЯСТАБИЛИЗАЦИЯ

Page 19: SECON'2016. Иовлев Роман, JDI is UI Automation Future

“Easy things should be easy, and hard things should be possible” Larry Wall (c)

Концепция

Page 20: SECON'2016. Иовлев Роман, JDI is UI Automation Future

Модульная структура

Page 21: SECON'2016. Иовлев Роман, JDI is UI Automation Future

Наши друзья

Page 22: SECON'2016. Иовлев Роман, JDI is UI Automation Future

Кастомизация

Конкретное действие

Новый тип элемента

Все действия всех элементов

Page 23: SECON'2016. Иовлев Роман, JDI is UI Automation Future

Стабилизация

Page 24: SECON'2016. Иовлев Роман, JDI is UI Automation Future

Уменьшить затрат (время/деньги) на написание тестов в целом и создание модели сайта в частности в разы (если не на порядки)*

Уменьшение затрат на поддержку тестовЧитабельность тестов (UI Objects)

Уменьшение времени поиска баговЧитабельность тестов (UI Objects)ЛогированиеРепортинг

PROFIT!!!

* Объектная модель экономия до 80% времени Написание тестов около 50% времени Затраты на поддержку тестов экономия до 70% Поиск багов экономия 30-50%

Page 25: SECON'2016. Иовлев Роман, JDI is UI Automation Future

Уменьшение числа false-positive/negativeСтабилизацияЧитабельность тестов (UI Objects)

Любой UI (Web, Mobile, Desktop)

Поддержка Java и C#

Удовольствие от автоматизации

PROFIT!!!

Page 26: SECON'2016. Иовлев Роман, JDI is UI Automation Future

Планы

No effort performance testing

Tests execution statistic

UI view testing module

Web plugin for fast PageObjects recording

Page 27: SECON'2016. Иовлев Роман, JDI is UI Automation Future

Ожидания

Page 28: SECON'2016. Иовлев Роман, JDI is UI Automation Future

Вопросы?

https://jdi.epam.com

https://github.com/epam/JDI

https://vk.com/jdi_framework

roman.Iovlev

[email protected]