Stefano Trojani
A volte i Test Plan che crei con Selenium IDE ti sembrano delle
strade tortuose e pericolose come queste?
Segui questi consigli e camminerai in verdi praterie
 Le suite (o Test Plan) di Selenium Ide servono a testare
differenti flussi di applicativi.
 Ogni Suite è composta da tanti files.html (chiamati test case)
che formano lo scheletro del test.
 E qui ognuno ha la massima libertà di organizzare i Test Case
come vuole.
Foto: La strade di Bombay
E' possibile testare una funzionalità in un solo test case
utilizzando il test plan per tanti flussi
Oppure è possibile spezzare una singola funzionalità in tanti
test case
Foto: deserto del Navada
Ma c'è un modo corretto per organizzare i test case in un test
plan di Selnium IDE?
Io vi propongo quello che ho adottato dopo aver fatto moltissime SUITE
Foto: Una stradina in Francia
 Prima di tutto è necessario avere le idee chiare su che tipo di
test vogliamo fare.
 Prendo come esempio voler testare una WebMail (es: Gmail,
Liberomail, Yahoomail...)
La butto la... ecco un po' di cose che potrebbero testare il servizio:
mandate un po' di mail, create un po' di contatti in rubrica
(cancellandone anche alcuni) e cambiate password....
Per progettare un Test Plan efficiente con Selenium è sempre utile
affondare le radici nel mondo del Testing creando un
Use Case di alto livello come traccia.
Analizziamo nel dettaglio cosa dovremmo di testare:
Intanto quante mail mandiamo?
Io suggerisco almeno 5 plan text e 5 con allegato.
... come si traduce in un Use Case (di alto livello) questa funzionalità?
Use Case - invia mail
1) Utente fa login alla webmail
2) Utente compila una mail inserendo destinatario, oggetto e corpo del messaggio
Alternate Flow 1 - Utente carica un allegato
3) Utente invia la mail
4) Utente fa Logout
Quanti ne creiamo?
Io suggerisco almeno 7 e ne cancelliamo 2
... come si traduce anche questo in un Use Case (di alto livello)?
Use Case - crea contatto
1) Utente fa login alla webmail
2) Utente compila i dati di un contatto della rubrica inserendo destinatario, nome, cognome ed email
3) Utente Salva contatto
Exceptional Flow 1 - Utente cancella contatto
4) Utente fa Logout
E per finire... cambiamo password! Io suggerisco anche di testare che
la password sia stata cambiata con successo.
Come si può fare una verifica del genere? Semplice, basterà fare login
con la nuova password.
Quindi lo Use Case sarà
Use Case - cambia password
1) Utente fa login alla webmail
2) Utente va in preferenze a cambia Password
3) Sistema fa logout
4) Utente fa login alla webmail con la nuova password
5) Utente fa Logout
Parallelizziamo adesso i vari Use Case e vediamo cosa ne viene
fuori:
invio mail creazione contatti cambio password
1) Utente fa login alla webmail
2) Utente compila una mail
A1 - Utente carica un allegato
3) Utente invia la mail
4) Utente fa Logout
1) Utente fa login alla webmail
2) Utente compila i dati di un contatto
3) Utente Salva contatto
X1 - Utente cancella contatto
4) Utente fa Logout
1) Utente fa login alla webmail
2) Utente va in preferenze a cambia
Password
3) Sistema fa logout
4) Utente fa login alla webmail con la
nuova password
5) Utente fa Logout
Possiamo vedere che tutto sommato ci sono delle funzionalità
aggregabili (come la login e la logout).
Cerchiamo ora di tradurre gli Use Case (come funzionalità a se stanti)
in Test Case, che poi riprenderemo in Selenium.
Ecco cosa viene fuori...
invio mail creazione contatti cambio password
1) login
2) invio mail (plan)
3) invio mail (attach)
4) logout
1) login
2) crea contatto
3) cancella contatto
4) logout
1) login
2) cambia password
3) logout
4) login (nuova pass)
5) logout
In questo modo abbiamo già un
abbozzo dei Test Case che
comporranno il Test Plan di
Selenium.
Cerchiamo adesso di aggregare
tutti questi Test Case insieme in un
unico flusso a cascata:
prima invieremo le mail, poi
creeremo i contatti ed infine
cambiamo password.
Quello che avremo sarà
Test Plan
Invio Mail
1) login
2) invio mail (plan)
3) invio mail (attach)
Crea contatto
4) crea contatto
5) cancella contatto
Cambia Password
6) cambia password
7) logout
8) login (nuova pass)
9) logout
Adesso non rimane che scrivere i vari Test Case in Selnese.
Adesso basta creare i files Test Case di Selenium che
compongono il Test Plan.
Attenzione perché dovranno avere un nome parlante compatibile
con la funzionalità che svolge altrimenti non ci si capisce più
niente).
login.html
tc01w2.html
Per scrivere il nome del file è buona regola usare la forma terza
persona singolare applicata al verbo di quello che la funzionalità
effettivamente fa es: invia_mail.html, invia_mail_allegato.html,
crea_contatto.html...
Sconsiglio di dare un numero (id) di riferimento alla test case
perchè questi oggetti devono essere liberi: come mattoncini di
lego che noi aggregheremo a nostro piacimento in questo test
Plan o in altri.
Vediamo come potrebbe essere il Test Case in Selense della
Login
Login (diventa) -> login.html
NOTA: Questo è solo un esempio
command target value
open http://www.webmail.com
type id=io-login-username pippo
type id=io-login-password password
click css=li[data-app-name="mail"]>a
Passiamo ora al prossimo Test Case della lista:
invio mail (plan) diventa -> manda_mail.html
invio mail (attach) diventa -> manda_mail_attach.html
NOTA: Anche questo è solo un esempio
command target value
click http://www.webmail.com
type css=i.icon-new-mail
type id=writer_field_to mario.rossi@test.com
type //input[@class='subject'] titolo della mail di test
type css=div[class="container"]>textarea corpo della mail di test
click css=div.sendmail
e così via via con tutti i test case della lista....
Ok, adesso che abbiamo tutti i mattoncini assembliamoli in un Test Plan (Suite) di Selenium.
Potete usare Selenium IDE importando ogni files oppure usando un editor di testo (o HTML) come
Komodo
Test Plan > Files > Codice HTML Suite
Invio Mail
>
<table id="suiteTable" cellpadding="1" cellspacing="1" border="1"
class="selenium"><tbody>
<tr><td><b>Test Plan</b></td></tr>
<tr><td><a href="login.html">Login</a></td></tr>
<tr><td><a href="invia_mail.html">Invia Mail</a></td></tr>
<tr><td><a href="invia_mail_attach.html .html">Invia Mail Attach</a></td></tr>
<tr><td><a href="crea_contatto.html">Crea Contatto Rubrica</a></td></tr>
<tr><td><a href="cancella_contatto.html">Cancella Contatto</a></td></tr>
<tr><td><a href="cambia_password.html">Cambia Password</a></td></tr>
<tr><td><a href="logout.html">Logout</a></td></tr>
<tr><td><a href="login_newpass.html">Login Nuova Password</a></td></tr>
<tr><td><a href="logout.html">Logout</a></td></tr>
</table>
1) login
2) invio mail (plan)
3) invio mail (attach)
> login.html
invia_mail.html
invia_mail_attach.html
Crea contatto
4) crea contatto
5) cancella contatto
> crea_contatto.html
cancella_contatto.html
Cambia Password
6) cambia password
7) logout
8) login (nuova pass)
9) logout
> cambia_password.html
logout.html
login_newpass.html
logout.html
Ok, adesso abbiamo il nostro test plan.
E' pluito, scalabile, facilmente modificabile e mantenibile. Manca
qualcosa?
SI!!! Manca qualcosa! :-(
Avevamo detto che
1) dovevamo inviare almeno 10 mail
2) creare 7 contatti!
Niente panico, la struttura è solida
dobbiamo solo fare una piccola modifica ad
alcuni Test Case, introducendo delle
variabili.
Dobbiamo infatti fare in modo che il test
case che invia la mail: invia_mail.html (e
successivamente quello che crea i contatti )
sia in un certo senso un "tutto fare": mandi
cioè mail più complesse, preferibilmente
con più dati e a più utenti.
Senza esagerare (cosa auspicabile per il
futuro) possiamo iniziare introdurre due
semplici variabili (in javascritp) nel test case
Basterà introdurre queste due variabili dinamiche
 RANDOMMAIL: basterà semplicemente fare un Array con un po' di indirizzi
