首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在tSQLt中查看测试结果?

如何在tSQLt中查看测试结果?
EN

Stack Overflow用户
提问于 2020-10-05 07:35:45
回答 3查看 889关注 0票数 1

我们使用tSQLt对我们的数据库进行单元测试,并在下面执行:

代码语言:javascript
复制
EXEC tSQLt.Run '[testComplianceDimensions].[test CountOfPropertiesWithLatestRepairJob]'
EXEC tSQLt.Run '[testComplianceDimensions].[test FactPropertyLatestRepairJobAgg]'

这是输出消息:

代码语言:javascript
复制
(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.
-----------------------------------------------------------------------------

是否有保存所有测试结果的表?

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-05 09:08:59

tSQLt.TestResult包含最后一次执行tSQLt.RuntSQLt.RunAll的结果。

在执行这些过程之间,表的内容不会被保留--在您的示例中,表将包含第一个测试的结果,直到第二个测试被执行为止。如果您希望收集多个测试的结果,则需要将测试作为同一命令的一部分执行--在本例中,可能使用EXEC tSQLt.Run '[testComplianceDimensions]' (它将在套件中运行所有测试)。

票数 2
EN

Stack Overflow用户

发布于 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]

代码语言:javascript
复制
/*
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]表创建脚本是:

代码语言:javascript
复制
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()找到的)。

票数 3
EN

Stack Overflow用户

发布于 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之前,您可能会停下来三思,因为实现您自己的解决方案并不那么困难,而且您将拥有更多的控制(就像我们所做的)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64204248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档