通过 Azure DevOps REST 获取 PR 代码覆盖率差异状态 API

Getting PR Code Coverage diff status via Azure DevOps REST API

我的 Azure DevOps 分支设置了代码覆盖率策略,因此 PR 必须包含 80% 的差异覆盖率(即覆盖 80% 的修改行)。我正在尝试通过 REST API 是否通过差异覆盖策略。

我尝试使用 GET https://dev.azure.com/{organization}/{project}/_apis/policy/evaluations?artifactId=vstfs:///CodeReview/CodeReviewId/{projectId}/{pullRequestId}&api-version=6.1-preview.1,但在响应中,the status of the codecoverage policy is "queued".

我认为这与我在 PR 的检查部分中看到两个代码覆盖率检查有关: one check says myrepo/codecoverage is is "Waiting" status, and another says "Coverage status check succeeded for myrepo"

上面的 API 正在返回等待代码覆盖检查,但没有返回成功的代码覆盖检查。这是因为代码覆盖被认为是外部服务吗?如果是这样,我怎样才能得到结果?

我可以使用此 API 获得完整的代码覆盖率:https://dev.azure.com/{organization}/{project}/_apis/test/codecoverage?buildId={buildId}&flags=7&api-version=6.1-preview.1,但我再次寻找差异覆盖率。

或者分支策略设置有问题,导致代码覆盖率检查不会自行更新,而是离开等待检查并生成单独的检查?谢谢。

您看到两次代码覆盖率检查的原因是找不到您指定的 myrepo/codecoverage 状态检查。因此它停留在等待从管道发布的代码覆盖状态。您可能在 Status to check 字段中手动输入了 myrepo/codecoverage,并在 myrepo.

中输入了大写字母

分支策略页面的 Status to check 字段是 {name-of-your-pipeline/codecoverage},如此 document 中所述。但是文档中并没有明确说明name-of-your-pipeline是小写的。如果您的验证管道名称中包含大写字母,您需要在手动输入 Status to check 字段时将其更改为小写字母。

一开始我遇到了同样的问题,因为我不知道{name-of-your-pipeline/codecoverage}应该是小写的。我在字段中用大写字母手动输入了我的管道名称。

实际上,如果您的验证管道在您设置 Status check 分支策略之前已经执行并发布了覆盖率。 Status to check 的值将自动查找覆盖状态并显示在下拉列表中。见下文。您可以直接select它而无需手动输入值。