email a cui vogliamo inviare mail. Poi ne prendiamo uno randomico.
 TIMESTAMP: ci segnamo un timestamp da mettere nel titolo della mail,
così che si potrà verificare con esattezza l'invio e l'eventuale ricezione
della mail.
command target value
store javascript{var arrName=new Array(10); arrName[0]='stefano@testmail.com';
arrName[1]='daniele@testmail.com'; arrName[2]='mario@testmail.com';
arrName[3]='franco@testmail.com'
arrName[Math.round((Math.random()*2)+1)];}
RANDOMAIL
storeEval var d=new Date(); d.getDate()+'-'+((d.getMonth()+1)) +'-'+d.getFullYear()+'
time: h'+d.getHours()+'m'+d.getMinutes()+'s'+d.getSeconds() ;
TIMESTAMP
A questo punto basterà inserire queste due righe nel Test Case invia_mail.html e
inserire le variabili così create al posto del testo statico che avevamo messo:potrà
verificare con esattezza l'invio e l'eventuale ricezione della mail.
command target value
store javascript{var arrName=new Array(10); arrName[0]='stefano@testmail.com';
arrName[1]='daniele@testmail.com'; arrName[2]='mario@testmail.com';
arrName[3]='franco@testmail.com' arrName[Math.round((Math.random()*2)+1)];}
RANDOMAIL
storeEval var d=new Date(); d.getDate()+'-'+((d.getMonth()+1)) +'-'+d.getFullYear()+' time:
h'+d.getHours()+'m'+d.getMinutes()+'s'+d.getSeconds() ;
TIMESTAMP
click http://www.webmail.com
type css=i.icon-new-mail
type id=writer_field_to ${RANDOMAIL}
type //input[@class='subject'] mail di test
inviata in data
${TIMESTAMP}
type css=div[class="container"]>textarea corpo della mail
di test
click css=div.sendmail
Adesso abbiamo un Test Case che ogni volta che verrà
eseguito sarà diverso dal precedente.
Nota: Ho inserito un Array con poche mail ma è possibile
rendere le cose molto più complesse e con più variabili.
A questo punto per far mandare 10 mail basterà
modificare il Test Plan semplicemente facendo eseguire
più volte il Test Case (versione tutto fare)
Di conseguenza avremo il seguente TEST PLAN
Test Plan -> Files
Invia 10 mail
login.html
invia_mail.html
invia_mail.html
invia_mail.html
invia_mail.html
invia_mail.html
invia_mail.html
invia_mail_attach.html
invia_mail_attach.html
invia_mail_attach.html
invia_mail_attach.html
invia_mail_attach.html
Crea 7 contatti ne cancella 2
crea_contatto.html
crea_contatto.html
crea_contatto.html
crea_contatto.html
crea_contatto.html
crea_contatto.html
cancella_contatto.html
crea_contatto.html
cancella_contatto.html
Cambia Password
cambia_password.html
logout.html
login_newpass.html
logout.html
 1) abbiamo pensato alle funzionalità da testare
 2) abbiamo analizzato nel dettaglio cosa queste
