2011-11-29 108 views
3

在我们公司我们有单元测试。 我们正在考虑编写一些自动化性能测试,这些测试也将成为测试套件的一部分,以便开发人员和自动化构建人员都能够运行它们。如果测试花费的时间超过一些预估时间,测试将会执行一些操作,然后失败。自动化性能测试

的问题是,不同的计算机具有不同的CPU速度,并还处理在后台运行可以减慢执行。那么我们应该如何去做这些测试呢?

+0

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

+0

网格计算。 – Lev

回答

2

一种策略是设计该代码将运行在最好的机器你的性能指标;只要在更差的机器上运行得足够快,就可以保证在生产中获得更好的性能。基本上,包括知道它必须在较慢的机器上运行的模糊因素,大概在测试/开发期间。

另一种策略是测试设置过程中做一些基准,并使用该时间的金额作为“单位时间”,而不是用秒。例如,使用dog-slow递归算法计算第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的回应。过去我已经做了很多次,关键是要锁定你的性能测试环境,并确保你最大限度地减少任何潜在的流量。

在devs的系统上运行测试可能是个别开发者的有用标志,但是有一个中央系统来运行测试是至关重要的。关于在虚拟机中执行此操作的一个警告:确保您了解虚拟机主机系统上的负载,因为那里的负载可能会影响托管虚拟机的性能。

我在夜间烟雾检查期间运行这些套件时,得到了最好,最一致和最有用的结果。

0

这也是一个关于容差(或可接受的容量范围)的问题,它会使您的测试有效。如前所述,理想情况下,您需要一个可预测,稳定和一致的设置来进行任何有用的比较。这就是说,如果你了解SUT的基本操作范围(CPU可用,Mem Available等),那么早期的开发人员测试可以在已知资源容限内的系统和条件的混合和匹配上完成。