动态创建数据库副本以进行测试

时间:2010-06-22 14:03:07

标签: sql-server tsql continuous-integration

我将为我的应用程序创建集成测试。我希望我的集成测试不会在生产数据库中执行。我希望在测试执行开始之前,我的继续集成服务器(团队城市)创建我的数据库的副本,并将在其上执行集成测试。任何方法或最佳实践?

修改

我想自动化此过程(文章或论坛的任何链接)。

4 个答案:

答案 0 :(得分:2)

以下是我要做的步骤

  1. 将生产数据库备份和还原到Integration服务器。
  2. 从Integration数据库中删除/重置私人信息(信用卡,ssn,密码),以便测试人员无法使用实际的生产数据
  3. 由于您使用的是SQL Server,因此使用SSIS非常容易。

    步骤:

    1. 创建SSIS包
    2. 添加任务以复制数据库或备份还原数据库从生产到集成
    3. 为每个表清理操作添加查询任务
    4. 将程序包保存到SQL Server
    5. 从SQL Server中运行作业或在SQL Scheduler中创建作业以定期运行
    6. 要了解SSIS,一本好书是Microsoft Press的SQL Server Integration Services Step by Step。

      适用于SQL Server的好论坛

答案 1 :(得分:1)

您可能不希望构建服务器触及生产数据库(我当然不会)。

我创建了一个从.bak文件或脚本加载数据库的工作(如果它不是太大,你可以对它进行版本化)并在运行测试之前运行该作业。

答案 2 :(得分:1)

我目前正在努力完成同样的任务。我在我的机器上安装了nant,然后创建了以下文件夹

./servername/databasename/release
./servername/databasename/restore
./servername/databasename/rollback
./servername/databasename/test

然后计划为每个任务创建nant目标(发布,恢复,回滚,测试)。

./servername/databasename/restore/000001.set_database_offline.sql
./servername/databasename/restore/000002.restore_database.sql
./servername/databasename/restore/000003.fix_orphaned_logins.sql
./servername/databasename/restore/000004.do_some_operation_example_upgrade_table_x.sql

然后我创建所有带有数字前缀的脚本,以控制执行顺序。这背后的想法是创建命名以匹配我的文件夹的构建任务,所以我可以执行下面列出的命令,这将快速执行目录中的所有脚本。

nant restore
nant release
nant rollback
nant test

我认为我需要增强该过程,以便对发布和回滚进行单独的测试,但这是一项正在进行中的工作。

如果您选择遵循相同的路径,请告诉我。合作并分享一个简单的可重复过程真的很酷。

这样做的原因是: 1.自动化 2.重复性 3.一致性 4.将所有代码添加到源代码管理

目标是能够在多个环境中进行部署和测试,并且在将代码升级到生产环境时不会更改代码。

此致

答案 3 :(得分:0)

我至少已经做了两年了。这并不复杂。我从脚本创建我的测试数据库,也从脚本填充测试数据,所有这些都是从NUnit FixtureSetup步骤调用的。没有任何问题。