测试自动化 - 初始化数据库状态
Test Automation - Initializing database state
我有一个情况希望你能提供一些见解。我正在考虑一个系统的测试自动化 (JAVA),该系统经历了不同的处理阶段,其核心是一个大型 Oracle 数据库 (1000+ tables)。
例如
进程 1 - 运行 进程 1 -> 查找包含客户详细信息的文件 -> 将详细信息加载到数据库中的暂存 tables。
流程 2 - 审核客户详细信息 -> 运行 流程 2 -> 在暂存 tables 中找到的客户详细信息将移至适当的 tables。
现在从自动化的角度来看,我需要在每次 运行 测试之前重新初始化数据库状态,但问题是数据库实例将被其他人共享。没有进入为什么我们没有单独的数据库实例,有谁知道如何包含状态?例如,假设一个数据库有一个 table 客户,其中包含一个列 FirstName.
测试前运行:名字包含数据'Peter'、'Paul'、
测试后运行:名字包含数据'Peter'、'Paul'、'Jack'、'Amy'
在下一次测试之前运行:将数据库状态恢复到上次测试之前的状态的有效方法是什么运行即包含的数据应该是'Peter',再次 'Paul'。
我看过 DBUnit,但我的理解是,虽然您可以在测试前用自己的数据初始化状态 运行,但它也会在测试前清除所有数据 运行。问题是我不想在测试 运行 之前清除所有数据,而只想清除作为上次测试的一部分引入的数据 运行.
我希望你说得清楚 :) 谢谢!
对于这种测试,您不能与其他用户共享实例,否则您的测试将不可靠。
首先,您需要隔离您的数据库实例,并且您的测试需要对其进行完全和独占的控制。
其次,测试都是关于选择努力 x 资源 x 结果之间的权衡。如果由于某种原因无法执行您的测试,那么您必须评估哪些可行,哪些不可行,并在必要时将其上报给项目经理。
对于大量数据,DBUnit 在 IMO 方面很可能不是一个好的选择。也许您需要一些 import/export 工具来在每次测试前重置您的数据库状态。
有关每次测试前后的 dbUnit 操作选择,请参阅 DatabaseOperation class [0]。其他注释位于组件页面 [1] 上。
特别是对于您的情况,请考虑更新、删除和刷新。
数据库集成测试和 acceptance/end-to-end 测试的一个好方法是尽可能隔离场景,包括数据集。例如。每个测试都应该设置和清理自己的数据。考虑仅共享数据设置文件(inserted/updated 测试前和每次测试后清理),而不是通过将数据留在数据库中来共享。
最后,强烈考虑制作一个专用于自动化测试的数据库实例,这样就没有其他考虑因素和对数据的干扰。通常,如果无法分配另一个 Oracle 实例,则为此使用 Apache Derby 等数据库(使用其内存模式)。
[0] http://dbunit.sourceforge.net/apidocs/org/dbunit/operation/DatabaseOperation.html
[1] http://dbunit.sourceforge.net/components.html#DatabaseOperation
我有一个情况希望你能提供一些见解。我正在考虑一个系统的测试自动化 (JAVA),该系统经历了不同的处理阶段,其核心是一个大型 Oracle 数据库 (1000+ tables)。
例如 进程 1 - 运行 进程 1 -> 查找包含客户详细信息的文件 -> 将详细信息加载到数据库中的暂存 tables。 流程 2 - 审核客户详细信息 -> 运行 流程 2 -> 在暂存 tables 中找到的客户详细信息将移至适当的 tables。
现在从自动化的角度来看,我需要在每次 运行 测试之前重新初始化数据库状态,但问题是数据库实例将被其他人共享。没有进入为什么我们没有单独的数据库实例,有谁知道如何包含状态?例如,假设一个数据库有一个 table 客户,其中包含一个列 FirstName.
测试前运行:名字包含数据'Peter'、'Paul'、
测试后运行:名字包含数据'Peter'、'Paul'、'Jack'、'Amy'
在下一次测试之前运行:将数据库状态恢复到上次测试之前的状态的有效方法是什么运行即包含的数据应该是'Peter',再次 'Paul'。
我看过 DBUnit,但我的理解是,虽然您可以在测试前用自己的数据初始化状态 运行,但它也会在测试前清除所有数据 运行。问题是我不想在测试 运行 之前清除所有数据,而只想清除作为上次测试的一部分引入的数据 运行.
我希望你说得清楚 :) 谢谢!
对于这种测试,您不能与其他用户共享实例,否则您的测试将不可靠。
首先,您需要隔离您的数据库实例,并且您的测试需要对其进行完全和独占的控制。
其次,测试都是关于选择努力 x 资源 x 结果之间的权衡。如果由于某种原因无法执行您的测试,那么您必须评估哪些可行,哪些不可行,并在必要时将其上报给项目经理。
对于大量数据,DBUnit 在 IMO 方面很可能不是一个好的选择。也许您需要一些 import/export 工具来在每次测试前重置您的数据库状态。
有关每次测试前后的 dbUnit 操作选择,请参阅 DatabaseOperation class [0]。其他注释位于组件页面 [1] 上。 特别是对于您的情况,请考虑更新、删除和刷新。
数据库集成测试和 acceptance/end-to-end 测试的一个好方法是尽可能隔离场景,包括数据集。例如。每个测试都应该设置和清理自己的数据。考虑仅共享数据设置文件(inserted/updated 测试前和每次测试后清理),而不是通过将数据留在数据库中来共享。
最后,强烈考虑制作一个专用于自动化测试的数据库实例,这样就没有其他考虑因素和对数据的干扰。通常,如果无法分配另一个 Oracle 实例,则为此使用 Apache Derby 等数据库(使用其内存模式)。
[0] http://dbunit.sourceforge.net/apidocs/org/dbunit/operation/DatabaseOperation.html
[1] http://dbunit.sourceforge.net/components.html#DatabaseOperation