测试隔离和自动化

软件测试 自动化测试 硒网络驱动程序 测试管理 测试设计
2022-01-23 21:05:11

我们使用 Selenium Web 服务进行自动化功能测试。

我有一个测试来测试一些对象的创建。如果我再次运行相同的测试,我需要确保每个测试都有不同的业务密钥 - 否则它将遇到唯一约束违规。

我可以解决此问题的一种方法是在每次运行测试套件之前\之后重置数据库,以便每个测试套件不会与另一个测试套件发生冲突。但是,我在同一次运行中的各个测试并不是相互隔离的。

我如何做到这一点,我的所有测试都是孤立的并且不会相互冲突?

现在我们查询数据库以生成数据库中不存在的随机 ID。但我确信必须有一种更优雅的方法来解决这个问题。

2个回答

注册护士。

你在这里有几个选择。正如您所提到的,一种是在每次运行之前重置数据库。无论如何,这可能是一个好主意,以确保您具有相同的起始条件和运行的开始。

对于运行中的各个测试,您可以通过运行操作一个简单的计数器并使用它来生成您的业务密钥 - 也就是说,您的对象列表在其数据中包含一个对象编号,并且您的密钥是使用该对象编号生成的.

一些可能的选项是毫秒的时间戳(例如 201112081110526),您可以将其保存用于测试,以便您根据输入检查保存的对象。1、2、3...等的迭代器也会给你同样的结果。

使用这样的东西会给你一组不会相互冲突的测试。除非您的测试依赖于在早期测试中创建的另一个对象,否则它们也应该彼此独立。如果一个测试失败,您的运行结束数据库是否与您的基线匹配将取决于您的基线检查的智能程度 - 如果您在创建后单独检查每个对象,则一个失败的测试不会影响基线,如果所有对象都检查在所有创建测试结束时发生,一次失败的测试可能会产生重大影响。无论哪种方式,您仍将拥有一个更清晰的测试集,其中包含您不必运行 SQL 查询来生成的已知唯一 ID。

一种可能性是在每次测试之前重置数据库,而不仅仅是在每次运行套件之前。

这可能会使每次运行时间更长。如果您可以忍受增加的持续时间,那就是我要走的路。

并且它可能需要为现在依赖于早期测试的测试添加设置来建立它们的初始条件。但这是另一种说法,它使测试独立,这是您的既定目标。