gpt4 book ai didi

azure - 将测试结果发布到 Azure(VS 数据库项目、tSQLt、Azure Pipelines、Docker)

转载 作者:行者123 更新时间:2023-12-04 03:41:14 26 4
gpt4 key购买 nike

我正在尝试使用 Azure Pipeline 完全自动化数据库项目的构建、测试和发布。

我已经有了一个由三个数据库项目组成的 Visual Studio 解决方案。第一个项目是数据库,其中包含表、存储过程、函数、数据等。第二个项目是 tSQLt 框架(如果有人感兴趣的话,版本为 1.0.5873.27393)。最后第三个项目是 tSQLt 测试。

我的目标是将解决方案 checkin 源代码管理,管道将自动构建解决方案,将 dacpac 部署到构建服务器(在本例中为 docker),运行 tSQLt 测试,并将结果发布回管道.

我的管道是这样工作的。

  • 构建 Visual Studio 解决方案
  • 发布工件
  • 设置运行 Ubuntu 和 SQL Server 的 Docker 容器
  • 安装 SQLPackage
  • 将 dacpac 部署到 SQL 实例
  • 运行 tSQLt 测试
  • 发布测试结果

发布结果之前的一切都正常,但是在这一步中我遇到了以下错误:

[警告]无法读取/home/vsts/work/1/Results.xml。错误:根级别的数据无效。第 1 行,位置 1。

我在管道中添加了另一个步骤来显示 Results.xml 文件的内容。它看起来像这样:

XML_F52E2B61-18A1-11d1-B105-00805F49916B                                                                                                                                                                                                                        
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<testsuites><testsuite id="1" name="MyNewTestClassOne" tests="1" errors="0" failures="0" timestamp="2021-02-01T10:40:31" time="0.000" hostname="f6a05d4a3932" package="tSQLt"><properties/><testcase classname="MyNewTestClassOne" name="TestNumberOne" time="0.

我不确定列名和破折号是否应该在文件中,但我猜不是。我添加了另一个步骤来删除它们,只留下 XML。但这给了我一个不同的错误来处理:

##[警告]无法读取/home/vsts/work/1/Results.xml。错误:存在未闭合的文字字符串。第 2 行,位置 1。

这个有点明显,因为正如您将在上面看到的,XML 不完整。

这是我的管道的一部分,它运行 tSQLt 测试并将结果输出到 Results.xml

- script: |
sqlcmd -S 127.0.0.1,1433 -U SA -P Password.1! -d StagingDB -Q 'EXEC tSQLt.RunAll;'
displayName: 'tSQLt - Run All Tests'
- script: |
cd $(Pipeline.Workspace)
sqlcmd -S 127.0.0.1,1433 -U SA -P Password.1! -d StagingDB -Q 'SET NOCOUNT ON; EXEC tSQLt.XmlResultFormatter;' -o 'tSQLt_Results.xml'
displayName: 'tSQLt - Output Results'

我研究了很多这方面的博客和文章,大多数人都在做同样的事情。有些人使用 PowerShell 而不是 sqlcmd,但考虑到我使用的是 Ubuntu 机器,这不是一个选项。

我别无选择,所以我正在寻求一些帮助。

最佳答案

您正在处理两个问题。您的结果集中存在噪音,即不是 xml,并且您的 xml 结果在 256 个字符后被截断。我可以帮助你解决这两个问题。

我所做的基本上是这样的:

/opt/mssql-tools/bin/sqlcmd \
-S "localhost, 31114" -U sa \
-P "password" \
-d dbname \
-y0 \
-Q "BEGIN TRY EXEC tSQLt.RunAll END TRY BEGIN CATCH END CATCH; EXEC tSQLt.XmlResultFormatter" \
| grep -w "<testsuites>" \
| tee "resultfile.xml"

需要注意的几点:

  • y0 重要。这会将 xml 结果集的长度设置为无限制,最多为 256。
  • 使用正则表达式进行 grep - 确保您只获得 xml,而不是其周围的噪音。

如果您只想运行测试的子集,则需要对传入的 SQL 查询进行修改,但除此之外,这是一个包罗万象的“oneliner”来运行所有测试并获取结果xml 格式,可由 Azure DevOps 读取

关于azure - 将测试结果发布到 Azure(VS 数据库项目、tSQLt、Azure Pipelines、Docker),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65996376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com