17

我正面临一种情况,我想确保如果修改了一个方法,它的运行时间不会超过 X 毫秒(本质上,如果该函数较慢,它会减慢我们网页上的搜索结果,并且对销售造成不良影响)。

我们有单元测试(特别是代码是在 python 下完成的,我们使用 py.test),第一个想法是断言如果函数在 X 毫秒内没有执行,则将测试标记为失败(或引发警告)。

但是,这感觉很危险(例如,并非所有计算机的速度都相同),而且我不太确定这是单元测试的工作。

有人遇到过类似的情况吗?对我来说,速度是一个特性,我想确保这样的特性在未来不会随着代码的发展而丢失。

如果单元测试不是答案,您会推荐哪些其他替代方案?

谢谢

4

2 回答 2

5

您可以考虑使用pytest-timeout 插件作为开始。它目前只允许指定秒数(作为浮点数)。但它可以扩展为使用更具适应性的时序,例如 pystone 编号,因此可以测量您的计算机执行 pystone 基准测试的速度,该基准可以缓存,然后您可以指定您的测试有多少“pystone”被允许采取。

于 2012-08-31T10:44:18.180 回答
2

如果你有一个专用的构建/测试服务器,或者开发者之间的硬件大致相当,那么以毫秒为单位的时间限制是可以的。可重复性是关键——您可以编写一些东西,让开发人员在他们的机器上进行“基线”测试,然后将其与后续结果进行比较。

有可用的 pyunitperf模块,它具有时间限制和负载测试功能。它已经很长时间没有更新了(2009 年),但如果您要自己动手,这将是一个不错的起点。

请记住,以 ms 为单位的测试时间本身不会告诉您任何信息——但只要您仅使用它来比较不同版本的性能,就应该没问题。

于 2012-08-30T06:05:37.593 回答