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

问题描述 投票:0回答:1

我在Visual Studio Team Services(现在是Azure DevOps)中工作。我正在运行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文件发布到VSTS here。事实证明,他们根本不支持PHPUnit的输出。用于将XML转换为VSTS(Azure DevOps)将理解的格式的XSL文件的A community member has posted this gist

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

我还应该注意到,我尝试了performing the XSL transform via PowerShell没有成功。

xml xslt azure-devops azure-pipelines saxon
1个回答
2
投票

您可以将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
© www.soinside.com 2019 - 2024. All rights reserved.