如何使用 Saxon 在 VSTS (Azure DevOps) 中对 XML 文件执行 XSLT?

How to perform XSLT on XML file in VSTS (Azure DevOps) using Saxon?

我在 Visual Studio Team Services(现为 Azure DevOps)工作。我正在 运行ning PHPUnit 并将测试结果导出为 JUnit 供 VSTS 使用;但是,当我尝试使用 PHPUnit XML 文件 运行 PublishTestResults 任务时收到错误消息:

"##[warning]Invalid results file. Make sure the result format of the file '/home/vsts/work/1/s/styled-results.xml' matches 'JUnit' test results format."

所以在研究这个问题很长时间后,我发现另一个人试图将一个 PHPUnit 生成的 JUnit 文件发布到一个 XSL 文件的 VSTS here. It turns out that they simply don't support the output of PHPUnit. A community member has posted this gist 以将 XML 转换成一种格式VSTS(Azure DevOps)会明白。

gist 的创建者提到他在 VSTS 上的脚本任务中使用 saxonb 来处理 XSLT。我不知道如何在 VSTS 上 运行 saxonb。我不知道要调用的可执行文件的名称、选项等。我尝试了 Saxon 文档,但我似乎无法在 VSTS Ubuntu 16.04 构建代理上运行它。

我还应该注意,我尝试 但没有成功。

您可以将 Java 版本的 Saxon 9 HE 下载为 JAR,并在 VSTS (Azure DevOps) 中下载 运行 该 JAR。我 运行 正在托管 Ubuntu 16.04 构建代理(已安装 Java、PHP 等)。

我只是通过执行 java 二进制文件并将我的 JAR 传递到与我的 XML 和 XSL 文件相同的位置来执行 jar:

java -jar saxon9he.jar -xsl:phpunit_to_junit.xsl -s:test-results.xml

这生成了一个文件夹,其中包含我的测试,格式正确以供 VSTS (Azure DevOps) 使用。您的设置会有所不同,因为我所有的测试都有“-Test.xml”,请查看 testResultsFiles 选项。

我通过修改 XSL 中的以下行,将我的测试设置为使用“-Test.xml”输出。

<xsl:variable name="filename" select="concat('TEST-',@name,'-Test.xml')" />

下一步是使用 PublishTestResults 任务发布我的测试。这是我的 YAML 文件包含的用于发布结果的内容。

- task: PublishTestResults@2
  displayName: 'Publish test results'
  inputs:
    testRunner: 'JUnit'
    testResultsFiles: '**/*-Test.xml' 
    searchFolder: '$(System.DefaultWorkingDirectory)'
    mergeTestResults: false