我们使用tSQLt对我们的数据库进行单元测试,并在下面执行:
EXEC tSQLt.Run '[testComplianceDimensions].[test CountOfPropertiesWithLatestRepairJob]'
EXEC tSQLt.Run '[testComplianceDimensions].[test FactPropertyLatestRepairJobAgg]'这是输出消息:
(1 row(s) affected)
[testComplianceDimensions].[test CountOfPropertiesWithLatestRepairJob] failed: (Failure) Fact_PropertyLatestRepairJobAgg failure - property counts do not match Expected: <324211> but was: <0>
+----------------------+
|Test Execution Summary|
+----------------------+
|No|Test Case Name |Dur(ms)|Result |
+--+----------------------------------------------------------------------+-------+-------+
|1 |[testComplianceDimensions].[test CountOfPropertiesWithLatestRepairJob]| 16037|Failure|
-----------------------------------------------------------------------------
Msg 50000, Level 16, State 10, Line 1
Test Case Summary: 1 test case(s) executed, 0 succeeded, 1 failed, 0 errored.
-----------------------------------------------------------------------------
(1 row(s) affected)
+----------------------+
|Test Execution Summary|
+----------------------+
|No|Test Case Name |Dur(ms)|Result |
+--+----------------------------------------------------------------+-------+-------+
|1 |[testComplianceDimensions].[test FactPropertyLatestRepairJobAgg]| 14|Success|
-----------------------------------------------------------------------------
Test Case Summary: 1 test case(s) executed, 1 succeeded, 0 failed, 0 errored.
-----------------------------------------------------------------------------是否有保存所有测试结果的表?
谢谢你的帮助。
发布于 2020-10-05 09:08:59
表tSQLt.TestResult包含最后一次执行tSQLt.Run或tSQLt.RunAll的结果。
在执行这些过程之间,表的内容不会被保留--在您的示例中,表将包含第一个测试的结果,直到第二个测试被执行为止。如果您希望收集多个测试的结果,则需要将测试作为同一命令的一部分执行--在本例中,可能使用EXEC tSQLt.Run '[testComplianceDimensions]' (它将在套件中运行所有测试)。
发布于 2022-05-11 16:49:44
我能够相当简单地修改我的tSQLt安装,使用@gotqn的建议方法将结果记录到另一个数据库表中,以更改输出格式。注意,我还必须修改另一个proc,以允许RedGate的SQL发布结果。
我从这里开始我的旅程:https://groups.google.com/g/tsqlt/c/qP1iazrp-pE
这导致我创建了一个脚本,在每个新的tSQLt安装上运行,以便将所有结果收集到一个表中,并提供额外的度量来帮助我们为测试通过/失败构建一个仪表板。
[tSQLt].[NullTestResultFormatter]被修改了,因为通过RedGate的SQL的UI运行测试使用这个格式化程序。如果您不使用RedGate的step而只执行EXEC tSQLt.Run* ,那么很可能忽略/删除此步骤.。
[tSQLt].[SaveTestResultFormatter]是我创建的新格式化程序。只需将最后一个测试结果转储到我的表中即可。
EXECUTE @RC = [tSQLt].[SetTestResultFormatter] @Formatter将默认格式化程序更改为我的新格式化程序。
下面是我在每个新的tSQLt安装上运行的完整代码块。它假定数据库和表存在:[tSQLtRunHistory].[dbo].[TestResults]
/*
tSQLt Customization - Logging of TestResult
This Script, when run on a database with tSQLt installed, will modify
the ResultFormatters to insert the TestResult data to an external
database (tSQLtRunHistory.dbo.TestResults)
*/
USE --CHOOSE DATABASE TO ENABLE TEST LOGGING
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [tSQLt].[NullTestResultFormatter]
AS
BEGIN
--Manually added for custom reporting of each test result
--Changing this allows RedGate SQL Test to post, since it runs tests with the NullFormatter, not the DefaultFormatter
--Adds the test result to another table - doesn't seem to post when running tests via the GUI, but does when tSQLt.RunAll is executed
INSERT INTO [tSQLtRunHistory].[dbo].[TestResults]
(
[Server]
, [LoginUserName]
, [HostName]
, [Database]
, [Class]
, [TestCase]
, [TranName]
, [Result]
, [Msg]
, [TestStartTime]
, [TestEndTime]
)
SELECT
@@SERVERNAME
, SUSER_NAME()
, HOST_NAME()
, DB_NAME()
, [Class]
, [TestCase]
, [TranName]
, [Result]
, [Msg]
, [TestStartTime]
, [TestEndTime]
FROM [tSQLt].[TestResult];
--END of Manually added
RETURN 0;
END;
GO
CREATE OR ALTER PROCEDURE [tSQLt].[SaveTestResultFormatter]
AS
BEGIN
--Custom ResultFormatter which adds each TestResult to a central database for cataloguing
--Adds the test result to another table
INSERT INTO [tSQLtRunHistory].[dbo].[TestResults]
(
[Server]
, [LoginUserName]
, [HostName]
, [Database]
, [Class]
, [TestCase]
, [TranName]
, [Result]
, [Msg]
, [TestStartTime]
, [TestEndTime]
)
SELECT
@@SERVERNAME
, SUSER_NAME()
, HOST_NAME()
, DB_NAME()
, [Class]
, [TestCase]
, [TranName]
, [Result]
, [Msg]
, [TestStartTime]
, [TestEndTime]
FROM [tSQLt].[TestResult];
END;
GO
DECLARE @RC INT
DECLARE @Formatter NVARCHAR(4000)
SET @Formatter = 'tSQLt.SaveTestResultFormatter' --'tSQLt.DefaultResultFormatter'
EXECUTE @RC = [tSQLt].[SetTestResultFormatter]
@Formatter
GO作为参考,我的[dbo].[TestResults]表创建脚本是:
USE [tSQLtRunHistory]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TestResults](
[Id] [INT] IDENTITY(1,1) NOT NULL,
[Server] [NVARCHAR](MAX) NOT NULL,
[LoginUserName] [NVARCHAR](MAX) NOT NULL,
[HostName] [NVARCHAR](MAX) NOT NULL,
[Database] [NVARCHAR](MAX) NOT NULL,
[Class] [NVARCHAR](MAX) NOT NULL,
[TestCase] [NVARCHAR](MAX) NOT NULL,
[TranName] [NVARCHAR](MAX) NOT NULL,
[Result] [NVARCHAR](MAX) NULL,
[Msg] [NVARCHAR](MAX) NULL,
[TestStartTime] [DATETIME] NOT NULL,
[TestEndTime] [DATETIME] NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO注意,在编写本报告时,我安装的tSQLt版本是1.0.5873.27393 (通过运行SELECT * FROM tSQLt.Info()找到的)。
发布于 2020-10-05 07:56:28
您可以尝试使用tSQLt.SetTestResultFormatter更改输出格式,并使用另一个应用程序的结果如下:
目前无法更改默认输出的布局。但是,有一个xml格式生成器以JUnit兼容的格式返回测试结果。它可用于在CI环境中运行tSQLt测试。有关示例实现,请参见https://www.simple-talk.com/sql/sql-tools/using-sql-test-database-unit-testing-with-teamcity-continuous-integration/。
正如所解释的,tSQLt.SetTestResultFormatter
允许以不同方式格式化输出的扩展点。例如,有一个XML格式化程序可以用来生成与JUnit兼容的输出,而不是人类可读的输出。我们还没有使那部分稳定下来。这就是为什么它还没有被记录下来。其目标是允许通过此方法安装外部格式化程序,作为对现有格式化程序的扩展。但是,您可以通过其他方法获得XML输出。参见例如http://tsqlt.org/177/integrating-tsqlt-with-cruise-control/
如果这不是您要寻找的,您将在GitHub存储库中获得更多的帮助。
此外,在投资于tSQLt之前,您可能会停下来三思,因为实现您自己的解决方案并不那么困难,而且您将拥有更多的控制(就像我们所做的)。
https://stackoverflow.com/questions/64204248
复制相似问题