0
votes

Manipulation de l'appels d'API asynchrones à Jmètre

J'utilise JMeter pour des tests fonctionnels, ci-dessous est un problème que je suis confronté et que je n'ai besoin d'aide / suggestion sur la façon de surmonter cela.

J'ai un groupe de threads composé de 2 demandes, 1st est un appel API et 2e envoie un message à MQ actif.

Maintenant, le flux est que je dois d'abord faire l'appel d'API (cela attendra la réponse), puis envoyez le message à une file d'attente MQ active particulière, puis je n'aurai que la réponse à l'API.

Mais puisque JMeter effectue une exécution séquentielle des demandes, elle est bloquée à l'appel de l'API en attente de la réponse et n'exécute jamais la deuxième partie.

J'ai travaillé sur la solution ci-dessous, mais même cela n'a pas aidé.

1 Utilisez un contrôleur parallèle et mettez à la fois l'API et l'appel MQ actif sous le même. 2 Ajoutez une minuterie à l'appel MQ actif, de sorte qu'il a juste fait après l'appel de l'API (2 secondes)

Mais lorsque j'ai vérifié dans les détails, je vois que les deux demandes sont envoyées en même temps et que la minuterie n'entre en vient nulle part.

Toute façon que je puisse gérer ce scénario?

Veuillez noter que je n'aurai aucune réponse à l'API uniquement lorsque j'envoie un message à la file d'attente MQ active particulière, sinon le délai d'attente dans une minute.


0 commentaires

4 Réponses :


0
votes

Utilisez tandis que le contrôleur . Il continuera à exécuter jusqu'à ce que le résultat souhaité puis la demande suivante soit exécutée.

J'espère que cela aide.

mise à jour: - Tandis que le contrôleur de boucle exécute ses échantillonneurs jusqu'à ce que la condition spécifiée ne soit pas définie sur false . La condition peut être une variable ou une fonction qui éventuelle éventuellement à la chaîne 'False'.

Donc, vous devez spécifier une variable ou une fonction dans la boucle, qui a une valeur «vraie» et devient «false» ailleurs dans le script. Une fois que cela passe à «Faux», JMeter quittera la boucle tandis que la boucle.

Par exemple, si vous utilisez un extracteur X-Chemin de votre script, qui ont une variable nommée statut et que sa valeur change de «Démarrer» à «Terminer» lors de l'exécution et que vous souhaitez exécuter votre script jusqu'à ce que 'Terminer' ait Pas été rempli, alors vous pouvez utiliser l'expression $ {__ JavaScript ("$ {imp_status} '! =' Terminer '" ",)} Dans votre boucle et il exécutera les échantillonneurs sous le contrôleur jusqu'à ce que le statut = la fin est rempli.

C'est une sorte de scrutin basé sur certaines conditions. Dans votre première réponse de l'API, considérez une valeur à apparaître comme la condition sur laquelle le premier appel de l'API réussit.


1 commentaires

Pouvez-vous s'il vous plaît élaborer sur cette approche, un peu plus de détails s'il vous plaît.



0
votes

Pour votre déclaration de problème, la conception suivante fonctionnera.

  • Utilisez 2 groupes de threads, ajoutez l'appel de l'API au premier groupe de threads et le message à un appel MQ actif au deuxième groupe de threads
  • Ajoutez un délai au deuxième groupe de thread de manière à ne pas fonctionner avant le premier groupe de fil
  • Run Test Plan

     Entrez la description de l'image ici Entrez la description de l'image ici


1 commentaires

Je souhaite qu'ils font partie du groupe de fil, j'utilise JMeter en tant qu'outil de fonction où nous représentons 1 groupe de threads sous forme de TC, et tous les échantillonneurs / affirmations présents dans ce groupe de thread peuvent être considérés comme des étapes de test.



0
votes

Il semble que vous ayez juste besoin de définir Délai d'expiration pour la demande HTTP ,

Si vous définissez le délai de réponse sous 60000 (millisecondes), et il n'attendra qu'une minute, puis continuer à demander la prochaine demande

Connecter le délai de connexion du délai d'attente. Nombre de millisecondes à attendre une connexion ouverte. Non

Délai de réponse de réponse de réponse. Nombre de millisecondes à attendre une réponse. Notez que cela s'applique à chaque attente pour une réponse. Si la réponse du serveur est envoyée dans plusieurs morceaux, la durée globale écoulée peut être plus longue que le délai d'attente.


1 commentaires

Non, je dois envoyer la deuxième demande (message à MQ actif) alors que la première demande est toujours en cours d'exécution.



0
votes
  1. Votre approche parallèle du contrôleur fonctionnera, mais vous devez modifier la configuration un peu, quelque chose comme:

     Entrez la description de l'image ici

  2. Vous pouvez mettre votre demande d'activemq sous un autre groupe de threads et utiliser Plugin de communication inter-thread pour la synchronisation entre les threads
  3. Vous pouvez conserver la configuration actuelle, mais remplacer l'échantillonneur JMS avec le JSR223 Sampler et envoyez le message à ActivemQ Programmatiquement:

     Entrez la description de l'image ici

    Représentation de code textuel pour votre convenance: XXX


0 commentaires