CRUD Web App自动测试最佳实践

时间:2011-02-16 04:18:34

标签: testing selenium automated-tests

G'day,

我正在使用一个相当数据库的Web应用程序,并着眼于使用Selenium为其设置自动化测试。但是,作为一个自动测试新手,我不知道从哪里开始。

  • 您如何对测试进行分类,以确保它们在逻辑上既完整又完整?
  • 测试时如何处理数据库?在每次测试之前构建一个新的数据库,并在每次测试后删除表格?从test-db开始?

只是寻找一些关于这方面最佳实践的指示。

谢谢,

2 个答案:

答案 0 :(得分:10)

一般......

如果您的主要目标是测试数据库CRUD操作,我至少会“降低一级”并编写某种不使用GUI进行测试的集成测试。如果您将GUI取出,测试将更加关注实际的CRUD操作。

如何处理数据库......

无论您使用Selenium还是集成测试,测试都不依赖于是个好主意。这意味着在每次测试之前设置数据库和/或在测试之后将它们拆分为干净/已知状态。维护以这种方式编写的测试要容易得多。例如,您可以单独运行单个测试。

对于我们的集成和验收测试,我们使用dbunit来实现这一目标。轻松设置和拆除数据库并不是一件新鲜事,应该为您的技术堆栈提供一些可用的东西。 (你没有提到你正在使用的技术)

如何对测试进行分类......

对于CRUD操作,我会确保只测试一件事和一件事。例如,我有一个 Employee 表。您可以拥有一个测试套件来测试与 Employee 有关的所有内容,但是单个测试应该只测试一件事。 '成功保存员工'应与“尝试保存已存在的员工”或“删除员工”的测试案例不同。

编辑:(回复评论)

我们基本上会杀死数据库并在测试开始时从头开始构建它。 (不确定这部分有多重要,但是这确保我们的数据库与代码期望的一致。我们正在使用hibernate ...)

然后,对于每个测试,我们都要插入不同的数据集。所以我们再说一遍,我们正在测试员工。如果我想测试删除 Employee ,我会插入一个包含数据库中信息量最少的数据集来实现这一点。较小的数据集更易于维护。如果对所有测试使用相同的数据集,则很难更改代码并更改或添加新测试。

我们对似乎需要相同信息的事物使用相同的数据集。例如,您要测试“尝试将员工保存到数据库”和“删除员工”。您可以为此重用一个数据集。

  

我想知道是否建设和   每次测试都会拆掉数据库   将是昂贵的时间和计算   明智?

我不会太担心这个。是的,它可能会增加,比方说,每次测试3-4秒,但从大局来看,这真的很重要吗?更重要的是,您有针对维护的测试,因为您作为开发人员的时间比这些测试花费5分钟而不是3分钟更有价值。

答案 1 :(得分:1)

我对Selenium一无所知,但我发现a JavaRanch article that was really well-done.在标题为“单元测试模拟基础知识”的部分中,作者展示了一种创建模拟对象的好方法,以避免< strong>任何数据库调用。显然,您需要一些涉及数据库调用的集成测试,但对于普通的单元测试,概述的方法效果很好。

请记住,运行单元测试应该非常快。