【问题标题】:How to manage Build time in TDD如何在 TDD 中管理构建时间
【发布时间】:2009-05-30 19:35:55
【问题描述】:

您好,在我的项目中,我们有数百个测试用例。这些测试用例是构建过程的一部分,每次签入时都会触发它并向我们的开发人员组发送邮件。这个项目相当大,已经有五年多了。
现在我们有这么多测试用例,构建需要一个多小时。有些测试用例的结构不正确,在重构它们之后,我能够大大减少运行时间,但是我们有数百个测试用例,并且一个一个地重构它们一个似乎有点太多了。
现在我运行一些测试用例(执行需要很长时间)仅作为夜间构建的一部分,而不是每次签入的一部分。
我很好奇其他人是如何做到这一点的。

【问题讨论】:

    标签: testing-strategies


    【解决方案1】:

    我相信他在“有效地使用遗留代码”中说,如果您的测试套件花费的时间超过几分钟,这将大大拖慢开发人员的速度,并且测试将开始被忽视。听起来你正在掉进那个陷阱。

    您的测试用例是否针对数据库运行?那么这很可能是您性能问题的最大来源。作为一般规则,如果可能的话,测试用例不应该进行 I/O。依赖注入可以让您用模拟代码的数据库部分的模拟对象替换数据库对象。这使您可以测试代码,而不必担心数据库是否设置正确。

    我强烈推荐 Michael Feathers 的 Working Effectively with Legacy Code。他讨论了如何处理您似乎遇到的许多令人头疼的问题,而不必一次全部重构代码。

    更新:

    另一个可能的帮助是 NDbUnit。我还没有广泛使用它,但它看起来很有希望:http://code.google.com/p/ndbunit/

    【讨论】:

    • 数据库绑定测试的一个可能的替代解决方案是使用内存数据库。这显然带来了一系列新问题,但却是一个解决方案,它的成功取决于你有多少代码依赖于单个 RDBMS 实现。
    • 嗯,这似乎是个好主意,而且也不担心单一的 RDBMS 实施,因为我们没有计划离开 Oracle。
      唯一担心的是设置所有数据库约束meory Db 并与实际 db 同步。
      注意:您能否指出 memeroy Db 中靠近 Oracle 的任何数据库,以便我的测试环境和实际生产环境同步。
    【解决方案2】:

    也许您可以考虑保留您的 oracle 数据库但从内存驱动器运行它?它不需要很大,因为它只包含测试数据。

    【讨论】:

      【解决方案3】:

      我们有大约 1000 个测试,其中很大一部分通过 REST 通信并访问数据库。总运行时间约为 8 分钟。一个小时似乎过分了,但我不知道你在做什么以及你的测试有多复杂。

      但我认为有一种方法可以帮助您。我们正在使用 TeamCity,它具有很好的拥有多个构建代理的能力。您可以做的是将您的测试项目拆分为子项目,每个子项目仅包含一些测试。您可以使用 JNunit/NUnit 类别来分隔它们。然后,您将配置 TeamCity,以便每个代理只构建一种类型的子项目。这样,您将获得并行执行测试。使用很少的代理(您可以免费获得 3 个),您应该能够达到 20 分钟,这甚至可能是可以接受的。如果您将每个代理放入 VM,您甚至可能不需要额外的机器,您只需要大量的 RAM。

      【讨论】:

        猜你喜欢
        • 2012-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-02
        • 1970-01-01
        • 2016-08-11
        相关资源
        最近更新 更多