2
votes

Le paramétrage supprime le caractère d'échappement de la demande JSON POST et donne l'erreur de demande incorrecte 400 dans JMeter

L'enregistrement de script JMeter capture la demande de publication JSON avec trois caractères d'échappement (\) et le réexécute tel quel sans paramétrage, cela fonctionne bien. Mais si nous utilisons une variable "$ {xyz}" n'importe où dans le corps de la requête et exécutée dans JMeter, les trois barres obliques (\) deviennent deux barres obliques (\) lors de la transmission de la requête à l'application. Ensuite, la demande a échoué en tant que "BAD Request" car l'application n'accepte pas la demande avec deux barres obliques.

J'ai déjà essayé la méthode "FileToString" mais sans succès.

"Draft":{
"id": 123654656,
"draftdata":{\\"accCat\\":\\"207\\",\\"accNumber\\":\\"656565
\\",\\"id\\":${Var_ID},...}

Quand je passe une requête avec une variable, la requête devient comme ci-dessous et peut être vue dans l'arborescence des résultats en tant que requête body

 "Draft":{
"id": 123654656,
"draftdata":{\\\"accCat\\\":\\\"207\\\",\\\"accNumber\\\":\\\"656565
\\\",\\\"id\\\":${Var_ID},...}
}

 "Draft":{
"id": 123654656,
"draftdata":{\\\"accCat\\\":\\\"207\\\",\\\"accNumber\\\":\\\"656565
\\\",\\\"id\\\":9876,...}
}

Mais sans variable de paramétrage cela fonctionne parfaitement car la requête va avec trois barres obliques (\).


0 commentaires

3 Réponses :


0
votes

Je ne peux pas reproduire votre problème en utilisant la charge utile dans un fichier texte brut et la fonction __FileToString ()

 entrez la description de l'image ici

JMeter envoie les données textuelles exactement telles qu'elles incluent des barres obliques inverses triples aux endroits appropriés. J'ai même capturé la demande à l'aide de l'outil de détection Wireshark pour exclure un problème potentiel avec l'écouteur Afficher l'arbre des résultats

 entrez la description de l'image ici

Il se peut que vous souffriez d'une forme de problème qui a déjà été résolue dans la dernière version de JMeter, selon les bonnes pratiques de JMeter, vous devez toujours utiliser la dernière version de JMeter alors assurez-vous de passer à JMeter 5.1 ou quelle que soit la dernière version disponible sur JMeter Downloads et vous devriez pouvoir utiliser le paramétrage sans aucun problème.


1 commentaires

Comme vous avez utilisé la fonction __FileToString () sans la fonction __eval, elle ne résout pas la valeur de la variable et considère la variable comme une chaîne. Lorsque nous utilisons la méthode $ {__ eval ($ __ FileToString () .., cela résout la variable mais supprime une barre oblique. Le problème est donc toujours là.



0
votes

J'ai le même problème dans JMeter 5.1. J'ai JSON qui est intégré dans JSON. Exemple:

{"messages":"{\"outputs\":[\"{\\"objectstatus\\":\\"152\\"}\"]}

Ce qui serait publié est ceci, qui est JSON invalide:

{"messages":"{\"outputs\":[\"{\\\"objectstatus\\\":\\\"${__Random(100,200,)}\\\"}\"]}"}

Même si je déplace toutes les fonctions hors de le corps de la requête et n'utilisez que la substitution de variable, la même chose se produit.

La solution de contournement est de «double échapper» tout. Signification \ "devient \\" et \\\ "devient \\\\\\".


0 commentaires

0
votes

https://bz.apache.org/bugzilla/show_bug.cgi ? id = 63255 J'ai ajouté un simple test JMX, montrant le comportement incohérent. Jmeter 5.3 l'a toujours.


2 commentaires

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses aux liens uniquement peuvent devenir invalides si la page liée change.


La partie essentielle ici est de relier l'ID de défaut Jmeter ayant toutes les informations dans la plaque, aux questions SO connexes. Ne pensez pas que le bugzilla d'Apache irait n'importe où :)