Un (http)modulo per generare uno script da usare con Application Center Test
L'application Center Test di MS è un ottimo tool per mettere alla prova una applicazione web, ma non aiuta molto quando si deve
<> un Web Service. In particolare non è di nessun aiuto se il vostro WS non supporta la pagina di prova aspx
standard, e se è troppo difficile costruire velocemente una pagina di prova personalizzata. Questo accade, ad esempio,
se il web service in oggetto è chiamato da una applicazione di cui non si sa riprodurre l'output facilmente, magari perchè si tratta
di un applicativo legacy. Ho avuto questo problema con un WebService che prende come input un array di byte, generato da una serializzazione di una classe in C++.
Bene, come risolvere il problema ? Scrivere una applicazione custom in grado di fare uno stress test mirato porta via tempo, e sarebbe difficile generare dei
report paragonabili a quelli di Application Center Test (ACT).
Bene,l'idea è questa: creiamo un modulo che filtri le chiamate soap, e in base a queste generi uno script compatibile con ACT.
Se volete potete trovare i sorgenti ed un compilato qui.
Una volta scaricato il modulo, o compilato i sorgenti, occorre modificare il Web.config della applicazione web che ospita il nostro web service:
<
system.web>
<
httpModules>
<add name="ScriptGenerator" type="AppCenterTestScriptGen.ScriptGenerator, AppCenterTestScriptGen" />
</httpModules>
.....
aggiungendo, come si vede, il tipo AppCenterTestScriptGen.ScriptGenerator alla collezione dei moduli.
Navigando sulla pagina di test del WebService ( od in qualsiasi delle pagine della applicazione ospitante ) avrete
conferma della corretta installazione del modulo tramite una intestazione, come nella figura seguente:
Bene, ora basta lanciare l'applicativo che chiama il vostro WS, e fare il vostro giro di prova. Il modulo intercetterà tutte le vostre chiamate ( fino ad un massimo di 100, valore orribilmente schiantato nel sorgente ), registrerà gli header e il contenuti delle vostre Soap Actions,e costruirà uno script che custodirà gelosamente in memoria.
Non ho voluto che il moduilo scrivesse alcunchè sul file system, per cui il modulo stesso risponderà ad una richiesta HTTP speciale fornendo
il testo direttamente al browser. Tornate quindi sulla pagina di prova del vostro servizio, ed aggiungete
un querystring ?actscript=get ed il vostro browser apparirà come nella figura quì sotto:
Ora potete incollare il testo in Application Center Test, scegliere il numero di client e i parametri di configurazione e andare a prendere il caffè :)Attenzione però: conviene disattivare il modulo prima di eseguire il test, onde evitare un overhead che potrebbe falsare le vostre prove
Note WSE2.0
Le chiamate hanno nell'envelope timestamp e data di espirazione del messaggio. Questo fa sì lo script generato valga per un periodo limitato
di tempo. Non ho ancora curato questo aspetto, vista la mia scarsa esperienza con WSE2.0, ma sono sicuro che è possibile
intervenire su questi parametri per avere degli script riutilizzabili nel tempo
conclusioni
Non ho fatto una descrizione sulla realizzazione del modulo, in quanto i sorgenti sono banali ed hanno richiesto solo pazienza ed un po' di attenzione,
sono sicuro che modificarli per adattarli e migliorarli sarà oltremodo facile. ( sopprattutto migliorarli :)) )