Într-o lume perfectă m-aș aștepta să pot rula un load test sau un stres test folosind un furnizor de cloud fără să fiu obligat să modific o linie de cod din testele mele.
În cadrul acestui articol vom descoperi cum putem să facem acest lucru folosind un nou serviciu de cloud. Cum o persoană care are cunoștințe zero despre cloud poate să ruleze un load test de 50.000 de useri timp de 24 de ore cu costuri minime, fără să fie obligat să achiziționeze și să configureze 10, 20 de noduri.
Dar ce este de fapt un load test? Scopul principal pe care un astfel de test îl are este definirea și validarea load-ului maxim pe care un sistem îl poate avea fără ca performanța să scadă simțitor. Chiar dacă dezvoltatorul îți spune că sistemul poate să gestioneze fără nici o problemă 1000 de useri simultan, un load test poate să dovedească contrariul, chiar și pe cele mai simple scenarii.
Există o demarcație foarte subțire între un load test și un stress test. De foarte multe ori un load test se finalizează cu un stress test care are ca scop observarea comportamentului pe care sistemul îl are în momentul în care load-ul crește peste capacitatea maximă pe care acesta trebuie să o suporte.
La ora actuală piața este plină de diferite soluții pentru testare automată și pentru rularea load testelor. Produse precum Selenium, LoadStorm sau Neoload domină piața.
Dacă folosim o soluție on-premise trebuie să fim pregătiți să rezolvăm probleme precum achiziția sau rezervarea resurselor pentru load test. Într-o companie mică va fi greu cumpărarea a 10 servere doar pentru a putea rula un load test. În schimb într-o companie mare, chiar dacă are resurse financiare suficiente, din momentul în care facem o cerere pentru aceste resurse, până în momentul în care o să avem resursele disponibile, poate să treacă o perioadă lungă de timp - uneori chiar să fie prea târziu. Pe lângă acești factori, configurarea fiecărei mașini și deploy-ul poate să fie un labirint din care să nu mai găsim ieșirea.
Pe această piață, extrem de matură a apărut Microsoft cu o soluție extrem de ingenioasă. Dacă acesta deja are o infrastructură pentru cloud puternică și robustă, de ce să nu ofere posibilitatea de a rula load teste folosind Azure. Deși aceștia nu au prima soluție de acest gen de pe piață, Microsoft are un as în mânecă. Aceștia îți permit să rulezi un load test folosind Azure fără să fie nevoie să faci o configurație în plus. Trebuie să ai doar un cont pe Visual Studio Team Foundation Service (http://tfs.visualstudio.com/), aceasta fiind folosit pentru facturare.
Până acum, un load test se putea face folosind soluțiile pe care Micosoft ni le pune la dispoziție prin intermediul unui Load Test Ring. Acesta este format dintr-un controller ce controlează testele - Load Test Controller și unul sau mai mulți agenți pe care testele noastre rulează. O arhitectură care are la bază master-slave. Noua versiune de Visual Studio 2013 ne pune la dispoziție o noua opțiune - în loc să rulăm testele noastre în propriul nostru Load Test Ring putem să le rulăm direct pe Azure, fără nici o configurație în plus. Nu este nevoie să facem deploy la nici o mașină virtuală sau să configurăm diferite servicii.
Load Test Web Service este servicul de pe Azure care ne ajută să facem acest lucru. Prin intermediul acestuia, Visual Studio 2013 încarcă testele noastre pe cloud. În spatele acestui serviciu există un pool de test agents care este folosit pentru a rula testele noastre. Dar acest lucru se întâmplă în spatele scenei, fără ca noi să fim obligați să facem ceva. Toate rezultatele testelor noastre, împreună cu diferiți performance counters ne sunt puse la dispoziție.
Înainte să ne uităm peste diferite funcționalități care sunt suportate, vă propun să aruncăm o privire peste cele mai importate opțiuni suportate în acest moment.
Avem posibilitatea de a defini UI tests și nu numai. Pe lângă posibilitatea de a face record și de a rula teste de UI, putem în orice moment să ne scriem testele noastre specifice și să lovim diferite endpoint-uri. Un endpoint testat nu trebuie să fie doar HTTP sau HTTPS. Putem la fel de bine să testăm un endpoint WCF, REST sau un web service. Singura condiție care există este ca endpoint-ul să fie accesibil de pe internet.
Visual Studio 2013 ne aduce un nou template de proiect - Web Performance and Load Test Project. Acest tip de proiect ne v-a permite să ne definim și să rulăm load teste pe cloud fără nici un fel de probleme.
Cea mai simplă variantă pentru a crea un load test pentru o aplicație web este să ne creăm unul sau mai multe teste de tip Web Performance Test. Acest tip de teste pot să fie UI teste, fiind foarte ușor de creat și automatizat. Folosind recorderul de UI care vine odată cu Visual Studio 2013, putem să creăm un Web Performance Test doar în câteva secunde. Un astfel de test poate să fie modificat în orice moment și dacă dorim avem posibilitatea să generăm cod pentru test. Prin această metodă, cei care doresc să scrie cod pentru a modifica un test pot să facă asta foarte ușor. Bineînțeles, funcționalități precum detectarea automată a elementelor dinamice pe care o pagina le are sau parametrizarea diferiților parametrii este suportat out of the box.
Pentru fiecare test de acest gen putem să avem diferite surse de date, precum o bază de date, un CSV sau un fișier XML. Se pot folosi destul de ușor testele scrise în Selenium de exemplu. Fiecare test poate să apeleze la rândul său alte teste, astfel putem să reutilizăm o mare parte din logica pe care o avem pentru testare.
Până acuma am văzut cum se poate crea unul din testele care pot să fie folosite pentru load test. Cred că este momentul perfect să ne uităm ce ne permite un load test să facem.
Prima funcționalitate întâlnită în momentul în care scriem un load test este "thinking time". Putem să definim diferite profile și intervale de timp prin care să simulăm un utilizator real. De exemplu putem ca după fiecare test să simulăm un delay de X secunde. Avem la îndemână diferite profile de acest gen pe care le putem folosi.
Simularea unui load test se poate face prin diferite moduri. Avem posibilitatea să rulăm un test de la bun început cu același număr de useri sau să ne definim numărul de useri cu cât să crească la fiecare pas. Bineînțeles, de cele mai multe ori este nevoie să rulăm diferite scenarii în același timp. Din această cauză, avem posibilitatea nu doar să specificăm testele pe care dorim să le rulăm și în ce proporție, cât și modul în care aceste teste să ruleze. De exemplu, putem să specificăm de câte ori fiecare test trebuie să ruleze într-un anumit interval de timp sau care este numărul de useri care trebuie să ruleze un anumit test în fiecare moment când load test-ul rulează.
Putem să simulăm diferite browsere pe care clienții le au și diferite tipuri de conexiuni. Dar ceea ce mi se pare cel mai interesant este posibilitatea de a adăuga și a accesa nu doar performance counters de pe clienți cât și de pe serverele pe care aplicația noastră rulează. În acest mod putem să monitorizăm și să vizualizăm counteri atât de pe clienți cât și de pe server.
Până în acest moment am văzut care sunt principalele opțiuni pe care le avem la dispoziție pentru un load test. Dar încă nu am văzut cum putem să rulăm un astfel de test. Tot ce trebuie să facem pentru a putea rula un load test pe cloud este să deschidem Local.testsettings, iar în tab-ul General să selectăm "Run tests using Visual Studio Team Foundation Service". Da, doar atât este nevoie să facem pentru a putea rula testul pe cloud. Bineînțeles trebuie să fim logați în Visual Studio cu un cont ce este legat la Visual Studio Team Foundation Service.
În momentul de față acest serviciu este în faza de preview. Fiecare utilizator are lunar 2000 de minute virtuale pe care le poate folosi pentru load teste. În momentul de față nu există prețurile finale. Dacă aveți nevoie de mai multe puncte pentru load teste nu ezitați să intrați în programul de early adoption fără costuri suplimentare. O să aveți acces la 200.000 de minute virtuale în fiecare lună pe care le puteți folosi în voie. Acceptarea unui request de acest fel ia foarte puțin (în cazul meu a fost sub 6 ore).
Prima dată când am auzit de minute virtuale m-am întrebat ce sunt acestea. Un minut virtual este egal cu durata load test-ului înmulțit cu numărul de useri.
Odată ce am rulat testele vom avea acces la toate rezultatele incluzând performance counters, testele căzute, mesaje de eroare și diferite diagrame. Toate rezultatele pot să fie exportate într-un Excel care va conține în mod automat diagrame perfecte pentru management și clienți.
Vă invit să încercați noul serviciu din cloud pentru load test. Eu am fost surprins plăcut de acest serviciu și cred că o să ne ușureze munca.