【问题标题】:Load Testing Java Web Application - find TPS / Avg transaction response time负载测试 Java Web 应用程序 - 查找 TPS / Avg 事务响应时间
【发布时间】:2025-12-21 14:50:06
【问题描述】:

我想用 Java 构建自己的负载测试工具,目标是能够对我在整个开发周期中构建的 Web 应用程序进行负载测试。 Web 应用程序将接收服务器到服务器的 HTTP Post 请求,我想找到它的每秒起始事务 (TPS) 容量以及平均响应时间。

Post 请求和响应消息将采用 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) {

        }
    }
}

【问题讨论】:

  • 您的问题到底是什么?另外,您是否考虑过使用现有工具?一些选项在这里:opensourcetesting.org/performance.php。在我看来,适当的压力测试并非易事。
  • 感谢您的评论。确切的问题:同时发送多个 http post 事务的最佳方法是什么?参考现有工具:最终我想向用户提供一些报告,包括过去一小时的平均响应时间等各种信息,所以我预见该工具将来需要大量定制,所以我想建立自己的是最好的选择。
  • 另外,感谢指向 opensourcetesting.org/performance.php 的指针,我正在使用 Apache JMeter 尝试一些东西。

标签: load load-testing tps


【解决方案1】:

您的代码中存在一些问题。使用System.currentTimeMillis() 是一个不好的选择,因为它使用精度 为1 毫秒,但准确度 约为10-20 毫秒的系统计时器。您应该使用System.nanoTime() 进行此测量。并且负载测试工具应该能够在多线程环境中测试代码。

所以,你应该使用open source tools :)

【讨论】: