Skip to Content

RESTful

Summary Map

  • Method: GET
  • Path: /api/coverage/summary/map
  • Description: Returns coverage summary aggregation (total/covered/percent), can be queried by commit or merge request dimension, with optional filter conditions.

Query Parameters

  • subject (Required): commit | commits | pull | pulls | multiple-commits
  • subjectID (Required): When subject is commit/commits, it’s sha; when it’s pull/pulls, it’s pullNumber; when it’s multiple-commits, it’s commit range a...b
  • provider (Required): Code hosting service provider, e.g., github, gitlab
  • repoID (Required): Repository identifier (e.g., GitLab’s projectId or GitHub’s owner/repo)
  • buildProvider (Optional): Build/CI provider identifier
  • buildID (Optional): Build ID
  • reportProvider (Optional): Report provider identifier (such as mpaas, flytest, person, etc.)
  • reportID (Optional): Report ID
  • filePath (Optional): Only aggregate specified file (or matched relative path ending)
  • mode (Optional): blockMerge | fileMerge | default (used when pull/pulls/multiple-commits)
  • compareTarget (Optional): Target ref/sha for comparison with current commit (only GitLab supported)
  • onlyChanged (Optional): true | false, whether to return only changed files

响应示例

{ "src/components/B0.tsx": { "lines": { "total": 6, "covered": 6, "skipped": 0, "pct": 100 }, "functions": { "total": 3, "covered": 3, "skipped": 0, "pct": 100 }, "statements": { "total": 6, "covered": 6, "skipped": 0, "pct": 100 }, "branches": { "total": 0, "covered": 0, "skipped": 0, "pct": 100 }, "newlines": { "total": 13, "covered": 13, "skipped": 0, "pct": 100 }, "changebranches": { "total": 0, "covered": 0, "skipped": 0, "pct": 100 }, "changefunctions": { "total": 3, "covered": 3, "skipped": 0, "pct": 100 }, "path": "src/components/B0.tsx", "change": true } }

Notes

  • When subject is commit | commits, internally uses commit-dimension coverage mapping for aggregation;
  • When subject is pull | pulls, internally uses merge request-dimension coverage mapping for aggregation;
  • When subject is multiple-commits, subjectID is in the form a...b, using b as baseline for range aggregation;
  • percent is calculated as percentage of covered/total, rounded to two decimal places;
  • If onlyChanged=true, only statistics for changed files are returned.

Coverage Map

  • Method: GET
  • Path: /api/coverage/map
  • Description: Returns file-level hit details, including statement/function/branch hit counts and source code structure location information; can be queried by commit or merge request dimension.

Query Parameters

  • Same as Summary Map (see above), including subject/subjectID/provider/repoID and optional filter conditions.

响应示例(部分结构)

{ "src/app/foo.ts": { "path": "src/app/foo.ts", "statementMap": { "1": { "start": {"line":1,"column":0}, "end": {"line":3,"column":1} } }, "fnMap": { "1": { "name": "main", "decl": {"start":{"line":1,"column":0}, "end":{"line":1,"column":4}}, "loc": {"start":{"line":1,"column":0}, "end":{"line":10,"column":1}} } }, "branchMap": { "1": { "locations": [{"start":{"line":2,"column":0},"end":{"line":2,"column":10}}] } }, "s": { "1": 3 }, "f": { "1": 1 }, "b": { "1": [1,0] }, "change": { "path": "src/app/foo.ts", "added": [2,3], "deleted": [] } } }

Coverage Overview

  • Method: GET
  • Path (Commit): /api/provider/:provider/repo/:repoID/coverage/overview/commits/:sha
  • Path (Pull): /api/provider/:provider/repo/:repoID/coverage/overview/pulls/:pullNumber
  • Path (Multiple Commits): /api/provider/:provider/repo/:repoID/coverage/overview/multiple-commits/:commitRange
  • Description: Returns coverage summary aggregated by build dimension, including auto/manual test case dimensions and possible test case external chain information.

Path Parameters

  • provider: github | gitlab | ...
  • repoID: Repository identifier (GitLab is projectId, GitHub is usually owner/repo)
  • sha (commit path): Commit SHA
  • pullNumber (pull path): Merge request number
  • commitRange (multiple-commits path): Commit range, format is a...b

Query Parameters

  • mode (Optional): blockMerge | fileMerge | default (used when pull/pulls/multiple-commits)

Response Fields

  • resultList: Array; each item represents a build
    • buildID: Build ID
    • buildProvider: Build provider
    • summary: Summary for this build dimension { total, covered, percent }
    • modeList: Test case dimensions distinguished by “auto / manual”
      • mode: auto | manual
      • summary: Summary for this dimension
      • caseList: List of report dimensions (only when present)
        • reportProvider: Report provider (such as mpaas, flytest, person, etc.)
        • reportID: Report ID
        • summary: Summary for this report
        • testCaseInfo (when auto-fetch is supported):
          • caseName, passedCount, failedCount, totalCount, passRate, caseUrl

响应示例(Commit 概览)

