testing - CRUD Web App 自动化测试最佳实践

标签 testing selenium automated-tests

你好,

我正在使用一个相当依赖数据库的 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/

相关文章:

django - 使用内存数据库中的 sqlite 运行 django

testing - golang中如何测试并发和锁?

node.js - multiCapability 函数在 Protractor 中引发错误

javascript - npm E2E 测试在 Docker 中运行时超时,但在本地计算机上运行时通过

javascript - 如何使用 Selenium Webdriver 处理从 DOM 中删除的 Web 元素?

image - 使低分辨率图像变大

automated-tests - Watin 和 Fluent 自动化 - 引用当前浏览器

java - JMeter压力测试TPS无法提升

user-interface - 在 Xamarin UI 测试中需要帮助

selenium - 具有不同 URL 的 Specflow 场景大纲