CRUD Web App自动测试最佳实践

Gau*_*nia 10 testing selenium automated-tests

天儿真好,

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

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

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

谢谢,

c_m*_*ker 10

一般来说...

如果您的主要目标是测试数据库CRUD操作,我至少会"降低一级"并编写某种不使用GUI进行测试的集成测试.如果你把GUI拿出来,测试会更加专注于实际的CRUD操作.

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

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

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

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

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

编辑:(回答评论)

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

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

我们确实使用相同的数据集来处理似乎需要相同信息的事物.例如,您要测试" 尝试将员工保存到数据库 "和" 删除员工 ".您可以为此重用一个数据集.

我想知道是否为每次测试构建和拆除数据库会花费大量时间和计算明智吗?

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