Carga de aplicaciones Web pruebas Java - encontrar TPS / Promedio tiempo de respuesta de la transacción

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

  •  28-09-2019
  •  | 
  •  

Pregunta

Me gustaría construir mi propia herramienta de pruebas de carga en Java con el objetivo de ser capaz de prueba de carga de una aplicación web que estoy construyendo en todo el ciclo de desarrollo. La aplicación web va a recibir del servidor a servidor HTTP Post peticiones y me gustaría encontrar su transacción inicial por segundo de capacidad (TPS), junto con el tiempo de respuesta avgerage.

Los mensajes de solicitud y respuesta post será en XML (I dont' pensar que realmente aún siendo aplicables :)).

He escrito una aplicación muy sencilla de Java para enviar transacciones y contar el número de transacciones que era capaz de enviar en un segundo (1000 ms), sin embargo no creo que esta es la mejor manera de prueba de carga. Realmente lo que quiero es enviar cualquier número de transacciones en exactamente el mismo tiempo -. Es decir, 10, 50, 100, etc.

Cualquier ayuda se agradece!

Ah, y aquí está mi actual código de aplicación de prueba:

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

        }
    }
}
¿Fue útil?

Solución

Hay algunos problemas en su código. Es una mala opción para el uso System.currentTimeMillis() ya que el uso del temporizador del sistema que tienen precisión de 1 milisegundo, pero exactitud Cerca de 10-20 milisegundos. Debe utilizar para este System.nanoTime() mediciones. Y también la herramienta de carga de prueba debe ser capaz de código de prueba en el entorno multiproceso.

Por lo tanto, se debe utilizar herramientas de código abierto :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top