Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
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!