database - 测试自动化 - 初始化数据库状态

标签 database testing automation dbunit

我有一个情况希望您能提供一些见解。我正在考虑一个系统的测试自动化 (JAVA),该系统经过各个处理阶段并且其核心有一个大型 Oracle 数据库(1000 多个表)。

例如 进程 1 - 运行进程 1 -> 查找包含客户详细信息的文件 -> 将详细信息加载到数据库中的暂存表。 流程 2 - 审核客户详细信息 -> 运行流程 2 -> 在登台表中找到的客户详细信息将被移动到适当的表中。

现在从自动化的角度来看,我需要在每次运行测试之前重新初始化数据库状态,但问题是数据库实例将被其他人共享。没有进入为什么我们没有单独的数据库实例,有谁知道如何包含状态?例如,假设一个数据库有一个表 Customer,其中包含一个列 FirstName。

测试运行前:FirstName 包含数据“Peter”、“Paul”、
测试运行后:FirstName 包含数据“Peter”、“Paul”、“Jack”、“Amy” 在下一次测试运行之前:将数据库状态恢复到上次测试运行之前的状态的有效方法是什么,即包含的数据应该再次为“Peter”、“Paul”。

我看过 DBUnit,但我的理解是,虽然您可以在测试运行前用自己的数据初始化状态,但它也会在测试运行前清除所有数据。问题是我不想在测试运行之前清除所有数据,而只想清除作为上次测试运行的一部分引入的数据。

我希望这很清楚 :) 谢谢!

最佳答案

请参阅 DatabaseOperation 类 [0],了解每次测试前后的 dbUnit 操作选择。其他注释位于组件页面 [1] 上。 特别是对于您的情况,请考虑更新、删除和刷新。

数据库集成测试和验收/端到端测试的一个好方法是尽可能隔离场景,包括数据集。例如。每个测试都应该设置和清理自己的数据。考虑仅共享数据设置文件(在测试前插入/更新并在每次测试后清理),而不是通过将数据留在数据库中来共享。

最后,强烈考虑制作一个专用于自动化测试的数据库实例,这样就没有其他考虑因素和对数据的干扰。通常,如果无法分配另一个 Oracle 实例,则为此使用 Apache Derby 等数据库(使用其内存模式)。

[0] http://dbunit.sourceforge.net/apidocs/org/dbunit/operation/DatabaseOperation.html

[1] http://dbunit.sourceforge.net/components.html#DatabaseOperation

关于database - 测试自动化 - 初始化数据库状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29231482/

相关文章:

php - SQLSTATE[23000] : Integrity constraint violation: 1048 Le champ 'url' ne peut être vide (null)

php - 授予mysql远程访问权限

testing - Jmeter如何使用CSV Config Set的共享方式运行线程?

image - 将图像合并为拼贴式输出的库

mysql - 使用 MySQL 搜索大型数据集?

mysql - 如何让 django 不为数据库表创建 id 列

selenium - 机器人框架 : org. openqa.selenium.NoSuchSessionException

scala - 如何使用akka-http设计一个rest api以便于测试?

ruby - Watir,通过自定义属性定位元素

testing - 是否可以编译带有特定标志的 Go 程序以进行覆盖率分析?