如何通过API成功将通用测试结果发布到VSTS构建中?

时间:2017-06-13 11:46:56

标签: azure-pipelines azure-devops-rest-api

目的是从外部测试框架向VSTS构建报告报告 - VSTS构建定义中要求的最低要求是什么,检查通过API将测试结果发布到测试运行的能力?

目前,我有一个最小的概念证明VSTS构建定义包含:

  • VsTest测试程序集(运行单个MSTest VS测试,只需使用System.Threading.Thread.Sleep(60000)实现60秒延迟;) - 但是,我不需要Visual Studio测试。或者,我尝试使用powershell等待60秒命令,但没有成功模拟测试等待窗口。

当上面的VSTS构建正在运行时,我试图用JSON发布一个通用的“测试结果”:

 [

 {

    "testCaseTitle": "myTestCaseTitle",

    "automatedTestName": "myAutomatedTestName",

    "priority": 1,

    "outcome": "Passed"

 }

]

到当前的测试运行,在:

https://{instance}/DefaultCollection/{project}/_apis/test/runs/{run}/results?api-version={version}

然而,在构建测试运行期间,似乎仍然无法在API上运行以将新测试结果发布到构建完成之前。一旦完成,它也无法发布结果,服务器响应说明:

无法为处于已完成状态的测试运行添加或更新TestCaseResults

那么,如果可能的话,构建定义中打开一个有效窗口用于发布通用测试结果的最低要求是什么? (你可以避免指定一个特定的{run}号码,以当前的运行为目标吗?)

2 个答案:

答案 0 :(得分:1)

您可以先更新测试运行状态,然后将测试结果添加到该测试运行中。

简单的示例步骤:

  1. 更新测试运行。
  2. JSON正文:

    {
        "state":"InProgress"
    }
    
    1. 将测试结果添加到测试运行中。
    2. JSON正文:

      [
          {
              "testCaseTitle":"TestMethod1",
              "automatedTestName": "UnitTestProject1.UnitTest1.TestMethod1",
              "outcome": "Passed"
          }   
      ]
      

      关于线程睡眠:

      1. 添加PowerShell任务以构建定义
      2. 选择内联脚本
      3. 脚本:

        Start-Sleep -s 3600
        

        节点:如果您需要等待很长时间(超过30分钟),您需要使用私人代理,关于设置私人代理,您可以参考:Deploy an agent on Windows

答案 1 :(得分:0)

根据在VSTS中创建的产品构建,将外部测试框架的结果发布到VSTS的快速答案:

  1. 定义构建产品的构建过程

  2. 针对现有版本发布新的“测试运行”(在json正文中指定buildID)

    { “name”:“myTestRun”, “build”:{   “id”:“629” }, “isAutomated”:是的, “州”:“等待” }

  3. 启动您的定制测试控制器,并运行所需的测试

  4. 当您的测试控制器可以获得结果时,可以针对之前创建的运行发布测试结果,例如:

    [ { “testCaseTitle”:“myTestCaseTitle”, “automatedTestName”:“myAutomatedTestName”, “优先”:1, “结果”:“通过” } ]

    1. 修补程序更新测试运行以将状态设置为已完成:
  5. 身体:

    {
    "name": "myTestRun",
    "state": "Completed",
    "comment":"All tests have been run"
    

    }