如何快速保持自动化测试?

时间:2008-10-08 20:14:51

标签: performance testing continuous-integration automated-tests

自动化测试必须能够快速反映实时项目状态。这个想法是:

  1. 执行任何提交到存储库自动构建之后(尽可能快)。
  2. 如果构建成功,则启动自动化测试。必须快。
  3. 这是我知道的最佳方式,可以确定您的更改是否会破坏任何内容。

    起初,似乎快速构建构建很难,但我们设法将其保持在100秒左右。 105(!)项目的解决方案(MSVS 2008 C#)。

    测试似乎并不那么简单(我们使用NUnit FW)。单元测试不是一个大问题。正是集成测试杀死了我们。而不是它们更慢的事实(关于如何使它们更快的任何想法都非常感激)但是环境必须设置的速度要慢得多(大约1000秒)!

    我们的集成测试使用需要重新部署的Web / win服务(目前为止19个),以反映最新的变化。这包括重新启动服务和大量HDD R / W活动。

    任何人都可以分享环境和工作流程应该/可以组织/优化的经验,以加强自动化测试阶段。什么是“低级”瓶颈和解决方法。

    P.S。我们欢迎书籍和广泛的文章,但现实世界的工作解决方案更受赞赏。

7 个答案:

答案 0 :(得分:5)

您可以采取一些优化策略来提高测试的吞吐量,但是您需要问问自己这个测试的目标是什么,以及为什么需要快速。

有些测试需要时间。这是生活中的事实。集成测试通常需要时间,您通常必须设置一个环境才能够执行它们。如果您设置了一个环境,您将希望拥有一个尽可能接近最终生产环境的环境。

您有两种选择:

  1. 优化测试或部署测试。
  2. 不要经常这样做。
  3. 根据我的经验,最好是拥有一个正确的集成环境,并找到错误,并充分代表最终的生产环境。我通常选择选项2(1)。

    很可能会说我们会一直测试所有内容,但实际上你需要一个策略。

    (1)除非有大量错误只能在整合中找到,在这种情况下,忘记我说的一切: - )

答案 1 :(得分:3)

我们使用.NET和NUnit,它支持类别(您可以在测试中使用的属性)。然后我们将长时间运行的测试放在NightlyCategory中,这样它们只能在夜间构建中运行,而不是在我们想要快速运行的连续构建中运行。

答案 2 :(得分:1)

我在Turbo-Charged Test Suites上发表了一篇演讲。下半部分针对Perl开发人员,但上半部分可能对您有用。我对你的软件知之甚少,不知道它是否合适。

基本上,它涉及加速测试套件中的数据库使用和在单个进程中运行测试的技术,以避免不断重新加载库。

答案 3 :(得分:1)

我建议进行几次高级别的端到端测试,如果其中任何一项失败,请运行“更高分辨率”测试。

考虑通过电话提供技术支持......

你的电脑有用吗? 如果是的话,完成。 如果不是,您的计算机是否完全打开? ...

对于我的单元测试,我有一些快速测试,例如“我的电脑能工作吗?”如果那些通过,我不执行我的套房的其余部分。如果这些测试中的任何一个失败,我会执行相关的低级测试套件,从而为我提供更高分辨率的视图。

我的观点是,运行一整套顶级测试应该不到半秒钟。

这种方法既快速又细致。

答案 4 :(得分:1)

  

环境必须如此   设置慢得多(atm~1000   秒)!

至少你知道在哪里集中......你知道那个时间花在哪里吗?

显然,任何解决方案都将取决于具体细节。

我在这种情况下使用了三种解决方案:

  1. 使用更多机器。也许您可以将服务划分到两台机器上?这会让你的设置时间减少到1/2吗?

  2. 使用更快的机器?在一种情况下,我知道团队通过升级硬件(多个CPU,快速RAID存储,更多RAM,工作)将集成测试从18小时缩短到1小时。当然,它花费了大约1万美元的价格,但这是值得的。

  3. 使用内存数据库进行集成测试。是的我知道你也想要对真实数据库进行测试,但也许你最初可以针对内存版本运行测试以获得快速反馈。

答案 5 :(得分:1)

此情况的最佳解决方案是在重置环境之前备份环境的重影图像并恢复图像。这对于花费的时间更有意义。

答案 6 :(得分:0)

Buildbot:http://buildbot.net/trac 如果您正在进行持续集成(自动化测试),我不能推荐这么多。通过快速配置,每次提交时都会运行所有单元测试,并且在一天中定期运行较长的集成测试(我检查的最后一次是3次,但这可以很容易地更改)。