J'essaie de tester un service HTTP avec JMeter. Le service HTTP nécessite une authentification via un mécanisme de jeton de support simple. J'essaie de procéder comme suit:
Jusqu'à présent, j'ai pu publier la demande, obtenir le jeton, l'extraire avec regex, l'enregistrer dans une variable et affirmer que la variable est correctement définie.
Le problème est d'obtenir la variable dans l'en-tête HTTP. Dans le "Header Manager", la valeur est définie comme suit:
Malheureusement, lorsque les prochaines demandes sont émises, leur en-tête d'autorisation a la valeur "Bearer". La recherche sur Internet m'a amené à croire que les en-têtes sont configurés avant le début du thread , ce qui expliquerait le "porteur"
Mon échantillonnage/regroupement/imbrication est le suivant:
Tous les tests échouent pour obtenir une ressource restreinte, qui échoue avec un 400, car l'en-tête d'autorisation est mal formé.
J'ai l'impression de manquer quelque chose de vraiment évident et/ou d'aborder ce problème dans le mauvais sens.
Modifier en août 2017:
Vous pouvez construire dynamiquement votre en-tête d'autorisation en utilisant Beanshell PreProcessor comme suit:
Ajoutez Beanshell PreProcessor en tant qu'enfant de la même demande avec le code suivant:
import org.Apache.jmeter.protocol.http.control.Header;
sampler.getHeaderManager().add(new Header("Authorization","Bearer " + vars.get("BEARER")));
Cela va construire un en-tête entièrement dynamique en utilisant la variable BEARER
.
sampler
est un raccourci vers la classe HTTPSamplerProxy qui donne accès à l'instance Sampler parentvars
est l'instance de la classe JMeterVariables qui permet un accès en lecture/écriture à toutes les variables JMeter disponibles dans les limites du contexte actuel (généralement le groupe de thread actuel)Voir Comment utiliser BeanShell: le composant intégré préféré de JMeter guide pour plus de détails sur les scripts Beanshell et le type de livre de recettes Beanshell.
Voir ce message sur le forum: http://www.jmeter-archive.org/Variables-in-HTTP-headers-td4579331.html
Vous devez déplacer votre connexion sous un contrôleur. Dans mon cas, j'ai utilisé un contrôleur une seule fois. Ensuite, après le contrôleur, vous pouvez ajouter le gestionnaire d'en-tête HTTP avec l'en-tête d'autorisation en tant que "Bearer $ {BEARER}" et il lira votre variable. C'est mieux que l'autre réponse car vous n'avez alors pas besoin de dupliquer le préprocesseur BeanShell sous chaque demande. Mon arbre ressemblait à ceci: