Bonjour,
300 000 appels/heure = 83 appels/sec c'est beaucoup mais pas non plus enorme.
1) Il faut que le JMeter et la machine qui héberge l'application à tester soit à proximité réseau (même salle machine) sinon il y a un gros risque d'être limité par le reseau.
2) Je pense qu'avec le keep alive activé c'est plus facile surtout si l'appel est en https.
4) Sur la machine avec JMeter il faut pour les environnements Linux changer les ulimits pour le compte qui fait tourner JMeter en particulier augmenter le nb nofiles à 16384 et aussi le noproc à 16384.
5) Tu peux ajouter un attente dynamique pour simuler un pacing de 1sec ou 2sec (le pacing est le temps minimum avant de faire une autre itération) par exemple un appel fait 1,2 sec alors l'attente dynamique sera de 0,8 sec pour un pacing à 2sec.
Pour faire du pacing, il faut stocker dans une variable le temps du debut de l'itération (ex en groovy vars.put("V_PACING_START_ITER_MILLISEC","" + System.currentTimeMillis()); puis après les différents appels (en fin du script) il faut calculer le temps restant pour atteindre le pacing (ex :
long
lPacingIterationMilli= 2000; // pacing a 2sec
String sPACING_START_ITER_MILLISEC = vars.get("V_PACING_START_ITER_MILLISEC");
long lStartIter = Long.parseLong(sPACING_START_ITER_MILLISEC);
long lCurrentTime = System.currentTimeMillis();
long lDurationIter = lCurrentTime - lStartIter;
long lWaitPacing =
lPacingIterationMilli
- lDurationIter;
if (lWaitPacing <= 0) {
lWaitPacing = 0;
}
vars.put("V_PACING_ITER_WAIT", "" + lWaitPacing);
et ajouter un Flow Control Action avec la pause : ${V_PACING_ITER_WAIT}
6) Si un thread fait les appels en 2 sec (pacing) alors le thread fait 30 itération/min ou 1800 itérations/h.
Pour atteindre les 300 000/h, il faut 300 000/1800 = 166,66 threads, on arrondi à 170 threads.
Autre exemple, le pacing est de 30 sec, un thread fait 2 itérations/min ou 120 itérations/h pour faire les 300 000 appels/h, il faut 300 000/120 = 2500 threads. Je pense qu'il faut mieux être entre 1000 et 3000 threads maxi par instance de JMeter si tu dépasses les 3000 threads, il faut surement 2 injecteurs JMeter avece un test de performance distribué.
7) Plutôt qu'un backendlistener InfluxDB, j'écrirai directement dans un fichier csv. Si tu prends un backendlistener, il ne faut pas prendre le Raw mais
InfluxDBBackendListenerClient qui fait des moyennes sur quelques secondes (je ne me rappelle plus sur quelle durée se fait la moyenne). Le risque est de saturé InfluxDB ou bien d'utiliser pas mal de bande passante pour envoyer les résultats à InfluxDB.
Cordialement
VIncent DAB.