Le test en charge d'applications Web Java - trouver le temps de réponse des transactions TPS / Moy
-
28-09-2019 - |
Question
Je voudrais construire mon propre outil de test de charge en Java dans le but d'être en mesure de test de charge d'une application web que je suis bâtiment tout au long du cycle de développement. L'application Web sera serveur reçoit au serveur HTTP requêtes POST et je voudrais trouver sa transaction à partir par seconde capacité (TPS) ainsi que le temps de réponse avgerage.
La demande de poste et les messages de réponse sera en XML (je ne » pense que c'est vraiment applicable si :)).
J'ai écrit une application Java très simple d'envoyer des transactions et compter le nombre de transactions a été en mesure d'envoyer en une seconde (1000 ms) mais je ne pense pas que ce soit le meilleur moyen de test de charge. Vraiment ce que je veux est d'envoyer un certain nombre de transactions exactement en même temps -. À savoir 10, 50, 100, etc
Toute aide serait appréciée!
Oh, et voici mon code actuel d'application de test:
Thread[] t = new Thread[1];
for (int a = 0; a < t.length; a++) {
t[a] = new Thread(new MessageLoop());
}
startTime = System.currentTimeMillis();
System.out.println(startTime);
for (int a = 0; a < t.length; a++) {
t[a].start();
}
while ((System.currentTimeMillis() - startTime) < 1000 ) {
}
if ((System.currentTimeMillis() - startTime) > 1000 ) {
for (int a = 0; a < t.length; a++) {
t[a].interrupt();
}
}
long endTime = System.currentTimeMillis();
System.out.println(endTime);
System.out.println("Total time: " + (endTime - startTime));
System.out.println("Total transactions: " + count);
private static class MessageLoop implements Runnable {
public void run() {
try {
//Test Number of transactions
while ((System.currentTimeMillis() - startTime) < 1000 ) {
// SEND TRANSACTION HERE
count++;
}
}
catch (Exception e) {
}
}
}
La solution
Il y a quelques problèmes dans votre code. Il est mauvais choix d'utiliser System.currentTimeMillis()
car il utilise la minuterie du système qui ont précision de 1 milliseconde, mais précision environ 10-20 millisecondes. Vous devez utiliser System.nanoTime()
pour cette mesure. Et l'outil test de charge devrait également être en mesure de code de test dans un environnement multithread.
Alors, vous devez utiliser outils open source :)