Domanda

Sto usando JMeter per test di carico un webservice SOAP. Il webservice esiste in una serie di luoghi, come il mio localhost, una scatola di dev, una casella di integrazione, una casella di produzione, ecc.

Sto usando un webservice (SOAP) Richiesta Sampler e hanno creato il "Nome server di IP", "Path", e "SOAP azione" paramaters in questo modo:

Server Name of IP: ${SERVER}
Path: ${PATH}/service
SOAPAction: http://${SERVER}${PATH}service#action

Questo funziona bene quando si utilizza un "Variabili definite dall'utente" elemento di configurazione. Mi limito a cambiare SERVER e PATH per tutto ciò che è specifico per la posizione che sto cercando di colpire. Tuttavia, questo è più di un dolore nel culo allora voglio affrontare. Quello che speravo di fare (e provato) è stato quello di aggiungere più controller se la logica nel mio thread Gruppo e verificare la presenza di $ {} MODE (un altro UDV) e agire di conseguenza, la creazione di mio server e il percorso. Così, ho avuto qualcosa come

"${MODE}" == "dev"
"${MODE}" == "local"
"${MODE}" == "production"

Una su ciascun controller Se, poi ho avuto un ambiente server e percorso appropriato elemento figlio UDV. I valori dall'ultimo UDV (in ordine di apparizione nel mio thread Gruppo) è stato sempre in uso, nonostante la mia ipotesi del programmatore Se il ritorno falso avrebbe mantenuto l'UDV dal corso di valutazione. Tuttavia, vedo nella documentazione che tutti UDVs sono valutati indipendentemente dal luogo prima che le discussioni siano avviati. Così, ho provato ad utilizzare Paramaters utente invece, ma i valori di $ {SERVER} e $ {PATH} nella mia SOAP campionatore non vengo sostituito e sto facendo delle domande di http: // $ {SERVER} $ {PATH}, che è non va bene.

Esiste un modo elegante per gestire questa situazione? Attualmente sto semplicemente copiando un incollare i valori di SERVER e PATH ogni volta che ho bisogno di cambiare il server che sto colpendo. So che potrei anche avere più piani di test, uno per ogni server che sto per test di carico, ma io fare frequenti aggiornamenti alla struttura, tra cui l'aggiunta di nuovi test, disabilitando i test esistenti e la modifica di alcune parti delle richieste SOAP in modo da avere un po 'di loro non sembra una buona soluzione.

Qualsiasi aiuto?

È stato utile?

Soluzione

risolto questo problema con un BeanShell Campionatore e variabili definite nel testplan sé.

Invece di usare l'elemento "User variabili definite" è possibile definire variabili per l'intero testplan. Basta cliccare sull'elemento radice dell'albero e aggiungere una variabile chiamata "modo" con il contenuto "dev", "locale" o la "produzione".

Nel testcase aggiungere il Sampler "Bean Shell Sampler" e aggiungere seguente codice:

if ("dev".equals(vars.get("mode"))) {
 vars.put("server","x.y.z");
}
if ("local".equals(vars.get("mode"))) {
 vars.put("server","127.0.0.1");
}
if ("production".equals(vars.get("mode"))) {
 vars.put("server","10.0.0.10");
}

È possibile quindi definire tutte le variabili che ti serve e anche aggiungere altri ambienti, se necessario.

Ma si può anche fare un passo ulteriore: Creare un semplice controller e mettere il vostro Bean Shell Sampler lì. In tutti i ThreadGroups, è ora possibile accedere a questo controller semplice con un controller di modulo. In questo caso, è necessario definire il selettore di ambiente solo una volta per l'intero testplan.

Altri suggerimenti

Personalmente ho trovato molto più facile avere diversi moduli UDV, tutto al livello più alto.

li ho mantenere disabilitato tranne quello che voglio usare.

Vedo che ci sono tanti modi di fare la stessa cosa; -)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top