在我们公司,我们有单元测试。我们正在考虑编写一些自动化性能测试,这些测试也将成为测试套件的一部分,以便开发人员和自动化构建都可以运行它们。这些测试将执行某些操作,如果执行时间超过预估时间,则会失败。
问题在于,不同的计算机具有不同的CPU速度,并且在后台运行的进程可能会减慢执行速度。那么我们该如何进行这些测试呢?
问题在于,不同的计算机具有不同的CPU速度,并且在后台运行的进程可能会减慢执行速度。那么我们该如何进行这些测试呢?
time
获取已用 CPU 时间,并从 /proc/cpuinfo
获取 CPU 速度以测量计算所花费的周期数。如果想要了解代码更改如何影响性能,并确保性能大于或等于以前的构建,则需要每次在已知硬件配置文件上运行测试。最准确的方法是设置一台或多台机器,每次执行测试时都使用这些机器进行测试。如果许多开发人员需要同时进行测试,可能值得创建一个虚拟机映像,他们可以启动并指向进行测试的位置。
不应该在开发人员的计算机上运行这些测试,因为正如您所提到的,各种因素可能会影响这些计算机上的测试结果。
除非将这些条件明确设置为测试用例的一部分,否则应避免在受外部系统负载/压力(低磁盘空间、网络带宽、内存、CPU等)的情况下尝试测量性能。例如,您可以进行3个不同的测试运行,其中一个是在机器没有负载的情况下进行的,另一个是在中等负载下进行的(模拟后台运行的其他程序),另一个是在高负载下进行的。
您也可以在其他压力/性能测试的一部分上运行各种硬件配置的测试,但是您可能不会从每个构建中运行它们中获得太多价值。然而,如果您想要,您可以针对不同的硬件配置运行几次不同的测试运行,这需要更多的设置,因为您需要设置额外的机器和/或VM映像以及基础架构来启动针对这些机器的测试,收集结果并对其进行报告。
这也是关于公差(或可接受容量范围)的问题,这将使您的测试有效。理想情况下,正如已经说明的那样,您需要一个可预测、稳定和一致的设置,以进行任何有用的比较。话虽如此,如果您了解系统单元测试的基本操作范围(可用CPU、可用内存等),则可以在已知资源公差范围内的系统和条件混合中进行早期开发人员测试。