我正在尝试使用Azure Pipeline完全自动化数据库项目的生成,测试和发布。
我已经有一个由三个数据库项目组成的Visual Studio解决方案。第一个项目是数据库,其中包含表,存储过程,函数,数据等。第二个项目是tSQLt框架(如果有兴趣,则为1.0.5873.27393版)。最后,第三个项目是tSQLt测试。
我的目标是将解决方案检查到源代码控制中,管道将自动构建解决方案,将dacpacs部署到构建服务器(在本例中为docker),运行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。但这给了我一个不同的错误来处理:
## [warning]无法读取/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计算机,因此这里不是一个选择。
我没有选择的余地,所以我正在寻找一些帮助。
您在这里处理2个问题。您的结果集中有噪音,不是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设置为无限制。如果您只想运行测试的一个子集,则需要对传入的SQL查询进行修改,但除此之外,这是所有运行所有测试并以xml格式获取结果的“唯一条件” ,可由Azure DevOps读取
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句