将 NUnit 结果文件上传到 GitHub 个操作
Upload NUnit Result File to GitHub Actions
我正在为我的 C# 项目设置 GitHub 操作,作为其中的一部分,我希望在 GitHub.
中显示测试结果
使用 this action,我的 YML 的相关部分如下所示:
steps:
- name: Test
run: dotnet test --no-restore --verbosity normal --logger:"nunit"
- name: ⏫ Publish Unit Test Results
uses: EnricoMi/publish-unit-test-result-action@v1
if: always()
with:
files: ${{ github.workspace }}/*/TestResults/*.xml
测试 运行 正确,TestResults.xml 存在并上传,但 GitHub 操作打印:
Error processing result file
Invalid format.
现在文档有点稀疏,但据我所知 GitHub Actions 和 NUnit 应该使用 JUnit 测试结果格式,文件看起来也很像这样:
<test-run id="2" duration="0.028704999999999998" testcasecount="18" total="18" passed="18" failed="0" inconclusive="0" skipped="0" result="Passed" start-time="2022-02-19T 11:32:34Z" end-time="2022-02-19T 11:32:36Z">
<test-suite type="Assembly" name="HelloCSharp.Api.Tests.dll" fullname="/home/runner/work/hello-c-sharp/hello-c-sharp/HelloCSharp.Api.Tests/bin/Debug/net6.0/HelloCSharp.Api.Tests.dll" total="18" passed="18" failed="0" inconclusive="0" skipped="0" result="Passed" start-time="2022-02-19T 11:32:36Z" end-time="2022-02-19T 11:32:36Z" duration="0.028705">
<test-case name="DisplayNameForAll" fullname="HelloCSharp.Api.Tests.Models.RelationshipTypeTest.DisplayNameForAll" methodname="DisplayNameForAll" classname="RelationshipTypeTest" result="Passed" start-time="2022-02-19T 11:32:36Z" end-time="2022-02-19T 11:32:36Z" duration="0.006137" asserts="0" seed="1714534364" />
<!-- snip -->
<errors />
</test-suite>
</test-run>
那么这里可能是什么问题?
好的,NUnit 格式绝对不是 JUnit 格式。我尝试上传一个修复的 JUnit 文件并且成功了,然后我比较了 XML。 JUnit 文件有“testsuite”和“testcase”标签,而不是“test-suite”和“test-case”。
所以我的快速而肮脏的解决方案是在问题中的步骤之间添加此步骤:
- name: ☢ Reformat Test Files (NUnit != JUnit)
run: |
sed -i 's/test-case/testcase/' ${{ github.workspace }}/*/TestResults/*.xml
sed -i 's/test-suite/testsuite/' ${{ github.workspace }}/*/TestResults/*.xml
sed -i 's/test-run/testsuite/' ${{ github.workspace }}/*/TestResults/*.xml
我正在为我的 C# 项目设置 GitHub 操作,作为其中的一部分,我希望在 GitHub.
中显示测试结果使用 this action,我的 YML 的相关部分如下所示:
steps:
- name: Test
run: dotnet test --no-restore --verbosity normal --logger:"nunit"
- name: ⏫ Publish Unit Test Results
uses: EnricoMi/publish-unit-test-result-action@v1
if: always()
with:
files: ${{ github.workspace }}/*/TestResults/*.xml
测试 运行 正确,TestResults.xml 存在并上传,但 GitHub 操作打印:
Error processing result file
Invalid format.
现在文档有点稀疏,但据我所知 GitHub Actions 和 NUnit 应该使用 JUnit 测试结果格式,文件看起来也很像这样:
<test-run id="2" duration="0.028704999999999998" testcasecount="18" total="18" passed="18" failed="0" inconclusive="0" skipped="0" result="Passed" start-time="2022-02-19T 11:32:34Z" end-time="2022-02-19T 11:32:36Z">
<test-suite type="Assembly" name="HelloCSharp.Api.Tests.dll" fullname="/home/runner/work/hello-c-sharp/hello-c-sharp/HelloCSharp.Api.Tests/bin/Debug/net6.0/HelloCSharp.Api.Tests.dll" total="18" passed="18" failed="0" inconclusive="0" skipped="0" result="Passed" start-time="2022-02-19T 11:32:36Z" end-time="2022-02-19T 11:32:36Z" duration="0.028705">
<test-case name="DisplayNameForAll" fullname="HelloCSharp.Api.Tests.Models.RelationshipTypeTest.DisplayNameForAll" methodname="DisplayNameForAll" classname="RelationshipTypeTest" result="Passed" start-time="2022-02-19T 11:32:36Z" end-time="2022-02-19T 11:32:36Z" duration="0.006137" asserts="0" seed="1714534364" />
<!-- snip -->
<errors />
</test-suite>
</test-run>
那么这里可能是什么问题?
好的,NUnit 格式绝对不是 JUnit 格式。我尝试上传一个修复的 JUnit 文件并且成功了,然后我比较了 XML。 JUnit 文件有“testsuite”和“testcase”标签,而不是“test-suite”和“test-case”。
所以我的快速而肮脏的解决方案是在问题中的步骤之间添加此步骤:
- name: ☢ Reformat Test Files (NUnit != JUnit)
run: |
sed -i 's/test-case/testcase/' ${{ github.workspace }}/*/TestResults/*.xml
sed -i 's/test-suite/testsuite/' ${{ github.workspace }}/*/TestResults/*.xml
sed -i 's/test-run/testsuite/' ${{ github.workspace }}/*/TestResults/*.xml