Top Banner
Protractor: test e2e per AngularJS Codemotion Tech Webinar
67

Tech Webinar: Test e2e per AngularJS e non solo

Jul 16, 2015

Download

Technology

Codemotion
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Tech Webinar: Test e2e per AngularJS e non solo

Protractor: test

e2e per AngularJS

Codemotion Tech Webinar

Page 2: Tech Webinar: Test e2e per AngularJS e non solo

… e non solo

Codemotion Tech Webinar

Page 3: Tech Webinar: Test e2e per AngularJS e non solo

Hello world!Io sono Luca Ferretti

Sono qui perché tutti i giorni

mi pagano per rompere siti, con

dedizione, metodo e disciplina

Nel tempo libero provo a rompere

anche ambienti desktop e

applicazioni OpenSource

Potete trovarmi su internet come

elle.uca (o elleuca … non tutti

amano il punto nell’username)

Page 4: Tech Webinar: Test e2e per AngularJS e non solo

0Protractor… cosa?

ovvero: dal framework di sviluppo

supereroistico nasce il framework

di test superrealistico

Page 5: Tech Webinar: Test e2e per AngularJS e non solo

Ma che è un

protractor?

È “er goniometro”

Page 6: Tech Webinar: Test e2e per AngularJS e non solo

end-to-end test framework for AngularJS

applications

runs tests against your application

running in a real browser, interacting

with it as a user would

da http://protractortest.org

Page 7: Tech Webinar: Test e2e per AngularJS e non solo

Introdotto durante la presentazione

AngularJS 1.2 and Beyond (giugno 2013)

Versione 1.0 rilasciata a luglio 2014

Ultima versione 1.6.x (gennaio 2015)

Page 8: Tech Webinar: Test e2e per AngularJS e non solo

Tecnicamente è un programma Node.js

Dato un file di configurazione, esegue una

o più specifiche

È anche una API che estende WebDriverJS

Page 9: Tech Webinar: Test e2e per AngularJS e non solo

Test funzionale

Selenium

Protractor

per parlare di Protractor, dobbiamo scavare nel profondo...

Page 10: Tech Webinar: Test e2e per AngularJS e non solo

1Testing end-to-end

ovvero: perché sono essenziali

allo sviluppo web se eseguiti in

un vero browser

Page 11: Tech Webinar: Test e2e per AngularJS e non solo

PERCHÉ TESTARE?

Un codice senza test è un

codice che non funziona

Page 12: Tech Webinar: Test e2e per AngularJS e non solo

L’automatizzazione di task

ripetitivi e noiosi è sempre cosa

buona e giusta

Page 13: Tech Webinar: Test e2e per AngularJS e non solo

TIPI DI TEST

(AUTOMATIZZABILI)

FunctionUnit Visual

Page 14: Tech Webinar: Test e2e per AngularJS e non solo

I test funzionali (o end-to-end)

assicurano che l’intero “sistema

software” si comporta nei modi

previsti

Page 15: Tech Webinar: Test e2e per AngularJS e non solo

ovvero: essere in grado di

eseguire determinate

funzioni

REQUISITI

Page 16: Tech Webinar: Test e2e per AngularJS e non solo

AMARA VERITÀ

I TEST FUNZIONALI SONO LENTI,

LENTI, LENTI

Page 17: Tech Webinar: Test e2e per AngularJS e non solo

così tanto da testare e così poco

tempo… da dove cominciare?

Page 18: Tech Webinar: Test e2e per AngularJS e non solo

Da quale funzione

monetizzo o genero valore?

BUSINESS

Page 19: Tech Webinar: Test e2e per AngularJS e non solo

Quali funzioni usano di

più i miei utenti?

PEOPLE

Page 20: Tech Webinar: Test e2e per AngularJS e non solo

Cosa si è rotto spesso in

passato?

HISTORY

Page 21: Tech Webinar: Test e2e per AngularJS e non solo

Quali sono quelli più

usati? Quali meno?

BROWSERS

Page 22: Tech Webinar: Test e2e per AngularJS e non solo

Nel dubbio, ricordati sempre di

confrontarti col tuo team per

decidere i requisiti e le

funzionalità importanti

Page 23: Tech Webinar: Test e2e per AngularJS e non solo

Anche se non segui uno sviluppo

BDD, ricordati di strutturare i

test funzionali sul comportamento

(del sito/webapp e dell’utente)

Page 24: Tech Webinar: Test e2e per AngularJS e non solo

2Selenium e WebDriver

ovvero: come ho imparato a non

preoccuparmi e ad amare ogni

browser (anche IE)

Page 25: Tech Webinar: Test e2e per AngularJS e non solo

SeleniumSelenium automates browsers.

That's it!

Page 26: Tech Webinar: Test e2e per AngularJS e non solo

AUTOMAZIONEAnche se il suo impiego

principale è nel testing,

Selenium automatizza e basta

Page 27: Tech Webinar: Test e2e per AngularJS e non solo

Se WebDriverAPI per guidare i browser

Se IDE & Se RCOld and deprecated

