Load Testing Java Web Application - trova TPS / Avg tempo di risposta delle transazioni

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

  •  28-09-2019
  •  | 
  •  

Domanda

Vorrei costruire il mio strumento di test di carico in Java con l'obiettivo di essere in grado di test di carico di un'applicazione web che sto costruendo per tutto il ciclo di sviluppo. L'applicazione web riceverà server a server richieste HTTP Post e vorrei trovare la sua operazione di partenza al secondo di capacità (TPS), insieme con il tempo di risposta avgerage.

I messaggi di richiesta e di risposta post verrà in XML (I dont' pensare che è davvero sebbene applicabili :)).

Ho scritto una semplice applicazione Java per inviare le transazioni e contare quante transazioni è stato in grado di inviare in un secondo (1000 ms), tuttavia non credo che questo sia il modo migliore per test di carico. Davvero quello che voglio è quello di inviare un numero illimitato di transazioni esattamente allo stesso tempo -. Vale a dire 10, 50, 100 etc

Qualsiasi aiuto sarebbe apprezzato!

Oh, e qui è il mio codice di prova applicazione corrente:

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

        }
    }
}
È stato utile?

Soluzione

C'è qualche problema nel codice. E 'cattiva scelta per l'uso System.currentTimeMillis() come si usa timer di sistema che hanno di precisione di 1 millisecondo, ma precisione di circa 10-20 millisecondi. Si dovrebbe usare System.nanoTime() per questo le misurazioni. E anche caricare strumento di test dovrebbe essere in grado di codice di prova in un ambiente multithread.

Quindi, si dovrebbe usare strumenti open source :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top