Le test en charge d'applications Web Java - trouver le temps de réponse des transactions TPS / Moy

StackOverflow https://stackoverflow.com/questions/2675210

  •  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) {

        }
    }
}
Était-ce utile?

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 :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top