Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在C语言的SQL Server中处理多用户环境中的数据库快照#_Sql Server_Automated Tests_Snapshot_Data Consistency - Fatal编程技术网

Sql server 在C语言的SQL Server中处理多用户环境中的数据库快照#

Sql server 在C语言的SQL Server中处理多用户环境中的数据库快照#,sql-server,automated-tests,snapshot,data-consistency,Sql Server,Automated Tests,Snapshot,Data Consistency,我已经用C编写了一些测试,这些测试使用数据库,更新和修改其中的值。为了确保数据库在每次测试后恢复到其先前的状态,我执行以下操作: 我对测试套件开始时使用的所有数据库进行了快照。每次测试之后,我都会将数据库恢复到其快照,以确保对于即将运行的新测试用例,不会对数据库进行任何更改。在测试套件的末尾,我删除了创建的快照 下面是测试类的初始化和清理方法 [ClassInitialize()] public static void ClassInit(TestContext context)

我已经用C编写了一些测试,这些测试使用数据库,更新和修改其中的值。为了确保数据库在每次测试后恢复到其先前的状态,我执行以下操作:

我对测试套件开始时使用的所有数据库进行了快照。每次测试之后,我都会将数据库恢复到其快照,以确保对于即将运行的新测试用例,不会对数据库进行任何更改。在测试套件的末尾,我删除了创建的快照

下面是测试类的初始化和清理方法

    [ClassInitialize()]
    public static void ClassInit(TestContext context)
    {
        CreateDatabaseSnapshots();
    }

    [ClassCleanup()]
    public static void ClassCleanup()
    {
        DeleteDatabaseSnapshots();
    }
这是在测试套件中的每个测试之后执行的方法

    [TestCleanup()]
    public void TestCleanup()
    {
      tRevertDatabase();
    }
我的问题:在多用户环境中,如何处理创建数据库快照的任务?当我的测试套件仍在运行时,可能会创建不正确的快照,并且他/她的测试可能会失败,甚至在测试套件结束时,数据库可能会恢复到不正确的状态。调用
CreateDatabaseSnapshots()之前必须进行哪些必要的检查
删除数据库快照()


我只想确保数据库在测试过程中不受影响。我也尝试过使用备用数据库、事务范围和其他备选方案,但它们无法在我的场景中使用,因此使用快照是唯一可行的选择。

与其修改数据库环境,不如改为:

1.) Take database snapshot of your database.
2.) Attach database snapshot to the local machine of the test-user. (Test initialize)
3.) Modify the database on the test environment of the user during automated testing.
注意:您可以在清理过程中停止将数据库重置回原始状态,因为每次测试初始化时,您都在创建目标数据库的新本地副本。(或仅处理本地数据库副本)


在测试期间,有时您希望拥有自己的测试环境,除非您的测试场景应由来自不同测试人员的数据修改组成。

我只在类级别(套件级别)创建快照。快照仅在测试套件(测试集)开始时创建一次,而不是在每个测试开始时创建。不过,我会在每次测试完成后恢复数据库。类似地,快照在测试套件结束时被删除(而不是在每个测试结束时)。这就是我的观点。如果不希望用户从其他用户处获取更改的数据,请不要共享数据库。为每个用户创建相应的测试环境。