funzionalità devono fare (es: invia 10 mail)
 3) abbiamo fatto tanti Use Case di alto livello quante sono
le funzionalità che testeremo
 4) abbiamo identificato i Test Case (di Selenium) di ogni
Funzionalità
 5) abbiamo assemblato tutti i Test Case nel Test Plan di
Selenium
 6) abbiamo reso "tutto fare" i Test Case che devono essere
cicalati
 7) abbiamo creato un Test Plan che esegue più volte gli
stessi Test Case
Creare Suite di Test Automatici intelligenti con Selenium IDE

Creare Suite di Test Automatici intelligenti con Selenium IDE

  • 1.
  • 2.
    A volte iTest Plan che crei con Selenium IDE ti sembrano delle strade tortuose e pericolose come queste?
  • 3.
    Segui questi consiglie camminerai in verdi praterie
  • 4.
     Le suite(o Test Plan) di Selenium Ide servono a testare differenti flussi di applicativi.  Ogni Suite è composta da tanti files.html (chiamati test case) che formano lo scheletro del test.  E qui ognuno ha la massima libertà di organizzare i Test Case come vuole.
  • 5.
    Foto: La stradedi Bombay E' possibile testare una funzionalità in un solo test case utilizzando il test plan per tanti flussi
  • 6.
    Oppure è possibilespezzare una singola funzionalità in tanti test case Foto: deserto del Navada
  • 7.
    Ma c'è unmodo corretto per organizzare i test case in un test plan di Selnium IDE? Io vi propongo quello che ho adottato dopo aver fatto moltissime SUITE Foto: Una stradina in Francia
  • 8.
     Prima ditutto è necessario avere le idee chiare su che tipo di test vogliamo fare.  Prendo come esempio voler testare una WebMail (es: Gmail, Liberomail, Yahoomail...)
  • 9.
    La butto la...ecco un po' di cose che potrebbero testare il servizio: mandate un po' di mail, create un po' di contatti in rubrica (cancellandone anche alcuni) e cambiate password....
  • 10.
    Per progettare unTest Plan efficiente con Selenium è sempre utile affondare le radici nel mondo del Testing creando un Use Case di alto livello come traccia. Analizziamo nel dettaglio cosa dovremmo di testare:
  • 11.
    Intanto quante mailmandiamo? Io suggerisco almeno 5 plan text e 5 con allegato. ... come si traduce in un Use Case (di alto livello) questa funzionalità? Use Case - invia mail 1) Utente fa login alla webmail 2) Utente compila una mail inserendo destinatario, oggetto e corpo del messaggio Alternate Flow 1 - Utente carica un allegato 3) Utente invia la mail 4) Utente fa Logout
  • 12.
    Quanti ne creiamo? Iosuggerisco almeno 7 e ne cancelliamo 2 ... come si traduce anche questo in un Use Case (di alto livello)? Use Case - crea contatto 1) Utente fa login alla webmail 2) Utente compila i dati di un contatto della rubrica inserendo destinatario, nome, cognome ed email 3) Utente Salva contatto Exceptional Flow 1 - Utente cancella contatto 4) Utente fa Logout
  • 13.
    E per finire...cambiamo password! Io suggerisco anche di testare che la password sia stata cambiata con successo. Come si può fare una verifica del genere? Semplice, basterà fare login con la nuova password. Quindi lo Use Case sarà Use Case - cambia password 1) Utente fa login alla webmail 2) Utente va in preferenze a cambia Password 3) Sistema fa logout 4) Utente fa login alla webmail con la nuova password 5) Utente fa Logout
  • 14.
    Parallelizziamo adesso ivari Use Case e vediamo cosa ne viene fuori: invio mail creazione contatti cambio password 1) Utente fa login alla webmail 2) Utente compila una mail A1 - Utente carica un allegato 3) Utente invia la mail 4) Utente fa Logout 1) Utente fa login alla webmail 2) Utente compila i dati di un contatto 3) Utente Salva contatto X1 - Utente cancella contatto 4) Utente fa Logout 1) Utente fa login alla webmail 2) Utente va in preferenze a cambia Password 3) Sistema fa logout 4) Utente fa login alla webmail con la nuova password 5) Utente fa Logout
  • 15.
    Possiamo vedere chetutto sommato ci sono delle funzionalità aggregabili (come la login e la logout). Cerchiamo ora di tradurre gli Use Case (come funzionalità a se stanti) in Test Case, che poi riprenderemo in Selenium. Ecco cosa viene fuori... invio mail creazione contatti cambio password 1) login 2) invio mail (plan) 3) invio mail (attach) 4) logout 1) login 2) crea contatto 3) cancella contatto 4) logout 1) login 2) cambia password 3) logout 4) login (nuova pass) 5) logout
  • 16.
    In questo modoabbiamo già un abbozzo dei Test Case che comporranno il Test Plan di Selenium. Cerchiamo adesso di aggregare tutti questi Test Case insieme in un unico flusso a cascata: prima invieremo le mail, poi creeremo i contatti ed infine cambiamo password. Quello che avremo sarà Test Plan Invio Mail 1) login 2) invio mail (plan) 3) invio mail (attach) Crea contatto 4) crea contatto 5) cancella contatto Cambia Password 6) cambia password 7) logout 8) login (nuova pass) 9) logout
  • 17.
    Adesso non rimaneche scrivere i vari Test Case in Selnese.
  • 18.
    Adesso basta crearei files Test Case di Selenium che compongono il Test Plan. Attenzione perché dovranno avere un nome parlante compatibile con la funzionalità che svolge altrimenti non ci si capisce più niente). login.html tc01w2.html
  • 19.
    Per scrivere ilnome del file è buona regola usare la forma terza persona singolare applicata al verbo di quello che la funzionalità effettivamente fa es: invia_mail.html, invia_mail_allegato.html, crea_contatto.html... Sconsiglio di dare un numero (id) di riferimento alla test case perchè questi oggetti devono essere liberi: come mattoncini di lego che noi aggregheremo a nostro piacimento in questo test Plan o in altri.
  • 20.
    Vediamo come potrebbeessere il Test Case in Selense della Login Login (diventa) -> login.html NOTA: Questo è solo un esempio command target value open http://www.webmail.com type id=io-login-username pippo type id=io-login-password password click css=li[data-app-name="mail"]>a
  • 21.
    Passiamo ora alprossimo Test Case della lista: invio mail (plan) diventa -> manda_mail.html invio mail (attach) diventa -> manda_mail_attach.html NOTA: Anche questo è solo un esempio command target value click http://www.webmail.com type css=i.icon-new-mail type id=writer_field_to mario.rossi@test.com type //input[@class='subject'] titolo della mail di test type css=div[class="container"]>textarea corpo della mail di test click css=div.sendmail e così via via con tutti i test case della lista....
  • 22.
    Ok, adesso cheabbiamo tutti i mattoncini assembliamoli in un Test Plan (Suite) di Selenium. Potete usare Selenium IDE importando ogni files oppure usando un editor di testo (o HTML) come Komodo Test Plan > Files > Codice HTML Suite Invio Mail > <table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody> <tr><td><b>Test Plan</b></td></tr> <tr><td><a href="login.html">Login</a></td></tr> <tr><td><a href="invia_mail.html">Invia Mail</a></td></tr> <tr><td><a href="invia_mail_attach.html .html">Invia Mail Attach</a></td></tr> <tr><td><a href="crea_contatto.html">Crea Contatto Rubrica</a></td></tr> <tr><td><a href="cancella_contatto.html">Cancella Contatto</a></td></tr> <tr><td><a href="cambia_password.html">Cambia Password</a></td></tr> <tr><td><a href="logout.html">Logout</a></td></tr> <tr><td><a href="login_newpass.html">Login Nuova Password</a></td></tr> <tr><td><a href="logout.html">Logout</a></td></tr> </table> 1) login 2) invio mail (plan) 3) invio mail (attach) > login.html invia_mail.html invia_mail_attach.html Crea contatto 4) crea contatto 5) cancella contatto > crea_contatto.html cancella_contatto.html Cambia Password 6) cambia password 7) logout 8) login (nuova pass) 9) logout > cambia_password.html logout.html login_newpass.html logout.html
  • 23.
    Ok, adesso abbiamoil nostro test plan. E' pluito, scalabile, facilmente modificabile e mantenibile. Manca qualcosa? SI!!! Manca qualcosa! :-( Avevamo detto che 1) dovevamo inviare almeno 10 mail 2) creare 7 contatti!
  • 24.
    Niente panico, lastruttura è solida dobbiamo solo fare una piccola modifica ad alcuni Test Case, introducendo delle variabili. Dobbiamo infatti fare in modo che il test case che invia la mail: invia_mail.html (e successivamente quello che crea i contatti ) sia in un certo senso un "tutto fare": mandi cioè mail più complesse, preferibilmente con più dati e a più utenti. Senza esagerare (cosa auspicabile per il futuro) possiamo iniziare introdurre due semplici variabili (in javascritp) nel test case
  • 25.
    Basterà introdurre questedue variabili dinamiche  RANDOMMAIL: basterà semplicemente fare un Array con un po' di indirizzi email a cui vogliamo inviare mail. Poi ne prendiamo uno randomico.  TIMESTAMP: ci segnamo un timestamp da mettere nel titolo della mail, così che si potrà verificare con esattezza l'invio e l'eventuale ricezione della mail. command target value store javascript{var arrName=new Array(10); arrName[0]='stefano@testmail.com'; arrName[1]='daniele@testmail.com'; arrName[2]='mario@testmail.com'; arrName[3]='franco@testmail.com' arrName[Math.round((Math.random()*2)+1)];} RANDOMAIL storeEval var d=new Date(); d.getDate()+'-'+((d.getMonth()+1)) +'-'+d.getFullYear()+' time: h'+d.getHours()+'m'+d.getMinutes()+'s'+d.getSeconds() ; TIMESTAMP
  • 26.
    A questo puntobasterà inserire queste due righe nel Test Case invia_mail.html e inserire le variabili così create al posto del testo statico che avevamo messo:potrà verificare con esattezza l'invio e l'eventuale ricezione della mail. command target value store javascript{var arrName=new Array(10); arrName[0]='stefano@testmail.com'; arrName[1]='daniele@testmail.com'; arrName[2]='mario@testmail.com'; arrName[3]='franco@testmail.com' arrName[Math.round((Math.random()*2)+1)];} RANDOMAIL storeEval var d=new Date(); d.getDate()+'-'+((d.getMonth()+1)) +'-'+d.getFullYear()+' time: h'+d.getHours()+'m'+d.getMinutes()+'s'+d.getSeconds() ; TIMESTAMP click http://www.webmail.com type css=i.icon-new-mail type id=writer_field_to ${RANDOMAIL} type //input[@class='subject'] mail di test inviata in data ${TIMESTAMP} type css=div[class="container"]>textarea corpo della mail di test click css=div.sendmail
  • 27.
    Adesso abbiamo unTest Case che ogni volta che verrà eseguito sarà diverso dal precedente. Nota: Ho inserito un Array con poche mail ma è possibile rendere le cose molto più complesse e con più variabili. A questo punto per far mandare 10 mail basterà modificare il Test Plan semplicemente facendo eseguire più volte il Test Case (versione tutto fare) Di conseguenza avremo il seguente TEST PLAN Test Plan -> Files Invia 10 mail login.html invia_mail.html invia_mail.html invia_mail.html invia_mail.html invia_mail.html invia_mail.html invia_mail_attach.html invia_mail_attach.html invia_mail_attach.html invia_mail_attach.html invia_mail_attach.html Crea 7 contatti ne cancella 2 crea_contatto.html crea_contatto.html crea_contatto.html crea_contatto.html crea_contatto.html crea_contatto.html cancella_contatto.html crea_contatto.html cancella_contatto.html Cambia Password cambia_password.html logout.html login_newpass.html logout.html
  • 28.
     1) abbiamopensato alle funzionalità da testare  2) abbiamo analizzato nel dettaglio cosa queste funzionalità devono fare (es: invia 10 mail)  3) abbiamo fatto tanti Use Case di alto livello quante sono le funzionalità che testeremo  4) abbiamo identificato i Test Case (di Selenium) di ogni Funzionalità  5) abbiamo assemblato tutti i Test Case nel Test Plan di Selenium  6) abbiamo reso "tutto fare" i Test Case che devono essere cicalati  7) abbiamo creato un Test Plan che esegue più volte gli stessi Test Case