Тестирование нагрузки Java Web Application - Найти время отклика транзакций TPS / AVG
-
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()
Для этого измерения. А также инструмент тестирования нагрузки должен быть в состоянии проверить код в многопоточной среде.
Итак, вы должны использовать Инструменты с открытым исходным кодом :)