你好,
我正在使用一个相当依赖数据库的 Web 应用程序,并考虑使用 Selenium 为其设置自动化测试。然而,作为一个自动化测试新手,却不知从何下手。
- 您如何对测试进行分类以确保它们在逻辑上合理且完整?
- 测试时如何处理数据库?在每次测试之前构建一个新的数据库并在每次测试之后删除表?从测试数据库开始?
只是寻找一些关于这方面最佳实践的指示。
谢谢,
最佳答案
一般来说...
如果您的主要目标是测试数据库 CRUD 操作,我会至少“降低一个级别”并编写某种不使用 GUI 进行测试的集成测试。如果去掉 GUI,测试将更加关注实际的 CRUD 操作。
如何处理数据库...
无论您是使用 Selenium 还是集成测试,测试不相互依赖都是一个好主意。这意味着在每次测试之前设置数据库和/或在测试之后将它们分解为干净/已知状态。维护以这种方式编写的测试要容易得多。例如,您可以单独运行一个测试。
对于我们的集成和验收测试,我们使用 dbunit 来实现这一点。轻松设置和拆除数据库并不是什么新鲜事,您的技术堆栈也应该有一些可用的东西。 (你没有提到你正在使用的技术)
如何对测试进行分类...
对于 CRUD 操作,我会确保只测试一件事。例如,我有一个 Employee 表。您可以拥有一个测试套件来测试与 Employee 相关的所有内容,但单个测试应该只测试一件事。 “成功保存员工”应该是不同于“尝试保存已存在的员工”或“删除员工”的测试用例。
编辑:(对评论的回答)
我们基本上是在测试开始时终止数据库并从头开始构建它。 (不确定这部分有多重要,但这可以确保我们的数据库与代码预期的一致。我们正在使用休眠...)
然后对于每个测试,我们都有不同的数据集要插入。因此,让我们再说一次,我们正在测试 Employee。如果我想测试删除一个 Employee,我会插入一个包含数据库中最少信息量的数据集来实现这一点。较小的数据集更易于维护。如果您对所有测试使用相同的数据集,那么更改代码和更改或添加新测试将变得非常困难。
我们确实对似乎需要相同信息的事物使用相同的数据集。例如,您想要测试“尝试将员工保存到数据库”和“删除员工”。您可以为此重复使用一个数据集。
I was wondering if building and tearing down the DB for each test would be expensive time and computing wise?
我不会太担心这个。是的,比方说,每次测试可能会增加 3-4 秒,但总的来说,这真的很重要吗?更重要的是您有旨在维护的测试,因为您作为开发人员的时间比运行这些测试需要 5 分钟而不是 3 分钟更有值(value)。
关于testing - CRUD Web App 自动化测试最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5012497/