Terug naar de beginpaginaCentor Homepage

Testen van applicaties met veel gebruikers steeds noodzakelijker

Belastingtests brengen prestatieproblemen vroegtijdig aan het licht



De huidige client/server-applicaties moeten in staat zijn duizenden gebruikers tegelijkertijd te bedienen. En dat zonder aan betrouwbaarheid en/of snelheid in te boeten. Maar hoe weet je op voorhand dat dat zo is? Door de applicatie aan een zgn. 'load test' te onderwerpen. In dit artikel wordt uit de doeken gedaan wat een load test inhoudt, hoe een dergelijke testtool is opgebouwd, wat ervoor nodig is en hoe je zo'n test uitvoert.


Als voorbeeld nemen we een website van een boekverkoper. Hier spelen onder meer de processen gerelateerd aan het zoeken naar boeken, het bestellen van boeken en het creëren van een account, een belangrijke rol. Deze businessprocessen moeten geïdentificeerd en getest worden in een omgeving die de werkelijkheid van straks goed simuleert. Dit betekent dat de diverse processen onder wisselende belasting (gebruikers die tegelijkertijd de applicatie benaderen) worden getest. Er moet namelijk zeker gesteld worden dat de prestaties onder alle omstandigheden voldoen aan de verwachtingen en dat knelpunten in de IT-infrastructuur tijdig worden gesignaleerd. De ontwikkelaars leren zo hoe de applicatie 'schaalt' met een toename van het aantal gebruikers en zullen mede hierdoor in staat zijn problemen ten aanzien van de prestaties te reproduceren. Verder zijn de gegevens van tests onder belasting van groot nut bij het specificeren van Service Level Agreements (SLA's).

Het testscenario
Om een dergelijk testscenario uit te kunnen rollen, moet er dus een mechanisme zijn dat een groot aantal gebruikers nabootst. Voor het opzetten en uitvoeren van zo'n belastingtest zijn de volgende stappen nodig:
1. De businessprocessen moeten worden geïdentificeerd.
2. De businessprocessen moeten worden omgezet in code (een script) om het proces te kunnen automatiseren. Dit script kan worden geschreven en gegenereerd in C, in perl, in java of in Visual Basic. Ieder script representeert de actie van één gebruiker, die een bepaald businessproces gebruikt.
3. Meerdere kopieën van deze scripts kunnen vervolgens worden ingezet om een groot aantal gebruikers na te bootsen.
4. Een aparte taak zorgt voor de coördinatie van het testschema en het beheer van het aantal scripts dat kan worden gedraaid. Door het op te slaan als een scenario kan ook dit schema weer worden geautomatiseerd.
5. Een derde component wordt gebruikt om de belastingtest te kunnen analyseren. Daarbij wordt gekeken naar de resultaten die door de scripts worden geproduceerd en worden rapporten gecreëerd. Het analyseprogramma kan ook resultaten vanuit andere componenten (zoals System Monitoring) gebruiken, om zo tot een zeer informatief rapport te komen.

Voor de uitvoering van de bovengenoemde acties, zijn speciale 'load testing tools' beschikbaar. In dit artikel wordt uitgegaan van 'LoadRunner', een pakket dat door Mercury Interactive op de markt wordt gebracht. Testtools van andere fabrikanten zijn echter volgens een vergelijkbare architectuur opgebouwd.

De onderstaande figuur toont de architectuur nodig voor de opzet van een belastingtest. De hoofdcomponenten hierin zijn:
de scriptgenerator,
de controller, en
het analyseprogramma.


De scriptgenerator
Dit programma genereert de scripts waarin de businessprocessen zijn opgenomen. Wanneer het businessproces eenmaal ingevangen is, kan het script in iedere gewenste taal worden gegenereerd. Belangrijk is dat de opname niet indringbaar is, zodat de ingevangen informatie niet wordt beïnvloed door het opnameproces zelf.

Oracle 2-tier
Afhankelijk van de gebruikte protocollen, zijn er verschillende technieken voor het invangen van de informatie. In een Oracle 2-tier applicatie kan de client-applicatie worden gemonitord door API-hooking te gebruiken. Deze benadering wordt in de industrie veel gebruikt voor het monitoren van calls, gemaakt door een Win32-applicatie. Wanneer deze informatie is ingevangen, wordt een script gegenereerd. In het script staan additionele stukjes informatie, die helpen bij het identificeren van de start en het einde van een businessproces. Onderstaande figuur toont hoe een script eruit zou kunnen zien wanneer opgenomen wordt vanuit de Oracle 2-tier applicatie SQL*Plus.




[Begin code box]
dbfunc1()
{
db_init(&init);

// Defines the start of a business process
// There can be more than one business process in a script. start_businessprocess("selectemp");

db_open_connection(&conn, "ddalton", "password", "TNSORACLE");
db_select_stmt(&conn, "SELECT * FROM EMPLOYEE", &results1);
db_select_stmt(&conn, "SELECT count(*) FROM user_tables", &results2);
db_close_connection(&Conn);

// defines the end of a business process
end_businessprocess("selectemp");

return OK;
}
[Einde code box]


[Begin code box]
appfunc1()
{
start_businessprocess("navigate");

app_open_connection("123.123.123.123", "9002", "module=
/u0/oracle/visappl/fnd/11.5.0/ forms/US/FN");

// Expand the Bank Reconciliation item
set_window("Navigator - Cash Management, Vision Payroll (USA)");
list_activate_item("NAVIGATOR_LIST_0","+ Bank Reconciliation");

// Exit the client application by selecting File->Exit
menu_select_item
("N","File;Exit Oracle Applications");
popup_message_press("Caution","OK");

end_businessprocess("navigate");

return OK;
}
[Einde code box]

De bovenstaande scripts zijn gegenereerd in C, maar kunnen ook (opnieuw) worden gegenereerd in andere talen, voorzover die door de scriptgenerator worden ondersteund. Deze benadering is niet exclusief voor SQL*Plus, maar kan voor iedere Oracle-client worden toegepast. Het kan bijvoorbeeld een 'maatwerk' client-applicatie zijn, met veel gebruikers binnen de organisatie. Zodra de gewenste scripts zijn gegenereerd, kan de controller deze gebruiken om een situatie na te bootsen waarin een groot aantal gebruikers de Oracle-database benadert, terwijl deze de opgenomen businessprocessen uitvoert.

Oracle 3-tier
Ditzelfde mechanisme kan worden uitgebreid om ook Oracle 3-tier applicaties onder belasting te testen. Vandaag de dag draaien de meeste applicaties via het web. De scriptgenerator moet dus flexibel genoeg zijn om op te nemen tegen webbrowsers en moet de protocollen die in de communicatie worden gebruikt, kunnen begrijpen. Figuur 3 toont hoe de gegenereerde code er uit zou kunnen zien, wanneer deze wordt opgenomen tegen deze applicatie.
De functies die in het script worden gebruikt zijn onderdeel van een API, die door de tool wordt ondersteund. Deze functies zijn in staat de feitelijke gebruikersinteractie met de client-applicatie na te bootsen.
De businessproces-functies (start_ businessprocess en end_businessprocess) worden gebruikt om te meten hoe lang het duurt om de stappen tussen de start- en end-functies te doorlopen. Foutmeldingen die in deze stappen worden gegenereerd worden vastgelegd (opgenomen) voor meldings- en rapportagedoeleinden.
De API zelf is zodanig ontworpen, dat deze nauwelijks bijdraagt aan de overhead. Om zeker te stellen dat de handmatige scherminvoer op de juiste manier wordt geëmuleerd, is het wel noodzakelijk dat de scriptgenerator-API gebruikmaakt van dezelfde libraries als de client-applicatie. Ieder script representeert de actie van één gebruiker waardoor het script kan worden gezien als één virtuele gebruiker.

De controller
Dit programma wordt gebruikt om scripts over verschillende 'agents' uit te rollen. Een 'agent' is een machine die één of meer verzoeken van een script draait, om de situatie te simuleren waarbij een groot aantal gebruikers hetzelfde businessproces uitvoert. De controller coördineert het proces waarin onder meer wordt besloten hoeveel scripts moeten worden gedraaid, met welke snelheid het aantal scripts toeneemt, hoe lang de belastingtest zal duren, enzovoort.

De agents sturen de resultaten van de virtuele gebruikers terug, terwijl ze tegen de bedrijfsapplicatie draaien. Het is tevens noodzakelijk de bedrijfsapplicatie te monitoren om te kunnen peilen hoe deze zich gedraagt ten opzichte van de belasting. Ook deze data wordt aan de controller aangeboden, zodat een beter beeld ontstaat van het gedrag van de volledige applicatie-infrastructuur.
Hoe beter het monitoren gebeurt, des te meer bruikbare informatie de belastingtest zal opleveren. In een complexe bedrijfsomgeving bijvoorbeeld, zal een hardware-infrastructuur met load-balancers, routers, proxies, caching devices, SSL-versnellers, disk arrays en dergelijke bestaan. Daarnaast is er natuurlijk ook nog de software-infrastructuur, met databases, J2EE applicatieservers, enzovoort. De complexiteit van dit geheel maakt de aanwezigheid van een goed gedefinieerd monitoring-mechanisme noodzakelijk. Wanneer gedurende de test een probleem naar voren komt — zoals het plotseling oplopen van de responsetijd voor een businessproces — kan de monitoringdata worden gebruikt om te achterhalen welk component hiervoor verantwoordelijk was en kunnen knelpunten al vroeg in het proces geïdentificeerd worden. De volgende figuur geeft een idee van hoe een controller eruit zou kunnen zien. In een venster worden de scripts die deel uit maken van het scenario getoond, waarbij ook de actuele status wordt weergegeven. De verschillende grafieken tonen real-time data van iedere monitor.



Aan het eind van de test laat de controller de verzamelde resultaten analyseren door het analyseprogramma, dat tevens rapporten creëert.

De analyse-tool
De analyse-tool wordt gebruikt om de enorme hoeveelheid data van de belastingtest samen te vatten, om van daaruit grafieken en rapporten te genereren die de prestaties van het systeem weergeven.
Hetzelfde tool kan worden gebruikt om verschillende grafieken samen te voegen, waardoor de prestaties van de infrastructuur nog duidelijker in beeld kunnen worden gebracht.

Conclusie
De besproken tools vormen een integraal onderdeel van een belastingtest-systeem. Het beschikken over een dergelijk systeem maakt het mogelijk om prestatieproblemen aan het licht te brengen, voordat de applicatie in productie gaat of uitgeleverd wordt. LoadRunner van het Amerikaanse Mercury Interactive is een van de tools die alle ideeën implementeert die in dit artikel besproken werden. Dit bekende en breed geaccepteerde test-tool is gebruikt om de 'Oracle Applications standard benchmark' te creëren.
Deze benchmark is bereikbaar via:
www.oracle.com/apps_benchmark/ content.html.


Over de auteur
De oorspronkelijke auteur van dit artikel, Dilip Dalton, is applicatie-engineer bij Mercury Interactive Corporation, waar hij meewerkte aan de ontwikkeling van complexe omgevingen voor belastingtests. Dilip Dalton kan bereikt worden via zijn e-mailadres: dilipdalton@hotmail.com.


OC Centor BV
Coltbaan 4e
3439 NG
Nieuwegein
tel. 030 6020060

Realisatie:
Beaumont Tekst&Ontwerp
H. Dunantweg 20 2400BD
Alphen a/d Rijn
tel. 0172 419370

: Dagelijks Nieuws :
Klik hier voor een actueel overzicht van Linux, Unix, Oracle, DWH, BI, Java, Database, Emercing Technologies, Security, ICT en Financieel nieuws.