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

Automated tests Web应用程序:验收测试:测试的初始状态和测试隔离?,automated-tests,acceptance-testing,Automated Tests,Acceptance Testing,您好, 我目前正在探索一些极限编程,并尽可能地坚持下去。这意味着,当我在计划发布后开始迭代时,我需要将我现在意想不到的大量用户故事转换为验收测试 我不完全确定我将要使用的实现语言,但是,我确信这将是一个动态web应用程序,带有数据库后端,由web服务器提供服务。现在,我计划在具有本地测试环境的本地机器上开发第一个版本,因此可以假设验收测试不涉及安全性,因此,例如,我可以让验收测试根访问所涉及的测试数据库。我仍然有点不确定要使用的验收测试框架,但是,因为这将是一个web应用程序,我想我将使用Sel

您好, 我目前正在探索一些极限编程,并尽可能地坚持下去。这意味着,当我在计划发布后开始迭代时,我需要将我现在意想不到的大量用户故事转换为验收测试

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

然而,仍然有一个黑暗的领域:我还没有这个应用程序的数据,因为我正在实现一个新的应用程序。因此,我无法抓取当前生产数据库的快照来抓取测试数据库,此外,该应用程序与任何具有数据库后端的web应用程序一样是有状态的,因此在所有验收测试中使用单个数据库将导致测试隔离方面的丑陋问题,至少在单元测试方面是如此,这意味着这可以带来极大的乐趣和大量的白发


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

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

除此之外,速度问题对我来说可能不太重要,因为我可以在为一个用户故事开发代码的过程中集中精力进行少量测试,让我的CI服务器运行所有测试,然后在我认为已经完成的情况下在后台花费更多的时间