{ "resultList": [ { "buildID": "29235962", "buildProvider": "mpaas", "summary": { "functions": { "covered": 463, "total": 1843, "skipped": 0, "pct": 25.12 }, "statements": { "covered": 2300, "total": 8246, "skipped": 0, "pct": 27.89 }, "branches": { "covered": 771, "total": 5335, "skipped": 0, "pct": 14.45 }, "lines": { "covered": 2163, "total": 7886, "skipped": 0, "pct": 27.42 }, "newlines": { "covered": 0, "total": 0, "skipped": 0, "pct": 100 }, "changebranches": { "covered": 0, "total": 0, "skipped": 0, "pct": 100 }, "changefunctions": { "covered": 0, "total": 0, "skipped": 0, "pct": 100 } }, "modeList": [ { "mode": "auto", "summary": { "functions": { "covered": 463, "total": 1843, "skipped": 0, "pct": 25.12 }, "statements": { "covered": 2300, "total": 8246, "skipped": 0, "pct": 27.89 }, "branches": { "covered": 771, "total": 5335, "skipped": 0, "pct": 14.45 }, "lines": { "covered": 2163, "total": 7886, "skipped": 0, "pct": 27.42 }, "newlines": { "covered": 0, "total": 0, "skipped": 0, "pct": 100 }, "changebranches": { "covered": 0, "total": 0, "skipped": 0, "pct": 100 }, "changefunctions": { "covered": 0, "total": 0, "skipped": 0, "pct": 100 } }, "caseList": [] }, { "mode": "manual", "summary": { "functions": { "covered": 463, "total": 1843, "skipped": 0, "pct": 25.12 }, "statements": { "covered": 2300, "total": 8246, "skipped": 0, "pct": 27.89 }, "branches": { "covered": 771, "total": 5335, "skipped": 0, "pct": 14.45 }, "lines": { "covered": 2163, "total": 7886, "skipped": 0, "pct": 27.42 }, "newlines": { "covered": 0, "total": 0, "skipped": 0, "pct": 100 }, "changebranches": { "covered": 0, "total": 0, "skipped": 0, "pct": 100 }, "changefunctions": { "covered": 0, "total": 0, "skipped": 0, "pct": 100 } }, "caseList": [ { "summary": { "functions": { "covered": 463, "total": 1830, "skipped": 0, "pct": 25.3 }, "statements": { "covered": 2300, "total": 8197, "skipped": 0, "pct": 28.05 }, "branches": { "covered": 771, "total": 5306, "skipped": 0, "pct": 14.53 }, "lines": { "covered": 2163, "total": 7837, "skipped": 0, "pct": 27.59 }, "newlines": { "covered": 0, "total": 0, "skipped": 0, "pct": 100 }, "changebranches": { "covered": 0, "total": 0, "skipped": 0, "pct": 100 }, "changefunctions": { "covered": 0, "total": 0, "skipped": 0, "pct": 100 } }, "reportProvider": "person", "reportID": "29235962" }, { "summary": { "functions": { "covered": 0, "total": 1843, "skipped": 0, "pct": 0 }, "statements": { "covered": 0, "total": 8246, "skipped": 0, "pct": 0 }, "branches": { "covered": 0, "total": 5335, "skipped": 0, "pct": 0 }, "lines": { "covered": 0, "total": 7886, "skipped": 0, "pct": 0 }, "newlines": { "covered": 0, "total": 0, "skipped": 0, "pct": 100 }, "changebranches": { "covered": 0, "total": 0, "skipped": 0, "pct": 100 }, "changefunctions": { "covered": 0, "total": 0, "skipped": 0, "pct": 100 } }, "reportProvider": "person", "reportID": "4217b519" } ] } ] } ] }

响应示例(Pull 概览)

{ "resultList": [ { "summary": { "functions": { "covered": 463, "total": 1843, "skipped": 0, "pct": 25.12 }, "statements": { "covered": 2300, "total": 8246, "skipped": 0, "pct": 27.89 }, "branches": { "covered": 771, "total": 5335, "skipped": 0, "pct": 14.45 }, "lines": { "covered": 2163, "total": 7886, "skipped": 0, "pct": 27.42 }, "newlines": { "covered": 11, "total": 11, "skipped": 0, "pct": 100 }, "changebranches": { "covered": 1, "total": 2, "skipped": 0, "pct": 50 }, "changefunctions": { "covered": 1, "total": 1, "skipped": 0, "pct": 100 } } } ] }

Notes

  • Commit Overview: Aggregated by “build” unit, further subdivided by report provider under the same build; some report providers will automatically aggregate test case data;
  • Pull Overview: Returns overall summary based on MR coverage aggregation;
  • All overview summaries are derived from underlying coverage map summary aggregation.

Report Page URL

  • Purpose: Directly enter the frontend report page (optionally carry query parameters to specify build/report source).

Route Template

/report/-/:provider/:org/:repo/:subject/:subjectID/-/

Route Placeholders

  • :provider: gitlab | github | ... (for page routing)
  • :org: Organization or namespace, e.g., canyon-project
  • :repo: Repository name, e.g., canyon-demo
  • :subject: commit | commits | pull | pulls | multiple-commits
  • :subjectID:
    • When subject is commit/commits: commit sha
    • When subject is pull/pulls: pullNumber
    • When subject is multiple-commits: commit range a...b, where b is used as baseline

Example (multiple-commits)

/report/-/gitlab/canyon-project/canyon-demo/multiple-commits/494989b4c2c9fcdba44e9e6412080e876f9c73e7...3056488dc00be874d9c99d1e1748e6c3211ece3a/-/

Optional Query Parameters (for backend data selection)

  • provider: Code hosting provider used by backend (default gitlab).
  • build_provider: Build/CI provider (e.g., gitlab_runner, jenkins).
  • build_id: Build ID.
  • report_provider: Report source (such as mpaas, flytest, person).
  • report_id: Report ID.

Example:

/report/-/gitlab/canyon-project/canyon-demo/multiple-commits/494989b4...3056488.../-/?provider=gitlab&build_provider=gitlab_runner&build_id=123&report_provider=mpaas&report_id=case-001

Direct File Access

  • After the trailing /-/, you can append file relative path to directly access a file, for example:
/report/-/:provider/:org/:repo/:subject/:subjectID/-/src/app/foo.ts