代码之家  ›  专栏  ›  技术社区  ›  Tetha

Web应用程序:验收测试:测试和测试隔离的初始状态?

  •  1
  • Tetha  · 技术社区  · 16 年前

    问候语, 我目前正在探索一些极限编程,并尽可能地坚持下去。这意味着,一旦我开始迭代(当然是在计划发布之后),我就需要将我的(到现在为止,出乎意料地厚的)用户故事转化为验收测试。

    我不完全确定要使用的实现语言,但是,我确信这将是一个动态的Web应用程序,它有一个由Web服务器提供服务的数据库后端。现在,我计划在具有本地测试环境的本地计算机上开发第一个版本,因此可以假设安全性与验收测试无关(例如,我可以授予验收测试对所涉及的测试数据库的根访问权)。我仍然有点不确定要使用的验收测试框架,但是,由于这将是一个Web应用程序,我认为我将使用Selenium RC来编写测试并运行它们(我提到这个,以防有人能够向我指出更好的东西)。

    但是,还有一个黑暗的领域:我还没有这个应用程序的数据,因为我正在实现一个新的、新的应用程序。因此,我无法获取当前生产数据库的快照以获取测试数据库,此外,该应用程序是有状态的(与任何具有数据库后端的Web应用程序一样),因此,对所有验收测试使用单个数据库将导致测试隔离方面的丑陋问题(至少对于单元测试而言,该READS称之为“这会带来极大的乐趣和大量的灰色头发”)。

    那么,如何解决这个问题呢?我是否创建人工测试数据库(并在数据库模式更改时维护它们)并编写验收测试,以便在运行测试之前,每个验收测试都将适当的数据库状态加载到测试数据库中?(当许多重音测试运行时,一百次加载十几个记录会有多快或多慢?)我应该创建一个示例数据库,为所有测试加载这个数据库,并希望得到最好的结果吗?我应该重新创建验收测试中一直需要的测试数据吗?或者,人们是怎么做到的?

    1 回复  |  直到 16 年前
        1
  •  0
  •   Tetha    16 年前

    根据进一步的研究,正确的方法是使用适当的设置方法使数据库进入定义的状态。这主要涉及删除表中的所有现有数据,向表中添加特定的数据测试集,然后严格地运行该数据测试。然后,TearDown方法清除对表所做的任何操作(要么设置删除所有内容,要么TearDown再次删除所有内容)。有像dbunit这样的工具可以简化这个过程。这导致测试速度有所降低,但是,它建立了测试的完全隔离,这是一件好事,因为绿色简单地表示绿色,红色简单地表示红色,而不是“给定当前的测试执行顺序,这是有效的”。

    除此之外,速度问题对我来说可能不那么重要,因为我可以在为单个用户开发代码的过程中专注于少量的测试,并且当我认为已经完成时,让我的CI服务器在后台运行所有测试(这需要更多的时间)。