JMeter environnement de configuration spécifiques à l'
J'ai plusieurs JMeter plans de test qui doivent être exécutées dans des environnements différents, dire Dev, Test, UAT, Live. Dans chaque plan de test, je voudrais avoir un moyen simple de spécifier l'environnement d'utilisation. Chaque environnement a beaucoup de configuration comme le nom d'hôte, le port, le protocole ssl-cert, le nom d'utilisateur, mot de passe, numéros de compte et autres données de test.
Une chose que je suis en train de réaliser est la facilité de changer les environnements, tandis que l'aide de JMeter de GUI ou de l'exécution des scénarios des scripts de génération.
Une de mes idées est d'utiliser la "Comprennent Contrôleur", afin d'inclure jmx fichier qui dispose d'une liste de Variables Définies par l'Utilisateur et de configuration d'autres éléments. Cependant, JMeter ne prend pas en charge les variables dans le fichier inclus nom, donc je ne peux pas paramétrer le scénario par un nom de l'environnement. Comprennent Contrôleur prend en charge JMeter paramètre "includecontroller.le préfixe", mais il n'est pas très flexible, par exemple, je ne peux pas changer de JMeter GUI, je devrais changer JMeter fichiers de configuration et de le redémarrer.
J'ai essayé d'utiliser le Commutateur de Contrôleur, mais pas de chance, il ne bascule pas les éléments de configuration, seulement des échantillonneurs.
Quelle est la meilleure pratique de l'externalisation de l'environnement de configuration spécifiques à partir des scénarios de tests et de les partager entre plusieurs scénarios?
OriginalL'auteur kan | 2014-03-19
Vous devez vous connecter pour publier un commentaire.
Je suggère de remplacer toutes spécifiques à l'environnement des variables ou des valeurs avec JMeter Propriétés. Voir fonctions suivantes pour référence:
Par exemple, vous pouvez définir une propriété appelée
hostname
dans jmeter.propriétés fichier ou en tant que JMeter argument de ligne de commande comme suitet reportez-vous à l'intérieur de votre script:
${__P(hostname,)}
ou
${__property(hostname,,)}
Voir Apache JMeter Propriétés Guide De Personnalisation pour plus de détails.
vous utilisez ${__P(hostname, "default_value")} par exemple, ${__P(hostname,"localhost")}, Lorsque vous utilisez l'interface graphique, modifier les valeurs par défaut des paramètres et lors de l'exécution du lot, vous pouvez définir les propriétés.
Pour moi, il devient trop difficile, j'ai ~10 paramètres pour modifier lors de changement de l'environnement hôte, port, protocole, ssl clé, nom d'utilisateur, mot de passe et d'autres spécifiques au domaine des choses.
Notez que, plutôt que de spécifier toutes les propriétés sur la ligne de commande, vous pouvez spécifier un fichier de propriétés qui contient les propriétés via le
--propfile
argument. Puis il suffit de garder un fichier de propriétés pour chaque environnement.OriginalL'auteur Dmitri T
Comme le Manish Sapariya mentionné, Paramétrées Contrôleur est très utile pour préparer de configuration pour plus d'un environnement. Je l'ai utilisé en dernier lieu, j'ai travaillé et a commencé à la configuration désormais dans un nouveau lieu. C'est un peu de travail au début, mais plus tard, il est facile d'entretien. Il y a un peu de tutoriel dans le lien fourni ci-dessus, mais il ne prendra pas en considération le fait que vous souhaitez exécuter juste un env à l'heure. Je vais décrire un peu au-dessous, il sera peut-être utile.
Alors, lentement, étape par étape:
La chose la plus importante ici est que je les ai séparés en ce moment par des préfixes dans les noms de variables, de sorte que dans un UDV élément que j'ai des variables comme dev.serverIP, dev.serverPort, preprod.serverIP et ainsi de suite (la deuxième capture d'écran) rempli avec les valeurs pertinentes pour l'environnement.
En outre, dans l'un de ces UDVs j'ai environmentType variable (mentionné précédemment), avec la valeur par défaut de 'dev' (que vous pouvez modifier manuellement ici ou fournir une valeur différente lors du lancement en ligne de commande/CI ou quoi que ce soit)
Maintenant dans l'Env Profiler, j'ai Si les Contrôleurs(n ° 4 sur la première capture d'écran). Pour dev env j'ai (n ° 5 sur le premier écran):
"${environmentType}" == "dev"
Pour chaque env (si le contrôleur de), vous devez fournir une condition du type ci-dessus.
Et que c'est à peu près tout. Maintenant, le maintien d':
La bonne chose ici est que si vous voulez, disons, de dev env avec tous les tests et l'autre avec seulement quelques somke tests, vous pouvez préparer une copie, modification Si le contrôleur de prendre une autre valeur de la variable env (comme dev pour tous les tests, devsmoke pour des tests de fumée) et ajouter ou supprimer des modules contrôleurs dans ce nouveau profil.
Bien sûr, vous pouvez construire un peu et vous pouvez ues des threads différents pour les différentes parties du système pour faciliter l'entretien, il suffit de ne pas oublier de désactiver une de ces threads de travail en tant que conteneurs.
Je sais que c'est beaucoup de choses à faire quand vous commencez, mais il n'est pas si mauvais plus tard, au moment de l'ajout de quelques trucs - probablement la façon la plus simple de le faire de toute façon.
newVar = ${dev.newVar}
. Ensuite, difficile d'avoir certaines valeurs par défaut, par exemple, de s'exprimer que par "https" est à utiliser uniquement en prod et uat, mais tous les autres environnements de "http". Puis nous nous sommes retrouvés avec code JS que par ma réponse, dans notre cas: les nouveaux var - une ligne dans un fichier, un nouveau env - copie d'un répertoire, un nouveau plan de test - ajouter de l'échantillonneur.Bon à savoir. Il fonctionne très bien dans mon cas, mais comme vous l'avez dit, vous avez besoin d'un test pour les gouverner tous ;), donc si vous avez beaucoup de plans de test, alors il peut être un peu plus difficile à maintenir. Une chose que j'ai trouvé et peut être utile pour le chargement des variables à partir de fichier csv - peut-être cela aidera à votre lutte - jmeter-plugins.org/wiki/VariablesFromCSV
CSV semble mieux, je ne me souviens pas exactement pourquoi nous n'avons pas de cette façon. L'une des raisons - certains de nos revendeurs à valeur ajoutée sont multiligne fichiers (par exemple, un soldat de clés rsa) et il n'est pas facile à maintenir dans un CSV. Mais il est facile de modifier un code javascript pour charger des valeurs de fichiers à partir d'un par-annuaire de l'environnement.
Dans JMeter 4 je ne peux pas obtenir cette option. Il ruine mon script si mauvais que je ne peux même pas l'ouvrir la prochaine fois. Maintenant, je l'ai fait avec un JSR223 échantillonneur de script. (voir la réponse)
OriginalL'auteur Faflok
Que la solution actuelle, je suis en utilisant JSR223 sampler avec du code JavaScript personnalisé pour définir des variables à partir des propriétés externes-fichiers. Quelque chose comme ça:
Maintenant j'ai juste besoin d'ajouter ce code que le premier échantillonneur dans un plan de test et d'environnement spécifiques chemin d'accès comme l'échantillonneur de paramètre
args[0]
il va charger les variables dans le fichier et les mettre comme JMeter variables.Les fichiers sont généralement mis en cache par le système d'exploitation. Avez-vous réellement mesuré l'impact sur les performances? Je prédis que moins de 1% de cette suite de test qui a 200 threads.
OriginalL'auteur kan
Je n'ai pas utilisé moi-même, mais cette jmeter-pluing peut vous aider. Ici est extrait de la documentation
OriginalL'auteur Manish Sapariya
J'ai le même problème. Mon approche actuelle consiste à avoir plusieurs variable définie par l'utilisateur (UDV) éléments, par exemple, DevVariables, TestVariables, etc. Chacun de ces ont les mêmes variables définies (hôte, port, etc.). Puis-je désactiver manuellement ces UDV des éléments qui ne sont pas en cours d'utilisation.
Edit:
La JMeter Manuel De L'Utilisateur états -
"Les Variables Définies par l'Utilisateur de l'élément permet de définir un ensemble de variables, tout comme dans le Plan de Test. Notez que tous les UDV éléments dans un plan de test, où qu'ils soient - sont traitées au démarrage." Je ne suis pas sûr de ce que l'événement constitue le "démarrer", mais il donne l'impression que vous ne pouvez pas conditionnellement inclure UDVs, au moins pas via le contrôleur.
Vous pouvez être en mesure d'avoir un seul UDV par plan de test, où vous définissez les différentes variables (accueil, etc.). Peut-être que vous pouvez définir la valeur de chaque variable à l'aide d'un laid fonction JavaScript qui verrouille le passé-la valeur de la propriété.
Vous pouvez essayer de poser la question sur le Apache JMeter Utilisateur liste de diffusion. Il doit y avoir un moyen de faire ce que vous voulez.
OriginalL'auteur kc2001
- Je utiliser un JSR223 sampler avec Groovy pour enregistrer les nouveaux paramètres. Assurez-vous de mettre le JSR223 échantillonneur en une Seule Fois, de Contrôleur, de sorte qu'il est exécuté qu'une seule fois (par fil).
J'ai dans le plan de test toutes les variables enregistrées pour tous les environnements, comme ceci:
Puis-je spécifier quel environnement je veux sélectionner un paramètre de ligne de commande au démarrage comme:
-Denvironment=TEST
Mon JSR223 script va ajouter de nouvelles variables à l'épreuve, sans le TEST. préfixe. Dans mes scripts je viens de référence
${user}
C'est le script à utiliser:
OriginalL'auteur Sven
Je me rends compte que cette question est ancienne, mais si vous utilisez l'interface utilisateur graphique et l'exécution des tests manuellement, une approche très simple est d'avoir une Variables Définies par l'Utilisateur de l'élément par l'environnement, et d'avoir un de ces activé lors de l'exécution de l'essai. Mais je ne comprends toujours pas pourquoi jmeter ne prend pas en charge la définition de l'UDV:s conditionnelle.
.properties
fichiers par un script fonctionnait assez bien.OriginalL'auteur Gubbi