.net - 如何使用 jenkins 管道发布 dotnet 核心测试?

标签 .net jenkins .net-core nunit jenkins-pipeline

我正在尝试使用 jenkins-pipeline 发布测试结果,

使用这个管道脚本,我设法完成构建并生成“xml”输出:

node {
stage 'Checkout'
    checkout scm

stage 'Build'
    bat "\"C:/Program Files/dotnet/dotnet.exe\" restore \"${workspace}/MyProg.sln\""
    bat "\"C:/Program Files/dotnet/dotnet.exe\" build \"${workspace}/MyProg.sln\""

stage 'UnitTests'
    bat returnStatus: true, script: "\"C:/Program Files/dotnet/dotnet.exe\" test \"${workspace}/MyProg.sln\" --logger \"trx;LogFileName=unit_tests.xml\" --no-build"
    nunit testResultsPattern: 'Tests\\*Test*\\TestResults\\unit_tests.xml'
}

但是在“UnitTest”阶段我收到了这个错误:

" Publish NUnit test result report Could not read the XSL XML file. Please report this issue to the plugin author "



当我使用“正常”步骤构建(没有管道框架)时,测试得到发布。
使用:
  • DotNet Core 2.0
  • Jenkins 2.111
  • NUnit 插件 0.23

  • 附加 XML 之一:

    <?xml version="1.0" encoding="UTF-8"?>
    <TestRun id="201fdc5c-9a47-461b-a56c-1aec8778053d" name="golano1@VM-CCT-BUILD3 2018-03-28 17:36:50" runUser="CORP\golano1" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
      <Times creation="2018-03-28T17:36:50.5380380+03:00" queuing="2018-03-28T17:36:50.5380497+03:00" start="2018-03-28T17:36:38.1418862+03:00" finish="2018-03-28T17:36:55.6498820+03:00" />
      <TestSettings name="default" id="3e9b0993-3888-4428-bd08-e217e3b54831">
        <Deployment runDeploymentRoot="golano1_VM-CCT-BUILD3 2018-03-28 17_36_50" />
      </TestSettings>
      <Results>
        <UnitTestResult executionId="77a19978-2bbb-4bcb-afaa-d5be4384e0d1" testId="a08b2ec5-a68d-434b-a35f-6c65159eee8f" testName="TestSentinalOneBigFile_Failed" computerName="VM-CCT-BUILD3" duration="00:00:05.0340000" startTime="2018-03-28T17:36:45.0000000+03:00" endTime="2018-03-28T17:36:50.0000000+03:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="77a19978-2bbb-4bcb-afaa-d5be4384e0d1" />
        <UnitTestResult executionId="49fb4bd0-d650-4ed4-b0f2-40241b138f40" testId="15590544-6d25-4b07-9736-91fc3089eb1d" testName="TestSentinalOneFullScanOfSingleFile_Success" computerName="VM-CCT-BUILD3" duration="00:00:05.0130000" startTime="2018-03-28T17:36:50.0000000+03:00" endTime="2018-03-28T17:36:55.0000000+03:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="49fb4bd0-d650-4ed4-b0f2-40241b138f40" />
      </Results>
      <TestDefinitions>
        <UnitTest name="TestSentinalOneBigFile_Failed" storage="c:\jenkins\workspace\testfolder\pg_branchbuild\tests\sentinalonetests\bin\debug\netcoreapp2.0\sentinalonetests.dll" id="a08b2ec5-a68d-434b-a35f-6c65159eee8f">
          <Execution id="77a19978-2bbb-4bcb-afaa-d5be4384e0d1" />
          <TestMethod codeBase="C:\Jenkins\workspace\TestFolder\PG_BranchBuild\Tests\SentinaloneTests\bin\Debug\netcoreapp2.0\SentinaloneTests.dll" executorUriOfAdapter="executor://nunit3testexecutor/" className="SentinaloneTests.SentinaloneEngineConnectorTest" name="TestSentinalOneBigFile_Failed" />
        </UnitTest>
        <UnitTest name="TestSentinalOneFullScanOfSingleFile_Success" storage="c:\jenkins\workspace\testfolder\pg_branchbuild\tests\sentinalonetests\bin\debug\netcoreapp2.0\sentinalonetests.dll" id="15590544-6d25-4b07-9736-91fc3089eb1d">
          <Execution id="49fb4bd0-d650-4ed4-b0f2-40241b138f40" />
          <TestMethod codeBase="C:\Jenkins\workspace\TestFolder\PG_BranchBuild\Tests\SentinaloneTests\bin\Debug\netcoreapp2.0\SentinaloneTests.dll" executorUriOfAdapter="executor://nunit3testexecutor/" className="SentinaloneTests.SentinaloneEngineConnectorTest" name="TestSentinalOneFullScanOfSingleFile_Success" />
        </UnitTest>
      </TestDefinitions>
      <TestEntries>
        <TestEntry testId="a08b2ec5-a68d-434b-a35f-6c65159eee8f" executionId="77a19978-2bbb-4bcb-afaa-d5be4384e0d1" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
        <TestEntry testId="15590544-6d25-4b07-9736-91fc3089eb1d" executionId="49fb4bd0-d650-4ed4-b0f2-40241b138f40" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
      </TestEntries>
      <TestLists>
        <TestList name="Results Not in a List" id="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
        <TestList name="All Loaded Results" id="19431567-8539-422a-85d7-44ee4e166bda" />
      </TestLists>
      <ResultSummary outcome="Completed">
        <Counters total="2" executed="2" passed="2" failed="0" error="0" timeout="0" aborted="0" inconclusive="0" passedButRunAborted="0" notRunnable="0" notExecuted="0" disconnected="0" warning="0" completed="0" inProgress="0" pending="0" />
        <Output>
          <StdOut>NUnit Adapter 3.8.0.0: Test execution startedRunning all tests in C:\Jenkins\workspace\TestFolder\PG_BranchBuild\Tests\SentinaloneTests\bin\Debug\netcoreapp2.0\SentinaloneTests.dllNUnit3TestExecutor converted 2 of 2 NUnit test casesNUnit Adapter 3.8.0.0: Test execution complete</StdOut>
        </Output>
      </ResultSummary>
    </TestRun>


    我究竟做错了什么?

    还尝试过:
    step([$class: 'NUnitPublisher', testResultsPattern: 'Tests\\FilesScannerTests\\TestResults\\unit_tests.xml', debug: false, keepJUnitReports: true, skipJUnitArchiver:false, failIfNoResults: true])
    

    但它也没有成功..

    最佳答案

    我设法使用“ MSTestPublisher ”类做到了这一点,

    所以最终的管道是:

    node {
    stage 'Checkout'
        checkout scm
    
    stage 'Build'
        bat "\"C:/Program Files/dotnet/dotnet.exe\" restore \"${workspace}/MyProg.sln\""
        bat "\"C:/Program Files/dotnet/dotnet.exe\" build \"${workspace}/MyProg.sln\""
    
    stage 'UnitTests'
        bat returnStatus: true, script: "\"C:/Program Files/dotnet/dotnet.exe\" test \"${workspace}/MyProg.sln\" --logger \"trx;LogFileName=unit_tests.xml\" --no-build"
        step([$class: 'MSTestPublisher', testResultsFile:"**/unit_tests.xml", failOnError: true, keepLongStdio: true])
    }


    我已经上传了一些我制作的示例到我的 GitHub 供大家使用和贡献,请随意查看:

    https://github.com/avrum/JenkinsFileFor.NETCore

    那些管道 jenkinsfile 会将此管道模板添加到您的构建中:

    Example Jenkins Pipeline|Solid

    关于.net - 如何使用 jenkins 管道发布 dotnet 核心测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49541087/

    相关文章:

    .net - Int32和UInt32有什么区别?

    jenkins - 如何使用新链接和图标扩展 Jenkins 工作页面

    ant - 运行easyb\selenium时出现permgen错误

    c# - .Net Core 3.1 HttpClient 不重用套接字

    docker - 如何使用Docker Build解决Azure DevOps Build中的 “Access to the path csproj.nuget.g.props is denied”错误?

    c# - 编码我的字符串以通过 C# 发送 http 请求

    C# 改变文本框中一个字符的颜色

    .net - 在延迟的自定义操作之间传递数据

    java - Jenkins/Buildr 运行 eclipse 编译器为 'javac',无需更改系统 java

    javascript - 通过ajax下载文件会导致文件损坏