【问题标题】:How to view test results in tSQLt?如何在 tSQLt 中查看测试结果?
【发布时间】:2020-10-05 07:35:45
【问题描述】:

我们正在使用 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.
-----------------------------------------------------------------------------

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

感谢您的帮助。

【问题讨论】:

    标签: sql-server tsql tsqlt


    【解决方案1】:

    tSQLt.TestResult 包含上次执行tSQLt.RuntSQLt.RunAll 的结果

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

    【讨论】:

    • 谢谢,这主要是我要找的,有测试结果的表。如果有来自不同测试模式的测试(例如testComplianceDimensionstestComplianceFacts),您的意思是我必须将它们收集到一个测试模式下,以便结果都记录在同一个测试结果表中吗?
    • @silver - 如果您想在单个测试运行中从多个模式运行测试,我知道这样做的唯一方法是执行tSQLt.RunAll(它运行所有测试被测数据库中的套件)
    • 我明白了,运行它们需要几天时间是我们最初的问题。我们正在寻找方法来运行来自不同模式的测试子集,并为此提供一份报告。
    • @silver - 您可以在每次测试执行后从结果表中收集结果
    • @silver - 我认为您必须编写一个自定义脚本(TSQL / cmd / bash / PowerShell,取决于您的环境),使用tSQLt.Run 执行测试列表并收集结果每次测试后来自tSQLt.TestResult
    【解决方案2】:

    您可以尝试使用tSQLt.SetTestResultFormatter 更改输出格式,并将结果由另一个应用程序消费为:

    目前无法更改默认输出的布局。 但是,有一个返回测试的 xml 格式生成器 生成 JUnit 兼容格式。可以用来运行 tSQLt 在 CI 环境中进行测试。看 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 repository 中获得更多帮助。

    此外,在投资 tSQLt 之前,您可能会停下来三思而后行,因为实施您自己的解决方案不会那么困难,而且您将拥有更多控制权(就像我们所做的那样)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      • 2018-04-26
      • 1970-01-01
      • 2016-05-26
      • 2021-05-31
      相关资源
      最近更新 更多