Тестирование нагрузки Java Web Application - Найти время отклика транзакций TPS / AVG

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

  •  28-09-2019
  •  | 
  •  

Вопрос

Я хотел бы построить свой собственный инструмент тестирования нагрузки в Java с целью возможности загрузить тестирование веб-приложения, которое я создаю на протяжении всего цикла разработки. Веб-приложение будет принимать сервер к серверу HTTP POST-запросы, и я хотел бы найти его начальную транзакцию в секунду (TPS), наряду с временем отклика от окупаемости.

Сообщения о запросах и ответах будут в XML (я не думаю, что это действительно применимо, хотя :)).

Я написал очень простое приложение Java для отправки транзакций и подсчитать, сколько транзакций он смог отправить за одну секунду (1000 мс), однако я не думаю, что это лучший способ загрузить тест. Действительно, я хочу, чтобы отправить любое количество транзакций в одно и то же время - то есть 10, 50, 100 и т. Д.

Любая помощь будет оценена!

Ох, и вот мой текущий тестовый код приложения:

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

        }
    }
}
Это было полезно?

Решение

Есть некоторые проблемы в вашем коде. Это плохой выбор, чтобы использовать System.currentTimeMillis() Как он использует системный таймер, который имеет точность из 1 миллисекунды, но точность около 10-20 миллисекунд. Вы должны использовать System.nanoTime() Для этого измерения. А также инструмент тестирования нагрузки должен быть в состоянии проверить код в многопоточной среде.

Итак, вы должны использовать Инструменты с открытым исходным кодом :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top