自动化性能测试。

4
在我们公司,我们有单元测试。我们正在考虑编写一些自动化性能测试,这些测试也将成为测试套件的一部分,以便开发人员和自动化构建都可以运行它们。这些测试将执行某些操作,如果执行时间超过预估时间,则会失败。
问题在于,不同的计算机具有不同的CPU速度,并且在后台运行的进程可能会减慢执行速度。那么我们该如何进行这些测试呢?

这是什么类型的应用程序?- 网页,桌面... - blank
5个回答

2
一种策略是为最佳机器设计性能指标;只要在更差的机器上运行足够快,就可以保证在生产中获得更好的性能。基本上,包含一个调整因素,知道它必须在较慢的机器上运行,可能是在测试/开发期间。
另一种策略是在测试设置期间进行一些基准测试,并使用该时间量作为您的“单位时间”,而不是使用秒。例如,使用狗慢的递归算法计算第20个斐波那契数,并说所有测试都必须在10个“20-fibs”内运行,因此虽然在慢速机器上的实际时间会变慢,但您有一个与机器无关的指标来衡量其运行情况。
后台运行的进程更难处理。显然,通常不希望其他事物干扰您的测试,因此一种策略是尽可能消除这种干扰 - 普通开发人员可能会杀死一些进程并重新运行,如果出现故障,则应将持续集成框架保持相对清晰。
如果这样做不起作用或效果不好,则可以尝试相反的方法:同时运行一堆CPU / IO密集型进程和测试以模拟超载系统,如果测试在该环境下通过,则性能在正常系统中应该很好。

1
根据程序的限制资源(I/O、CPU、内存),您可以通过测量使用的 CPU 时间并将其与系统速度进行比较来获得良好的结果。例如,我的当前程序的性能测试使用 time 获取已用 CPU 时间,并从 /proc/cpuinfo 获取 CPU 速度以测量计算所花费的周期数。
这种方法有两个注意点:首先,它不测量实现的并行性;其次,它不测量外部性能因素,如 I/O 使用情况。

1

如果想要了解代码更改如何影响性能,并确保性能大于或等于以前的构建,则需要每次在已知硬件配置文件上运行测试。最准确的方法是设置一台或多台机器,每次执行测试时都使用这些机器进行测试。如果许多开发人员需要同时进行测试,可能值得创建一个虚拟机映像,他们可以启动并指向进行测试的位置。

不应该在开发人员的计算机上运行这些测试,因为正如您所提到的,各种因素可能会影响这些计算机上的测试结果。

除非将这些条件明确设置为测试用例的一部分,否则应避免在受外部系统负载/压力(低磁盘空间、网络带宽、内存、CPU等)的情况下尝试测量性能。例如,您可以进行3个不同的测试运行,其中一个是在机器没有负载的情况下进行的,另一个是在中等负载下进行的(模拟后台运行的其他程序),另一个是在高负载下进行的。

您也可以在其他压力/性能测试的一部分上运行各种硬件配置的测试,但是您可能不会从每个构建中运行它们中获得太多价值。然而,如果您想要,您可以针对不同的硬件配置运行几次不同的测试运行,这需要更多的设置,因为您需要设置额外的机器和/或VM映像以及基础架构来启动针对这些机器的测试,收集结果并对其进行报告。


1
+1 对Sam的回答。我过去做过这样的事情,关键是锁定您的性能测试环境,并确保您最小化任何潜在的波动。
在开发人员系统上运行测试可能对个人开发人员有用,但是拥有一个中央系统来运行测试至关重要。关于在虚拟机中执行此操作的一个注意事项:确保您了解VM主机系统上的负载,因为那里的负载可能会影响托管的VM的性能。
当我在夜间进行烟雾检查构建期间运行这些套件时,我获得了最佳、最一致和最有用的结果。

0

这也是关于公差(或可接受容量范围)的问题,这将使您的测试有效。理想情况下,正如已经说明的那样,您需要一个可预测、稳定和一致的设置,以进行任何有用的比较。话虽如此,如果您了解系统单元测试的基本操作范围(可用CPU、可用内存等),则可以在已知资源公差范围内的系统和条件混合中进行早期开发人员测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接