22

Как и зачем мы тестируем UI

Embed Size (px)

DESCRIPTION

В презентации на примере конкретного веб-приложения освещается тема автоматизированного тестирования и важность таких тестов в контексте Continuous Integration/Delivery. Рассмотрены азы работы с Selenium WebDriver'ом, область применения этого инструмента и простые примеры использования. Презентация подготовлена по материалам прошедшего 19.11.2013 витебского митапа (http://meetup.gorodvitebsk.by).

Citation preview

Page 1: Как и зачем мы тестируем UI
Page 2: Как и зачем мы тестируем UI

vlialkin

Presented by Вячеслав Лялькин

Page 3: Как и зачем мы тестируем UI

• Что

• Зачем

• Автотесты

• WebDriver HOWTO

• Контекст использования

Agenda

Page 4: Как и зачем мы тестируем UI

Что тестировать?

Page 5: Как и зачем мы тестируем UI

• Web-приложение

• jQuery

• Backbone.js

• Underscore.js

• jqGrid/DataTables

• Bootstrap 2

• Freemarker

Что тестировать?

Page 6: Как и зачем мы тестируем UI

Зачем тестировать?

• Спокойствие заказчика

• Continuous Integration/Delivery

• Нет тестировщиков

Page 7: Как и зачем мы тестируем UI

Selenium

Page 8: Как и зачем мы тестируем UI

Автотесты

• Что это такое?

• Test Automation Engineer

• Проблемы автоматизированных тестов

Page 9: Как и зачем мы тестируем UI

Selenium

Selenium IDE

Selenium Remote Control

Selenium Grid

Selenium WebDriver

Page 10: Как и зачем мы тестируем UI

Selenium WebDriver

<dependency>

<groupId>org.seleniumhq.selenium</groupId>

<artifactId>selenium-java</artifactId>

<version>2.35.0</version>

<scope>test</scope>

</dependency>

WebDriver driver = new FirefoxDriver();

// FirefoxDriver, ChromeDriver, SafariDriver,

// InternetExplorerDriver, AndroidDriver, IPhoneDriver

Page 11: Как и зачем мы тестируем UI

Selenium WebDriver

• Google Chrome 12+

• Internet Explorer 6, 7, 8, 9

• Firefox 3.6+

• Safari 5+

• Opera 8+

• Android 2.3+ (устройства и эмуляторы)

• iOS 3.2+ (устройства и эмуляторы)

Page 12: Как и зачем мы тестируем UI

Как искать элементы?

• IDBy.id("items_table_id");

• Class NameBy.className("popover");

• Tag NameBy.tagName(rowId == 0 ? "th" : "td");

• NameBy.name("Viachaslau Lialkin");

Page 13: Как и зачем мы тестируем UI

Как искать элементы?

• Link text/partial link textBy.linkTest("orders-list");

• CSSBy.cssSelector("tr.checked");

• XpathBy.xpath("//span[contains(@class,'item')"

+ "and text()='Test product']");

• JavaScriptWebElement element =

(WebElement) ((JavascriptExecutor) driver)

.executeScript("return $('#orders tr.checked')[0]");

Page 14: Как и зачем мы тестируем UI

XPath

• Что это такое?

• Зачем?

• Как?

• Примеры xpath-выражений//span[@class='error']

//div[@class='modal-body']//*[text()='I am button']

//table[@id='items_id']/tbody/tr[1]/td[4]/a[text()='I am cell']

//div[@id='faceted_section']//span

[contains(@class,'accordion') and text()='I am span']

Page 15: Как и зачем мы тестируем UI

Какие возможности?

• Переключение между окнами

• Всплывающие диалоги

• Полноценная навигация

• Работа с cookies

• Замена User Agent (для FirefoxDriver)

• Drag And Drop

Page 16: Как и зачем мы тестируем UI

Действия с элементами

getText

getAttribute

getCssValue

getTagName

findElement

isDisplayed

isEnabled

isSelected

clear

click

sendKeys

submit

Класс org.openqa.selenium.WebElement

Page 17: Как и зачем мы тестируем UI

Что может пойти не так?

NoSuchElementException

NoAlertPresentException

ElementNotVisibleException

TimeoutException

Класс org.openqa.selenium.WebDriverException

Page 18: Как и зачем мы тестируем UI

Контекст использования

Page 19: Как и зачем мы тестируем UI

• Fast build

• Automated builds

• Automated deployment

• Self-testing builds

• Clone of the production environment

Continuous Integration

Page 20: Как и зачем мы тестируем UI

• Continuous Delivery

• Pipeline

• Smoke/Full tests

• Dark launch

• QA1, QA2, PROD1..PROD9

Continuous Delivery

Page 21: Как и зачем мы тестируем UI

CD pipeline

Page 22: Как и зачем мы тестируем UI