Scalable eCommerce Platform Solutions
Автоматизатор, копай
глубже, копай шире!
IT Global MeetUp
Saint-Petersburg,
23 July, 2016
Scalable eCommerce Platform Solutions
О выступающих
Работаем тестировщиками-автоматизаторами в компании Grid
Dynamics
Используем в основном Java для back-end тестов и JavaScript для
front-end
Илья Коробицын
talks@korobochka.org
Всеволод Брекелов
vsevolod.brekelov@gmail.com
Scalable eCommerce Platform Solutions
• Философски-мотивационная речь о пользе знаний
• Глубже: чем лучше вы знаете используемые инструменты,
тем эффективней получится их использовать
• Шире: знания вещей, не относящихся напрямую к вашей
работе, могут пригодиться или натолкнуть на новые мысли
“Вещи” здесь это не только инструменты, но и подходы и общая
философия
Вступление
Scalable eCommerce Platform Solutions
Аналитики пишут требования в специальной форме “историй”:
Who, Why, What for
Given -> When -> Then
Тестировщики пишут обвязку, которая интерпретирует
требования и проверяет их автоматически
BDD
Scalable eCommerce Platform Solutions
Specification & Property based
• Декларативность против императивности
• Вместо поведения в нескольких фиксированных ситуациях
можно проверить соответствие некоторым свойствам
• Многие параметры можно выбрать случайным образом
автоматически - позволяет покрыть больше случаев в
перспективе
• Полезней выбирать не совсем случайные значения, а
“нехорошие”, пример: Big List of Naughty Strings для юникода
Scalable eCommerce Platform Solutions
Scalable eCommerce Platform Solutions
CI/CD
• Польза тестов многократно возрастает, когда их запускают 0_о
• CI инструменты позволяют сделать запуск тестов
автоматическим, регулярным и обязательным
• Обычно ещё решает проблему с тем, что собрать проект на
чистой системе нетривиально
Scalable eCommerce Platform Solutions
CI и аналитика
• Бинарный статус: прошли или не прошли тесты - не очень
полезен
• Можно использовать инструмент, который поддерживает
анализ падений, например TeamCity & Youtrack
• Не так сложно написать интеграцию самостоятельно с тем
багтрекером, который вы используете
• В результате у вас будут более подробные отчёты и
возможность автоматически отслеживать исправление
отдельных багов
Scalable eCommerce Platform Solutions
Скорость
• Со временем количество тестов растёт. При наличии CI они
запускаются часто и работают долго
• А если у вас нет CI, то обычно на этом этапе разработчики
начинают лениться запускать тесты
Scalable eCommerce Platform Solutions
Как ускорить тесты?
Параллельный запуск
• Тут пригодится знание конкретных технологий
• Лучше об этом думать заранее
• Отсутствие стейта у большинства сущностей сильно помогает
Компонентные тесты
Scalable eCommerce Platform Solutions
JS Promise callback hell
var e1 = browser.getElement(..);
var e2 = browser.getElement(..);
e1.getText().then(function(text1) {
e2.getText().then(function(text2) {
expect(text1).toEqual(text2);
});
});
Scalable eCommerce Platform Solutions
Haskell and monads
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
(>>) :: m a -> m b -> m b
return :: a -> m a
fail :: String -> m a
Scalable eCommerce Platform Solutions
Haskell do notation
do x1 <- action1
x2 <- action2
action3 x1 x2
action1 >>=  x1 ->
action2 >>=  x2 ->
action3 x1 x2
Scalable eCommerce Platform Solutions
tj/co
co(function *(){
// resolve multiple promises in parallel
var a = Promise.resolve(1);
var b = Promise.resolve(2);
var c = Promise.resolve(3);
var res = yield [a, b, c];
console.log(res);
// => [1, 2, 3]
}).catch(onerror);
Scalable eCommerce Platform Solutions
jasmine-es6-generator
var testGen = require('jasmine-es6-generator');
it('should done', testGen(function *() {
var res = yield someFn();
expect(res).toEqual(1234);
}));
Scalable eCommerce Platform Solutions
JsonWireProtocol & Protractor
JsonWire - это протокол, лежащий в основе Selenium
Интересно и полезно заглянуть внутрь
Он совсем не сложный
Protractor - это библиотека для тестирования Angular
приложений
Умеет из коробки ждать, где нужно, искать элементы по
биндингам, резолвить промисы и многое другое
Scalable eCommerce Platform Solutions
Спасибо!
talks@korobochka.org
Scalable eCommerce Platform Solutions
Полезные ссылки
https://github.com/minimaxir/big-list-of-naughty-strings
https://www.jetbrains.com/teamcity/
http://stackabuse.com/avoiding-callback-hell-in-node-js/
https://github.com/tj/co
https://github.com/hyzhak/jasmine-es6-generator
https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol
http://www.protractortest.org/

ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!

  • 1.
    Scalable eCommerce PlatformSolutions Автоматизатор, копай глубже, копай шире! IT Global MeetUp Saint-Petersburg, 23 July, 2016
  • 2.
    Scalable eCommerce PlatformSolutions О выступающих Работаем тестировщиками-автоматизаторами в компании Grid Dynamics Используем в основном Java для back-end тестов и JavaScript для front-end Илья Коробицын talks@korobochka.org Всеволод Брекелов vsevolod.brekelov@gmail.com
  • 3.
    Scalable eCommerce PlatformSolutions • Философски-мотивационная речь о пользе знаний • Глубже: чем лучше вы знаете используемые инструменты, тем эффективней получится их использовать • Шире: знания вещей, не относящихся напрямую к вашей работе, могут пригодиться или натолкнуть на новые мысли “Вещи” здесь это не только инструменты, но и подходы и общая философия Вступление
  • 4.
    Scalable eCommerce PlatformSolutions Аналитики пишут требования в специальной форме “историй”: Who, Why, What for Given -> When -> Then Тестировщики пишут обвязку, которая интерпретирует требования и проверяет их автоматически BDD
  • 5.
    Scalable eCommerce PlatformSolutions Specification & Property based • Декларативность против императивности • Вместо поведения в нескольких фиксированных ситуациях можно проверить соответствие некоторым свойствам • Многие параметры можно выбрать случайным образом автоматически - позволяет покрыть больше случаев в перспективе • Полезней выбирать не совсем случайные значения, а “нехорошие”, пример: Big List of Naughty Strings для юникода
  • 6.
  • 7.
    Scalable eCommerce PlatformSolutions CI/CD • Польза тестов многократно возрастает, когда их запускают 0_о • CI инструменты позволяют сделать запуск тестов автоматическим, регулярным и обязательным • Обычно ещё решает проблему с тем, что собрать проект на чистой системе нетривиально
  • 8.
    Scalable eCommerce PlatformSolutions CI и аналитика • Бинарный статус: прошли или не прошли тесты - не очень полезен • Можно использовать инструмент, который поддерживает анализ падений, например TeamCity & Youtrack • Не так сложно написать интеграцию самостоятельно с тем багтрекером, который вы используете • В результате у вас будут более подробные отчёты и возможность автоматически отслеживать исправление отдельных багов
  • 9.
    Scalable eCommerce PlatformSolutions Скорость • Со временем количество тестов растёт. При наличии CI они запускаются часто и работают долго • А если у вас нет CI, то обычно на этом этапе разработчики начинают лениться запускать тесты
  • 10.
    Scalable eCommerce PlatformSolutions Как ускорить тесты? Параллельный запуск • Тут пригодится знание конкретных технологий • Лучше об этом думать заранее • Отсутствие стейта у большинства сущностей сильно помогает Компонентные тесты
  • 11.
    Scalable eCommerce PlatformSolutions JS Promise callback hell var e1 = browser.getElement(..); var e2 = browser.getElement(..); e1.getText().then(function(text1) { e2.getText().then(function(text2) { expect(text1).toEqual(text2); }); });
  • 12.
    Scalable eCommerce PlatformSolutions Haskell and monads class Monad m where (>>=) :: m a -> (a -> m b) -> m b (>>) :: m a -> m b -> m b return :: a -> m a fail :: String -> m a
  • 13.
    Scalable eCommerce PlatformSolutions Haskell do notation do x1 <- action1 x2 <- action2 action3 x1 x2 action1 >>= x1 -> action2 >>= x2 -> action3 x1 x2
  • 14.
    Scalable eCommerce PlatformSolutions tj/co co(function *(){ // resolve multiple promises in parallel var a = Promise.resolve(1); var b = Promise.resolve(2); var c = Promise.resolve(3); var res = yield [a, b, c]; console.log(res); // => [1, 2, 3] }).catch(onerror);
  • 15.
    Scalable eCommerce PlatformSolutions jasmine-es6-generator var testGen = require('jasmine-es6-generator'); it('should done', testGen(function *() { var res = yield someFn(); expect(res).toEqual(1234); }));
  • 16.
    Scalable eCommerce PlatformSolutions JsonWireProtocol & Protractor JsonWire - это протокол, лежащий в основе Selenium Интересно и полезно заглянуть внутрь Он совсем не сложный Protractor - это библиотека для тестирования Angular приложений Умеет из коробки ждать, где нужно, искать элементы по биндингам, резолвить промисы и многое другое
  • 17.
    Scalable eCommerce PlatformSolutions Спасибо! talks@korobochka.org
  • 18.
    Scalable eCommerce PlatformSolutions Полезные ссылки https://github.com/minimaxir/big-list-of-naughty-strings https://www.jetbrains.com/teamcity/ http://stackabuse.com/avoiding-callback-hell-in-node-js/ https://github.com/tj/co https://github.com/hyzhak/jasmine-es6-generator https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol http://www.protractortest.org/