Se Server/GridServizio per impostare un parco

browser

Page 28: Tech Webinar: Test e2e per AngularJS e non solo

COSA OFFRE ESATTAMENTE SELENIUM API

NAVIGAZIONEApri un URL, vai

indietro, vai avanti,

aggiorna.

INTERROGAZIONEDimmi l’URL o il titolo,

cerca uno specifico

elemento, dimmi lo stato

di certo elemento.

MANIPOLAZIONEFai clic, digita del

testo, trascina.

SINCRONIZZAZIONE

Aspetta a interrogare o a

manipolare la pagina fino

a che non è verificata una

certa condizione.

Varie & Eventuali

Alert, iframe, cookie,

javascript, html5, ...

Browser Caps

Usa un browser locale o

remoto con determinate

capability.

Page 29: Tech Webinar: Test e2e per AngularJS e non solo

Do It YourselfScegliere il framework più

opportuno per

runner/assertion/other

(Cucumber, JUnit, …)

Page 30: Tech Webinar: Test e2e per AngularJS e non solo

WebDriverhttps://w3c.github.

io/webdriver/webdriver-spec.

html

Page 31: Tech Webinar: Test e2e per AngularJS e non solo

Choose a browser to start

“interface's

invocations and

responses that are

to be used by

browser vendors to

ensure

interoperability”

W3C WebDriver vs Se WebDriver

“this specification is strongly based on an existing

Open Source project, Selenium WebDriver”

Page 32: Tech Webinar: Test e2e per AngularJS e non solo

Any

Browser

Come funziona?

(Test)

CodeWebDriver

l’immagine è solo a scopo illustrativo

dell’utilizzo del prodotto

Page 33: Tech Webinar: Test e2e per AngularJS e non solo

3Protractor alla riscossa

ovvero: quando il gioco si fa

duro, i duri cominciano a testare

Page 34: Tech Webinar: Test e2e per AngularJS e non solo

Linguaggio

AngularJS

Setup

Page 35: Tech Webinar: Test e2e per AngularJS e non solo

Bootstrap

$ cd project

$ npm install protractor --save-dev

Page 36: Tech Webinar: Test e2e per AngularJS e non solo

Alternate Bootstrap

$ npm install -g protractor

Page 37: Tech Webinar: Test e2e per AngularJS e non solo

Configure It!

$ cd project && mkdir test/

$ touch test/protractor-conf.js

Page 38: Tech Webinar: Test e2e per AngularJS e non solo

Script It!

$ touch test/spec.js

Page 39: Tech Webinar: Test e2e per AngularJS e non solo

Run it!

$ protractor test/protractor-conf.js

Page 40: Tech Webinar: Test e2e per AngularJS e non solo

Regolare l’ambiente di

test

Config

Page 41: Tech Webinar: Test e2e per AngularJS e non solo

exports.config = {

...

seleniumAddress: 'http://host:4444/wd/hub',

...

}

Tweak Configurazione - Dove è Selenium?

Page 42: Tech Webinar: Test e2e per AngularJS e non solo

Tweak Configurazione - Quale browser voglio?

exports.config = {

...

capabilities: {

browserName: 'internet explorer',

version: ‘11’,

...

}

}

Page 43: Tech Webinar: Test e2e per AngularJS e non solo

Tweak Configurazione - Quali browser voglio?

exports.config = {

...

multiCapabilities: [

{

browserName: 'internet explorer'

...

},

{ … },

{ … }

]

}

Page 44: Tech Webinar: Test e2e per AngularJS e non solo

exports.config = {

onPrepare: function() {

...

},

onComplete: function() {

...

},

}

Tweak Configurazione - setUp & tearDown

Page 45: Tech Webinar: Test e2e per AngularJS e non solo

il file referenceConf.js su github

sia la vostra guida

link

Tweak Configurazione - all in!

Page 46: Tech Webinar: Test e2e per AngularJS e non solo

Definire la sequenza di

azioni da compiere e

verificare

Script

Page 47: Tech Webinar: Test e2e per AngularJS e non solo

browser.get(url)

expect(this).toEqual(that)

element.doSomethingCool()

Page 48: Tech Webinar: Test e2e per AngularJS e non solo

Interrogazione - elementi

▪ element(by.locator)

▪ element(…).element(by.locator)

▪ element.all(by.locator)

In realtà sono degli ElementFinder

(ElementArrayFinder) per i

WebElement di WebDriver, la

conversione è trasparente.

Page 49: Tech Webinar: Test e2e per AngularJS e non solo

Interrogazione - locator

▪ binding, model, repeater …

▪ id, css, tagName …

I locator più classici sono estesi

da locator specifici per AngularJS.

Funzionano per strategia + target

es: element(by.id(‘login-psw’))

Page 50: Tech Webinar: Test e2e per AngularJS e non solo

Interrogazione - stati

▪ getQualcosa()

▪ isUncertoStato()

Attributi, posizioni, presenza,

visibilità e altro.

In pratica tutto quello che sa il

browser di un certo elemento del

DOM (notare: il browser)

