2010-03-03 4 views
3

J'utilise JMeter pour tester un service web SOAP. Le service Web existe dans un tas d'endroits, comme mon localhost, une boîte de dev, une boîte d'intégration, une boîte de production, etc.JMeter - options de configuration facilement modifiables

J'utilise un échantillonneur de demande WebService (SOAP) et j'ai défini le "Nom du serveur IP », "chemin", et "action SOAP" paramaters comme ceci:

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

Cela fonctionne bien lorsque vous utilisez un "élément de configuration utilisateur Variables définies". Je change juste le SERVEUR et le CHEMIN à tout ce qui est spécifique à l'endroit que j'essaye de frapper. Cependant, c'est plus une douleur dans le cul que je veux traiter. Ce que j'espérais faire (et essayé) était d'ajouter plusieurs contrôleurs logiques If dans mon groupe Thread et de vérifier $ {MODE} (un autre UDV) et d'agir en conséquence, en configurant mon SERVEUR et mon PATH. Donc, j'avais quelque chose comme

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

Un sur chaque contrôleur Si, j'avais un enfant élément UDV configurer le serveur et PATH approprié. Les valeurs du dernier UDV (dans l'ordre d'apparition dans mon groupe de threads) étaient toujours utilisées, en dépit de mon hypothèse que le contrôleur If retournant false empêcherait l'UDV d'être évalué. Cependant, je vois dans les docs que tous les UDV sont évalués indépendamment de l'emplacement avant que les threads ne soient démarrés. J'ai donc essayé d'utiliser User Paramaters, mais les valeurs pour $ {SERVER} et $ {PATH} dans mon sampler SOAP ne sont pas remplacées et je fais des requêtes à http: // $ {SERVER} $ {PATH} qui est pas bon.

Y at-il une façon élégante de gérer cela? Actuellement, je copie juste un collage des valeurs pour SERVEUR et CHEMIN chaque fois que j'ai besoin de changer le serveur que je frappe. Je sais que je pourrais aussi avoir plusieurs plans de test, un pour chaque serveur que je vais tester, mais je fais des mises à jour fréquentes de la structure, y compris ajouter de nouveaux tests, désactiver des tests existants et changer certaines parties des requêtes SOAP. Cela ne semble pas être une bonne solution.

Une aide?

+1

Qu'en est-il d'avoir plusieurs UDVs (du nom de vos environnements) et la désactivation de tous, mais celui que vous avez besoin? – aromero

Répondre

4

Nous avons résolu ce problème avec un échantillonneur BeanShell et les variables définies dans le plan de test lui-même. Au lieu d'utiliser l'élément "Variables définies par l'utilisateur", vous pouvez définir des variables pour l'ensemble du plan de test au lieu d'utiliser l'élément "Variables définies par l'utilisateur". Cliquez simplement sur l'élément racine de l'arbre et ajoutez une variable appelée "mode" avec le contenu "dev", "local" ou "production".

Dans le testcase ajouter le passeur d'échantillons « Bean Sampler Shell » et ajoutez code suivant:

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"); 
} 

Vous pouvez alors définir toutes les variables dont vous avez besoin et ajouter d'autres environnements en cas de besoin.

Mais vous pouvez également aller plus loin: Créez un contrôleur simple et placez-y votre échantillonneur de carottes. Dans tous les ThreadGroups, vous pouvez maintenant accéder à ce contrôleur simple avec un contrôleur de module. Dans ce cas, vous devez définir votre sélecteur d'environnement une seule fois pour l'intégralité du Testplan.

+1

+1. Merci. Je vais explorer cela comme une solution. Cependant, je l'ai fait fonctionner comme je l'avais, je devais simplement définir les variables SERVER et PATH en dehors du groupe Thread et les remplacer par le If Controller -> User Parameters. – sberry

0

Personnellement, j'ai trouvé beaucoup plus facile d'avoir plusieurs modules UDV, tous au plus haut niveau. Je les garde toutes désactivées sauf celle que je veux utiliser.

Je vois qu'il ya tellement de façons de faire la même chose ;-)

Questions connexes