java - 准确衡量跨环境的性能测试

标签 java performance environment automated-tests

我在这个问题中使用了 Java,但这确实适用于所有现代应用程序开发。我们的“环境管道”与其中许多管道一样,如下所示:

  • 开发者沙箱
  • 持续集成和测试
  • 质量保证/分期
  • 制作

每种环境中的硬件、可用 RAM 和 CPU 都不同:我的笔记本电脑是 2GB 双核 Windows 机器。测试在 4GB 机器上运行。生产是两台(负载平衡的)8GB 四核服务器。

显然,相同的代码在这些不同的机器(环境)上运行时会表现不同。

我正在考虑为我的一些类编写自动化性能测试,其形式如下:

private static final long MAX_TIME = 8000;

@Test
public final void perfTestSomething() {
    long start = System.currentTimeInMillis();

    // Run the test

    long end = System.currentTimeInMillis();

    assertTrue((end - start) < MAX_TIME);
}

因此,如果测试运行时间超过 8 秒,则自动性能测试失败。

但后来我突然意识到:代码在不同的环境中运行会有所不同,并且会根据 JVM 和 GC 的状态运行不同。我可以在自己的机器上运行相同的测试 1000 次,但结果却截然不同。

所以我问:当代码从一个环境提升到另一个环境时,如何准确/可靠地定义和衡量自动化性能测试?

提前致谢!

最佳答案

您可能只想在控制更严格的给定位置运行性能测试。您不一定需要在所有环境中运行它们,这样做没有什么好处。您应该在最接近生产配置的环境中运行它们(这才是您真正关心的,对吧?)。

此外,请确保在性能限制中给自己合理的开销。不要将它们锁定在您的服务器现在所做的之上。选择一些合理的阈值来考虑当前运行中的一些变化。

从长远来看,我发现更有用的是性能数据随时间变化的图表。不是硬性限制。这样我们就可以观察各种功能随时间变化的趋势,并在趋势太高时对其进行攻击。

关于java - 准确衡量跨环境的性能测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9116477/

相关文章:

linux - 从涉及输入和输出文件的不同工作目录在 linux 中运行程序

java - 将 slf4j 与 log4j2 一起使用是否值得

java - RSA 加密 : Difference between Java and Android

java - 检测 Flappy Bird 克隆中特定区域的触摸

javascript - 如何展平嵌套引用中的数据?

c++ - 为什么这个 C++ for 循环的执行时间有显着差异?

java - 如何使用 Java 8 流过滤列表并从值数组开始

android - 在 Android 中实现媒体的 Smartway

python - 使用 Pip 将软件包安装到 Anaconda 环境

python - 无法从 cron 作业中找到 dotenv 环境变量