Upload
tfmailru
View
5.097
Download
2
Embed Size (px)
Citation preview
Автоматизированное
тестирование
Rich Web Client
Юнит-тестирование
• Чем плохи безбраузерные тесты? • Синхронные и асинхронные тесты• Что использовать?
jsTestDriver
Cтартуем сервер
Цепляем браузеры
Запускаем тесты
Как выглядит тест?
{ setUp: function () { // ... }, testSomething: function () { // ... }, tearDown: function () { // ... }}
Дополнительно
• Sinon.JS • js-build-tools
Sinon.JS
setUp: function () { // use fake XHR },testSomeXHR: function () { var id = null; var req = new XHR(...) .send(function (r) { id = r.id; }); // respond to request assertEquals(1, id); },tearDown: function () { // restore XHR }
js-build-tools
core.RAW.js
var app = null;
function registerApplication(aApp) { if (app) throw 'Только одно приложение!'; app = aApp;} // #ifdef testmode function unregisterCurrentApplication() { app = null;} // #endif
core.js
var app = null;
function registerApplication(aApp) { if (app) throw 'Только одно приложение!'; app = aApp;}
core.TEST.js
var app = null;
function registerApplication(aApp) { if (app) throw 'Только одно приложение!'; app = aApp;} function unregisterCurrentApplication() { app = null;}
Этого хватит?
Selenium 2
Selenium Core
Selenium Core
Java, Ruby, Python, Perl, PHP or .NET
Selenium 2
Selenium Core
Selenium Core
Java, Ruby, Python, Perl, PHP or .NET
Remote Control
Очень медленно
Grid2
Grid2
Grid2
PageObjects
public class LoginPage { ... public void loginAs(String login, String pwd) { // 1. находим инпут с логином // 2. заполняем его // 3. находим инпут с паролем // 4. заполняем его // 3. submit } ...}
PageObjects + PageFactory
public class LoginPage { @FindBy(name = "login") private WebElement loginEl; @FindBy(name = "pwd") private WebElement pwdEl; ... public void loginAs(String login, String password) { // 1. заполняем инпут с логином // 2. заполняем инпут с паролем // 3. submit } ...}
LoadableComponent
webagent.goOnline(Status.AWAY) .getContactList() .open() .findContact("Vasya Pupkin");
Когда запускаем тесты
• После завершения фичи• После подготовки prerelease• После раскладки на боевые• По времени