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’spullNumber; when it’s multiple-commits, it’s commit rangea...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,subjectIDis in the forma...b, usingbas baseline for range aggregation; percentis calculated as percentage ofcovered/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
- mode:
响应示例(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, wherebis used as baseline
- When subject is commit/commits: commit
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 (defaultgitlab).build_provider: Build/CI provider (e.g.,gitlab_runner,jenkins).build_id: Build ID.report_provider: Report source (such asmpaas,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-001Direct 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