在单元测试中使用经过的时间作为断言

Jua*_*ano 17 python unit-testing pytest

我正面临一种情况,我想确保如果一个方法被修改,它运行不需要超过X毫秒(基本上如果该功能较慢,它将减慢我们网页上的搜索结果,并且对销售产生不良影响).

我们有单元测试(特别是代码是在python下完成的,我们使用py.test),第一个想法是断言如果函数没有在小于X ms内执行,那么将测试标记为失败(或者提升一个警告).

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

有人遇到过类似的情况吗?对我而言,速度是一项功能,我希望确保随着代码的发展,此功能在将来不会丢失.

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

谢谢

hpk*_*k42 5

你可以考虑使用pytest-timeout插件开始.它目前只允许指定秒数(作为浮点数).但它可以扩展到更适应的时序,如pystone数字,所以可以测量你的计算机执行pystone基准测试的速度,可以缓存,然后你指定你的测试有多少"pystones"被允许带走.