1

我有一个 Buildkite 管道:sample我用它在我的应用程序上运行单元测试:sampleapp

在 Buildkite 应用程序中,我设置了一个作业 -Unit Test它实际上通过脚本运行单元测试:unittest.sh

该脚本的输出(以日志的形式)在 Buildkite UI 中可用如果我打开构建页面:https://www.buildkite.com/org/sample/builds/buildNumber并单击单元测试部分。输出采用脚本运行日志的形式,最后以以下格式指定单元运行的结果:

[16:17:02]: ▸ Test Succeeded
+--------------------+-----+
|       Test Results       |
+--------------------+-----+
| Number of tests    | 773 |
| Number of failures | 0   |
+--------------------+-----+

现在,我有一个客户端,它通过端点调用 BuildKite REST API,该端点https://api.buildkite.com/v2/org/sampleapp/pipelines/sample/builds以 JSON 格式返回所有构建的列表。例如,每个构建都有很多数据(数据的一个子集是):

[
  {
    "id": "xyz",
    "url": "xyz",
    "number": 1,
    "creator": {...},
    "pipeline:" {...},
    "jobs": [
      {
        "id": "abc",
        "type": "script",
        "name": "Unit Test",
        "command": "sh .buildkite/unittest.sh",
        "log_url": "https://api.buildkite.com/v2/org/sampleapp/pipelines/sample/builds/1/jobs/12oidna-3e1n-f3fsa2/log",
        "raw_log_url": "https://api.buildkite.com/v2/org/sampleapp/pipelines/sample/builds/1/jobs/12oidna-3e1n-f3fsa2/log.txt",
        "artifacts_url": "https://api.buildkite.com/v2/org/sampleapp/pipelines/sample/builds/1/jobs/12oidna-3e1n-f3fsa2/artifacts"
      }
    ]
  }
]

但是,这个 JSON 响应没有关于 unittest.sh 脚本的日志中报告的测试结果的信息(即测试数量、通过的测试等)。

客户端还需要在调用 REST API 时以某种方式访问​​构建结果。

一种方法是让客户端首先获取构建 JSON 响应以及每个构建的响应,获取日志(如log_urlJSON 响应部分中指定的那样),然后解析它们(以某种方式?)以提取单元测试通过/失败结果。

但是,这将花费很长时间,因为每个响应有 30 个构建,并且日志文件非常大,因此下载和解析单个日志文件需要一些时间。

这里的另一个挑战是处理单元测试运行本身存在一些问题并且文件末尾没有报告测试结果编号但报告了一些错误的情况。

我想知道是否有更好的方法来做到这一点?也许通过使用 web-hooks 来解析 Buildkite 本身的数据,然后以某种方式将其发送到客户端上的接收端点。

但是,我不知道从哪里开始以及如何做到这一点.. 有人可以帮我这样做,或者至少为我指明正确的方向吗?

4

1 回答 1

0

您可以通过 REST API 访问任何作业的日志输出:

https://buildkite.com/docs/apis/rest-api/jobs#get-a-jobs-log-output

大多数测试运行器还能够将结果输出为 json 或 xml 文件。如果您能找到这样的选项,那么您可以将测试结果更丰富地存储为工件:

https://buildkite.com/docs/pipelines/artifacts

您甚至可以使用此文件将测试结果摘要作为注释上传:

https://buildkite.com/docs/agent/v3/cli-annotate

于 2020-08-25T10:45:50.237 回答