UAT数据应该是生产的一面镜子吗?如果是这样,怎么样?

时间:2012-03-01 08:34:16

标签: sql-server database testing uat

我们一直在想一个关于UAT可以用近实时数据进行测试的想法(比如最多一周)。我坚信开发和QA环境应该控制自己的数据,但是UAT(生产前的最后一层)代表了一些灰色区域。所以我的问题是:

a)这是一个好主意吗?我是这么认为的,但却有些疑惑。

b)如果是这样,人们过去使用过的一些经过验证的技术是什么?

  • 通过SqlCompare或类似方法手动
  • 通过脚本自动化?
  • 你如何处理UAT / Production之间的架构变化(除了在实时部署之后,UAT几乎总是领先于生产)?

2 个答案:

答案 0 :(得分:5)

(假设OP意图连续,实时架构和数据同步)

简答:

  • 架构 - 否 - 在正在开发的不断发展的系统中,UAT可能已经提前生产,UAT将进行更改以用于未来的生产推广。
  • 数据 - 也许(为了获得好的,最新的,有代表性的数据),尽管可能需要调整任何模式差异。另一种方法是应用假数据生成器。

<强>原理

通过'镜像'我假设您不是指实时直接镜像或复制(UAT测试通常需要设置可能被覆盖的艰苦数据测试用例)。

以下是我们在企业环境中的表现,FWIW

按规定的时间间隔,通常间隔约1个月

  • 通过QA环境(UAT刷新)
  • 恢复最后一个prod数据库备份
  • 在还原后刷新的每个数据库上运行环境“转换”脚本(例如,指向点配置,或模糊敏感的财务,客户或用户数据等)
  • 然后,所有尚未进入PROD的UAT脚本都会针对数据库运行(您需要通过脚本管理更改控制来轻松跟踪这一点 - 我们仍然无法始终保持正确状态)。刷新后我们直接比较UAT和QA,然后简单地将更改回滚到UAT。
  • 这可以作为良好的烟雾测试/调试,因为这些相同的vNext脚本需要在生产发布时针对Production运行。
  • 现代系统可能不需要显式/外部版本迁移脚本(例如,实体框架代码优先迁移将尝试在首次运行时升级数据库架构),尽管在将这些脚本应用于旧版或共享数据库时可能存在此风险。

其他一些注意事项

  • 在系统相互集成的企业环境中,建议同时刷新所有系统的数据库,以便共享数据和密钥“同步”
  • 在许多企业中,UAT环境的变化(包括数据刷新)可能需要更改控制委员会的批准,因为UAT可用性对于新系统的推出至关重要,并可能影响许多项目。

关于同步模式的'脚本'循环的注释 - 在我们的环境中:

  • DEV对所有人都是免费的 - 任何开发人员都可以制作DDL或数据 变化。
  • QA和UAT被锁定 - 需要生成脚本 (通常由SQLCompare提供)然后发送给DBA执行(在QA中) 和批准和执行(UAT)。 (我们正在研究如何自动部署到QA,但我们确实需要将每个脚本保留在SCM中)
  • 然后将这些脚本检入源代码管理并跟踪“每个环境”

答案 1 :(得分:1)

这是我们为我工作的最后一家公司所做的事情。我们有很多州政府的项目和合同。以下是我们在某些项目中使用的环境级别示例。在下面的示例中,QA适用于我们,UAT适用于客户端,Pre-Prod是我们有时创建的另一个环境,但并非总是如此;只是取决于项目。

DEV ==&gt; QA ==&GT; UAT ==&GT; PRE-PROD ==&gt; PROD

一旦所有数据都经过验证,我们就会从P​​rod向下复制到几乎所有内容的UAT和QA,包括任何与数据库相关的数据。

我们还有一个为某些方面编写的工具,而不必总是使用SQL。我们有一个基于网络的程序,我不记得它是什么写的。我们称之为CTM - 控制表管理。在那里,我们可以滚动表格中的某些更改,如更新,更正,下拉菜单,拼写和语法错误,以及任何misc。任何东西。有用于提交更改的单选按钮和框,以检查要将更改滚动到哪些环境。

希望这对任何人都有帮助,或者给人一些想法。 : - )

谢谢,

约翰