Page 51: Tech Webinar: Test e2e per AngularJS e non solo

Manipolazione - I

▪ el1.click()

▪ el2.clear().sendKeys(‘abc’)

▪ form.submit()

Asincrone + fluent (ove possibile),

si limitano alle azioni base che si

può eseguire su un elemento.

Non fidatevi del sendKeys() :P

Page 52: Tech Webinar: Test e2e per AngularJS e non solo

Manipolazione - II

browser

.actions()

.dragAndDrop(element,

{x: 400, y: 20})

.perform();

Non specifica di Protractor, ma

derivata come altro da WebDriverJS

Page 53: Tech Webinar: Test e2e per AngularJS e non solo

PromiseOgni “azione” è una promise,

coordinate da un promise

“manager”

Page 54: Tech Webinar: Test e2e per AngularJS e non solo

Promise - how

browser.get(url);

element.clear();

element.sendKeys();

element1.click();

Sono oggetti promise non risolte;

pianificate, non eseguite, nel

control flow. API volutamente

“snella”

Page 55: Tech Webinar: Test e2e per AngularJS e non solo

Promise - don'ts

if(elem.getText() === ‘Hello’ ) {

...

}

Quello che stiamo facendo è il

confronto tra un oggetto promise e

una stringa

Page 56: Tech Webinar: Test e2e per AngularJS e non solo

Promise - do’s

elem.getText()

.then(function(text) {

if (text === ‘Hello’ ) {

...

)

Risolvo la promise, ne ricavo il

valore, uso il valore, sono felice

Page 57: Tech Webinar: Test e2e per AngularJS e non solo

Ready to goConfig + Script

Page 58: Tech Webinar: Test e2e per AngularJS e non solo

4Strategie per sopravvivere

ovvero: controlla il codice prima

che il codice controlli te

Page 59: Tech Webinar: Test e2e per AngularJS e non solo

QUESTO NON È UN FRAMEWORK PER UNIT TEST

Usa i test

funzionali per

codificare le user

story, mantienili

semplici da leggere,

verifica solo gli

“happy path”.

Mantienili

aggiornati o muori.

Page 60: Tech Webinar: Test e2e per AngularJS e non solo

TIMEOUT E SINCRONIZZAZIONE

Emulare le azioni di

un utente non vuol

dire farle alla

stessa velocità.

Prima di interagire

con un elemento

accertati che sia

nello stato in cui

dovrebbe essere.

select1.click()

select1.option1.click()

select2.click()

browser.wait(...).then(...)

Page 61: Tech Webinar: Test e2e per AngularJS e non solo

ECMerge recentissimo, arriveranno le

ExpectedConditions (e saranno anche

concatenabili a suon di AND e OR)

Page 62: Tech Webinar: Test e2e per AngularJS e non solo

USA I PAGE OBJECT, GIOVANE PADAWAN

Crea degli oggetti

che interagiscano

con gli “elementi”

della pagina, usa i

loro metodi nei file

spec.

var Login = function() {

this.user = element(...);

this.pwd = element(...);

this.btn = element(...);

this.do = function(){...}

};

module.exports = Login;

-----

var lg = new Login();

login.do();

expect(hp.isIn()).toBeTruty()

Page 63: Tech Webinar: Test e2e per AngularJS e non solo

TELL DON’T ASK, SE SEI UN JEDI

Se hai creato un

page object, lascia

che tutta la logica

sia nel page object.

Gli expect nella

spec possono essere

sostituiti da errori

gestiti nel page

object.

homepage.load()

homepage.doLogin()

-----

this.doLogin = function() {

...

login.do();

// start checks here

this.userMenu.isPresent()

this.userMenu.isDisplayed()

...

}

Page 64: Tech Webinar: Test e2e per AngularJS e non solo

Facciamo un po’ di pratica

dal vivo?

https://github.com/elleuca/codemotion-webinar-ferretti

Go Live!

Page 65: Tech Webinar: Test e2e per AngularJS e non solo

RIFERIMENTI

Un po’ di link sparsi con risorse importanti da

approfondire:

▪ https://code.google.com/p/selenium/wiki/WebDriverJs

▪ https://github.

com/angular/protractor/blob/master/docs/referenceConf.

js

▪ http://angular.github.io/protractor/#/api

▪ https://code.google.

com/p/selenium/wiki/InternetExplorerDriver

▪ http://martinfowler.com/bliki/PageObject.html

▪ http://martinfowler.com/bliki/TellDontAsk.html

e mi raccomando, non credete mai troppo a quello che

trovate scritto su Internet

Page 66: Tech Webinar: Test e2e per AngularJS e non solo

CREDITS

Un grazie speciale al team di Codemotion e Codemotion

Training

Un dovuto riconoscimento a

▪ Busy Icons di Olly Holovchenko

▪ Il template di SlidesCarnival

▪ Le fotografie di Dean Hochman

▪ The Internet Chuck Norris Database

Page 67: Tech Webinar: Test e2e per AngularJS e non solo

Thanks!join the code side

(we have cookies)

potete trovarmi:

@elleuca

[email protected]