Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 TSQLT测试运行超时_Sql Server_Unit Testing_Tsqlt - Fatal编程技术网

Sql server TSQLT测试运行超时

Sql server TSQLT测试运行超时,sql-server,unit-testing,tsqlt,Sql Server,Unit Testing,Tsqlt,我最近开始通过Redgate的SQL测试使用TSQLT来创建和运行单元测试。不过我遇到了一个问题。执行时间超过几分钟的单元测试将超时,这将停止所有其他单元测试的执行 如何延长tSQLt的超时长度 我的“单元测试”可能不是真正的单元测试,但我不熟悉另一种更适合的测试方法 我正在进行一个项目,以提高数据仓库夜间刷新的速度。目前,这个过程需要五个小时。通过在可能的情况下重新安排并行运行的任务,我将时间缩短到了两个小时。我的问题是,除非我能找到方法证明新流程与旧流程具有完全相同的最终结果,否则QA将在下

我最近开始通过Redgate的SQL测试使用TSQLT来创建和运行单元测试。不过我遇到了一个问题。执行时间超过几分钟的单元测试将超时,这将停止所有其他单元测试的执行

如何延长tSQLt的超时长度

我的“单元测试”可能不是真正的单元测试,但我不熟悉另一种更适合的测试方法

我正在进行一个项目,以提高数据仓库夜间刷新的速度。目前,这个过程需要五个小时。通过在可能的情况下重新安排并行运行的任务,我将时间缩短到了两个小时。我的问题是,除非我能找到方法证明新流程与旧流程具有完全相同的最终结果,否则QA将在下一年检查每个表中每行每列中的每个值。否则,该项目将因“太难”而被废弃

因此,我提出的测试是: 我有一个数据库,在使用我创建的新方法在我们的测试环境中处理结果表之后,我在其中运行脚本复制结果表。然后,回到测试环境中,我运行旧流程来更新表。然后,我对每个表运行一个单元测试,以证明使用新方法处理的存档表的内容与使用旧方法重新处理的表的内容完全相同

不幸的是,由于其中一些表(数百万行)的大小,一些单元测试正在超时。以下是我收到的错误:

测试程序:[HR360_unitTest1]。[HR360_DW_作业6]。[测试 事实\u组\u客户端相同内容]在emr\prepod上 System.Data.SqlClient.SqlException(0x80131904):超时已过期。这个 在完成操作之前经过的超时时间或 服务器没有响应。-->System.ComponentModel.Win32异常 (0x80004005):等待操作在 System.Data.SqlClient.SqlConnection.OnError(SqlException异常, 布尔断开连接,操作'1 wrapCloseInAction)位于 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔断开连接,操作'1 wrapCloseInAction)位于 System.Data.SqlClient.TdsParser.ThroweException和Warning(TdsParserStateObject stateObj、布尔调用方连接锁、布尔异步关闭)位于 System.Data.SqlClient.TdsParser.TryRun(运行行为, SqlCommand cmdHandler、SqlDataReader数据流、, BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj、Boolean和dataReady)位于 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, 运行行为运行行为,字符串重置选项字符串)位于 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior、RunBehavior、Boolean returnStream、Boolean 异步、Int32超时、任务和任务、布尔异步写入、SqlDataReader ds,布尔描述参数(加密请求) System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、布尔返回流、字符串 方法,TaskCompletionSource
1完成,Int32超时,任务和任务,
布尔异步(写)在
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource
1 完成,字符串方法名,布尔sendToPipe,Int32超时, 布尔异步(写)在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()位于 FrameworkWrapper.#kz(SqlCommand#LGj)位于 RedGate.SQLTest.tSQLt.FrameworkWrapper.#7qHc(字符串#2xAd, SqlParameter[]#LvPb)位于 FrameworkWrapper.#qd4b(字符串#LGxc)位于 RedGate.SQLTest.tSQLt.TestRunner.Execute(SqlConnection) 客户端连接ID:519569ed-03ce-4510-b226-9ff18e0f1d8d错误 编号:-2,状态:0,类别:11


如果没有办法增加tSQLt的超时时间,那么我必须找到另一种方法来自动测试这些表的内容是否相同(以一种可以随意重复的方式),或者放弃该项目。

tSQLt可能不是我进行此类测试的第一选择,它是为单元测试而设计的,通常是对代码的小部分进行快速的小测试。你可以看到类似的东西,但这也会与大量的数据相矛盾

如果您真的必须证明每个表中每行的每一列都是相同的,那么我将考虑在两个数据库中的每个表上创建一个MD5哈希列,然后只查询每个表中哈希不匹配的行。构建哈希值时,您需要排除无法保证两个表中相同的任何列,例如标识值、加载日期/时间等。例如:


--! 创建现有的表结构
创建表dbo.ExistingCustomer
(
CustomerId int非空标识(1,1)主键
,LastName varchar(50)不为空
,FirstName varchar(50)不为空
,MiddleName varchar(50)null
,TownOfBirth varchar(50)null
,DateOfBirth datetime不为空
,NumberOfDependents int不为空
,EtlCreatedOn日期时间不为空
)
去

--!!添加连接所有感兴趣列的计算列 --! 转换为单个字符串,在过程中处理NULL,然后创建 --! 整个字符串上32个字符的MD5哈希 alter表dbo.ExistingCustomer 将DeltaHash添加为 转换(nvarchar(32),hashbytes('MD4' ,转换(nvarchar(最大值) --!即使你有理由认为名字和姓氏会被填充, --!always code Defensive在一系列空字符串上进行哈希运算将得到 --!不太自信的结果 ,合并(nullif(LastName),,'LastName') +合并(nullif(FirstName)、、“FirstName”) --!此模式对可为空的列也有效