Ajax TruClient Erfarenheter, tips och trix från Swedbank IT Christian Gerdes Performance Engineer, LIGHTS IN LINE AB
Intro Lite om Swedbanks Teknik Test Varför TruClient En ny teknik kräver ett nytt tänk Lite utmaningar med tekniken Tips på verktyg Lite demo och ställ frågor
Swedbank Teknik Test Började redan 1997 Idag ett team på 5 PT, 1 TL, 1 MF Utarbetade och väl etablerade metoder och processer Release teknik tester (regression) och Projekt (Utveckling, IO, Inköpta system) 10 releaser, 90 projekt per år (2-5 v) Dubbla produktionslika PT miljöer (inkl MF) + 1 labb miljö, 3 delade controllers, 3 kanoner
Varför TruClient? Webben ändras Web 1.0 Kompletta sidor och ett singel trådat flöde Allt är i princip HTML och HTTP Metoder Ingen logik i webbläsaren Användaren styr flödet Web 2.0 lösningar Mycket logik i webbläsaren (oftast JavaScript) Delar av sidor eller endast data hämtas (XML, Objekt eller egna format) Flera parallella logiska flöden av data Händelser (klient eller server) kan styra flödet
Vad gör TruClient? Fjärrstyr en bantad webbläsare (FF/IE) Därmed gör en riktig webbläsare jobbet Spelar in händelser på objekt i webbläsaren Istället för kommunikationen med servern Tanken är Slippa korrelering och parametersättning av data Slippa koda (prestandatest för dummies) Enklare att spela in (klicka runt bara )
Varför inte TruClient överallt? Fortfarande en ung teknik Fallgropar, buggar, brist på dokumentation och erfarenheter, brist på kunskap om webbutveckling Kräver mycket mer resurser på kanonerna Vi har sett faktor på 100 ggr mer Svårare att felsöka och tweaka Mindre korrelering ja, men när du måste blir det snabbt krångligt Inte lika lätt att fuska Känns ibland mer som ett handikapp än en dröm..
Funkar TruClient då? JA! Flera projekt hade inte fått prestandatester annars Framför allt AJAX tunga applikationer med egna format I kombination med vanlig Web/HTTP 2 Lyckade projekt 100% TruClient Remedy ARS Web lösning (egna format) GWT lösning (GWT Request / JSON Svar)
Ny teknik Nytt tänk Glöm HTTP, TCP, Protokoll och GET/POST Lär dig HTML 4/5, DOM, JavaScript och XPath Tänk händelser, objekt och relationer snarare än sekventiella flöden och data Som med all ny teknik, förbered dig för begräsningar
Utmaningar med tekniken Identifiera objekt och synkronisera Det är en dynamisk värld javascript, namnbyten, mm Alla dessa Mouse Overs Betänketider (Think Time) finns inte Går inte att filtrera/ ta bort resurser Firefox profilen svår att ändra (som inställningar, säkerhet) Ogiltiga SSL cert accepteras inte Svårt att mäta svarstider och bryta ner dem Mindre information och loggning av vad som sker Svårare att felsöka när skriptet inte gör som du vill Snapshots är bara bilder inget mer.
Mäta svarstider Default är Network Time Väntar på 150 ms tystnad på nätverket Tiden kan justeras globalt (ej individuellt) Problem vid asynkron Ajax Alternativet är Wait for Objekt Gäller att hitta rätt objekt att vänta på Kommer inkludera renderingstider / javascript exekveringstid Höga time out tider (default 20 sec) Dessutom finns en default think time mellan steg, även den global (500 ms)
Parametrar Skapas som vanligt, samma Parameter List Sätts i skriptet med hjälp av JavaScript Finns inga knappar eller funktioner för infoga! Värdefält: LR.getParam("PERSONNUMMER") Objekt: ArgContext.LR.getParam( DOKUMENTID )
Identifiera objekt 3 sätt: Automatic, XPath och JavaScript Exempel XPath: //input[@id= kontoid"] Exempel JavaScript: document.queryselectorall('a[title="searchresult"]'); document.getelementbyid("chbx_145 ); evalxpath( //input[@id=\ kontoid\"] );
Korrelering enkel slump XPath för att identifiera ett objekt tex något i en lista (//input[@id=\ kontoid\"])[2] [2] identifierar den andra raden i listan [0] väljer slumpmässigt
Avancerad korrelering Två steg Lägg till ett JavaScript steg före det steget där du behöver identifiera objektet Skriv JavaScript kod som hittar objektet och sparar en referens till det i en variabel (ArgContext.mittObjekt tex) Använd ArgContext.mittObjekt som JavaScript identifierare
Avancerad korrelering - exempel JavaScript metoden evalxpath returnerar en array om flera matchar XPath uttrycket, flera sätt finns då: random(minaobjekt); minaobjekt[minaobjekt.length 1]; minaobjekt[argcontext.lr.getparameter( ID )];
Tick Tock - Think Time Finns bara en wait function i JavaScript Exempel på slumpmässig TT:
Loggning och skriva saker JavaScript LR.Log( Detta kommer loggas i VU loggen ) Gamla C-funktioner Läggs i C-functions.c Anropas med steget Evaluate C function Egna filer, använda Attributes, VTS mm. Obs, kompileringsfel syns inte i VuGen!
Tips på extensions (FF) Finns massor, prova dig fram! Developer Assistant XPath Tester JavaScript Console JavaScript Injector Firebug och Firefinder Hjälp att hitta objekt, namn, relationer
Lite om resursförbrukning Extremt olika från skript till skript Du måste benchmarka skripten! Överbalastad kanon = högre svarstider 50 VU tog cirka 3,5 GB och 60-70% CPU På samma maskin drar 2500 Web VU 2,5 GB och 17% CPU Faktor 100x mer resurskrävande per VU
Demo, Frågor, Diskussion
Tack för mig! Christian.Gerdes@lightsinline.se