Unit testing 单元测试执行速度(每秒有多少个测试?)

Unit testing 单元测试执行速度(每秒有多少个测试?),unit-testing,performance,Unit Testing,Performance,单元测试的执行率(每秒测试次数)是多少?对于单个单元测试来说,多长时间太长 我很想知道人们是否有任何特定的阈值来确定他们的测试是否太慢,或者只是当一个长时间运行的测试套件的摩擦超过你的时候 最后,当您确定测试需要运行得更快时,您会使用哪些技术来加快测试速度 注意:集成测试显然是另一回事。严格地说,我们讨论的是需要尽可能频繁地运行的单元测试 回复综述:感谢您迄今为止的精彩回复。大多数建议似乎是不要担心速度——专注于质量,如果速度太慢,就有选择地运行它们。具体数字的答案包括瞄准我倾向于更多地关注考

单元测试的执行率(每秒测试次数)是多少?对于单个单元测试来说,多长时间太长

我很想知道人们是否有任何特定的阈值来确定他们的测试是否太慢,或者只是当一个长时间运行的测试套件的摩擦超过你的时候

最后,当您确定测试需要运行得更快时,您会使用哪些技术来加快测试速度

注意:集成测试显然是另一回事。严格地说,我们讨论的是需要尽可能频繁地运行的单元测试



回复综述:感谢您迄今为止的精彩回复。大多数建议似乎是不要担心速度——专注于质量,如果速度太慢,就有选择地运行它们。具体数字的答案包括瞄准我倾向于更多地关注考试的可读性,而不是速度。然而,我仍然试图让它们相当快。我想如果它们以毫秒为单位运行,你就没事了。如果他们每次测试运行一秒钟或更长时间。。。那么您可能正在做一些应该优化的事情

缓慢的测试只会在系统成熟时成为一个问题,并导致构建耗时数小时,此时您更可能遇到大量缓慢测试的问题,而不是一个或两个可以轻松优化的测试。。。因此,如果您看到很多测试每次运行数百毫秒(或者更糟糕的是,每次运行几秒钟),您可能应该立即注意,而不是等到数百个测试占用了那么长的时间(在这一点上解决问题将非常困难)


即使如此,它也只会缩短自动构建出现错误的时间。。。我想,如果是一个小时后(甚至是几个小时后),这也没关系。问题是在签入之前运行它们,但是可以通过选择与您正在处理的内容相关的要运行的测试的一小部分来避免。如果签入的代码破坏了未运行的测试,请确保修复生成

如果我们说的是严格的单元测试,我的目标更多的是完整性而不是速度。如果运行时开始产生摩擦,请将测试分为不同的项目/类等,并且只运行与您正在进行的工作相关的测试。让集成服务器在签入时运行所有测试。

我们目前在大约3.5秒内完成了270个测试。大约有8个测试执行文件IO

在每台机器上成功构建我们的库后,这些都会自动运行。我们有更广泛(和耗时)的烟雾测试,每天晚上由构建机器完成,或者可以在工程师机器上手动启动

正如您所看到的,我们还没有达到测试太耗时的问题。对我来说,10秒是开始变得干扰的时间点,当我们开始接近这一点时,我们将对此进行观察。我们可能会将较低级别的库移动到夜间构建中,或者只由构建机器执行的配置中,这些库更健壮,因为它们很少更改,也没有依赖性

如果您发现运行一百个左右的测试需要几秒钟以上的时间,那么您可能需要检查您正在分类为单元测试的内容,以及是否最好将其视为冒烟测试


根据您的开发领域,您的里程数显然会有很大的变化。

我根据每个测试来判断单元测试,而不是根据每秒的测试次数。我的目标速率为500毫秒或更低。如果超过了这一点,我将调查测试,找出为什么需要这么长时间


当我认为考试太慢时,通常意味着它做得太多了。因此,通过将测试拆分为多个测试来重构测试通常是可行的。我注意到我的测试运行缓慢的另一次是,当测试显示代码中存在瓶颈时,则需要对代码进行重构。

所有单元测试都应在一秒钟内运行(即所有单元测试组合应在1秒内运行)。现在我肯定这有实际的限制,但我有一个项目,有1000个测试,在笔记本电脑上运行得这么快。你真的需要这样的速度,这样你的开发人员就不会害怕重构模型的某些核心部分(例如,让我在运行这些测试时喝杯咖啡……10分钟后他回来了)

这一要求还迫使您正确设计应用程序。这意味着您的域模型是纯的,不包含对任何类型的持久性(文件I/O、数据库等)的引用。单元测试都是关于测试那些业务关系

现在,这并不意味着忽略对数据库或持久性的测试。但是这些问题现在被隔离在存储库后面,存储库可以通过位于单独项目中的集成测试进行单独测试。在编写域代码时不断运行单元测试,然后在签入时运行一次集成测试。

数据点--Python回归测试

以下是我的笔记本电脑上运行Python 2.5.2“make test”的数字:

  • 测试次数:3851(约)
  • 执行时间:9分钟6秒
  • 执行速度:7次测试/秒
对一个人来说,多长时间太长 单元测试

我认为这取决于编译速度。通常在每次编译时执行测试。单元测试的目标不是放慢速度,而是带来一个信息“没有任何问题,继续”(或“有问题,停止”)

我不担心测试执行速度,直到它开始变得烦人

危险在于停止运行测试,因为它们太慢了

最后,当你决定测试的时候 需要跑得更快,有什么技巧吗 你习惯于加速哟