Технологии тестирования Rich Web client, Андрей Плешков,...

Preview:

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• После раскладки на боевые• По времени

Андрей ПлешковВедущий разработчик, «Мой Мир»

a.pleshkov@corp.mail.ru

СПАСИБО!

Recommended