Веб-приложение Java для нагрузочного тестирования - найдите время ответа транзакции TPS / Avg - PullRequest
2 голосов
/ 20 апреля 2010

Я хотел бы создать свой собственный инструмент нагрузочного тестирования на 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) {

        }
    }
}

1 Ответ

1 голос
/ 21 апреля 2010

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

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

...