12 KiB
API 文档 - 代码覆盖率功能
元数据
- 需求编号:002-04
- 需求名称:代码覆盖率
- 创建时间:2026-02-03
- 创建人:AI Assistant
- 版本号:v1.0.0
- 状态:已完成
API 概述
代码覆盖率 API 提供 Salesforce Apex 代码覆盖率的查询和统计功能。通过本 API,可以查询代码覆盖率列表、查看代码覆盖率详情、统计总体代码覆盖率、按类型统计代码覆盖率等。本 API 复用 002-03 测试执行功能的数据库表,通过独立的 Service 层提供代码覆盖率相关的查询和统计能力。
接口列表
接口 1:查询代码覆盖率列表
功能描述:查询代码覆盖率列表,支持多条件筛选、分页查询、覆盖率范围筛选。
请求方式:GET
请求路径:/api/apex/coverage
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| testResultId | Long | 否 | 测试结果 ID,筛选指定测试结果的代码覆盖率 |
| name | String | 否 | 类/触发器名称,支持模糊查询 |
| namespace | String | 否 | 命名空间,支持模糊查询 |
| type | String | 否 | 类型,可选值:Class、Trigger |
| minCoverage | Double | 否 | 最小覆盖率(0-100),在内存中筛选 |
| maxCoverage | Double | 否 | 最大覆盖率(0-100),在内存中筛选 |
| pageNum | Integer | 否 | 页码,默认 1 |
| pageSize | Integer | 否 | 每页大小,默认 10 |
| orderByColumn | String | 否 | 排序字段,可选值:createTime、coveragePercent |
| isAsc | String | 否 | 是否升序,可选值:asc、desc,默认 desc |
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | Integer | 状态码(200 成功,其他失败) |
| msg | String | 提示信息 |
| rows | Array | 代码覆盖率列表 |
| rows[].id | Long | 覆盖率记录 ID |
| rows[].testResultId | Long | 测试结果 ID |
| rows[].name | String | 类/触发器名称 |
| rows[].type | String | 类型(Class/Trigger) |
| rows[].namespace | String | 命名空间 |
| rows[].numLocations | Integer | 总位置数 |
| rows[].numLocationsNotCovered | Integer | 未覆盖的位置数 |
| rows[].coveragePercent | Double | 覆盖率百分比(0-100) |
| rows[].createTime | String | 创建时间(yyyy-MM-dd HH:mm:ss) |
| total | Long | 总记录数 |
成功示例:
{
"code": 200,
"msg": "查询成功",
"rows": [
{
"id": 1,
"testResultId": 100,
"name": "AccountTrigger",
"type": "Trigger",
"namespace": "",
"numLocations": 50,
"numLocationsNotCovered": 10,
"coveragePercent": 80.00,
"createTime": "2026-02-03 10:30:00"
},
{
"id": 2,
"testResultId": 100,
"name": "AccountService",
"type": "Class",
"namespace": "",
"numLocations": 100,
"numLocationsNotCovered": 20,
"coveragePercent": 80.00,
"createTime": "2026-02-03 10:30:00"
}
],
"total": 2
}
失败示例:
{
"code": 500,
"msg": "查询代码覆盖率列表失败:数据库访问异常"
}
权限要求:apex:coverage:query
接口 2:查询代码覆盖率详情
功能描述:根据 ID 查询单条代码覆盖率记录的详细信息。
请求方式:GET
请求路径:/api/apex/coverage/{id}
路径参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | Long | 是 | 覆盖率记录 ID |
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | Integer | 状态码(200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 代码覆盖率详情 |
| data.id | Long | 覆盖率记录 ID |
| data.testResultId | Long | 测试结果 ID |
| data.name | String | 类/触发器名称 |
| data.type | String | 类型(Class/Trigger) |
| data.namespace | String | 命名空间 |
| data.numLocations | Integer | 总位置数 |
| data.numLocationsNotCovered | Integer | 未覆盖的位置数 |
| data.coveragePercent | Double | 覆盖率百分比(0-100) |
| data.createTime | String | 创建时间(yyyy-MM-dd HH:mm:ss) |
成功示例:
{
"code": 200,
"msg": "查询成功",
"data": {
"id": 1,
"testResultId": 100,
"name": "AccountTrigger",
"type": "Trigger",
"namespace": "",
"numLocations": 50,
"numLocationsNotCovered": 10,
"coveragePercent": 80.00,
"createTime": "2026-02-03 10:30:00"
}
}
失败示例:
{
"code": 404,
"msg": "代码覆盖率记录不存在"
}
权限要求:apex:coverage:query
接口 3:查询总体代码覆盖率
功能描述:查询总体代码覆盖率统计,包括总体覆盖率、类覆盖率、触发器覆盖率、总类数、总触发器数等。
请求方式:GET
请求路径:/api/apex/coverage/total
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| testResultId | Long | 否 | 测试结果 ID,统计指定测试结果的代码覆盖率;不传则统计所有数据 |
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | Integer | 状态码(200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 总体覆盖率统计 |
| data.testResultId | Long | 测试结果 ID |
| data.totalCoverage | Double | 总体覆盖率(0-100) |
| data.totalClasses | Integer | 总类数 |
| data.totalTriggers | Integer | 总触发器数 |
| data.totalLocations | Integer | 总位置数 |
| data.totalNotCovered | Integer | 未覆盖位置数 |
| data.coveredLocations | Integer | 已覆盖位置数 |
| data.classCoverage | Double | 类覆盖率(0-100) |
| data.triggerCoverage | Double | 触发器覆盖率(0-100) |
| data.testTime | String | 测试时间(yyyy-MM-dd HH:mm:ss) |
成功示例:
{
"code": 200,
"msg": "查询成功",
"data": {
"testResultId": 100,
"totalCoverage": 82.50,
"totalClasses": 10,
"totalTriggers": 5,
"totalLocations": 800,
"totalNotCovered": 140,
"coveredLocations": 660,
"classCoverage": 85.00,
"triggerCoverage": 78.00,
"testTime": "2026-02-03 10:30:00"
}
}
失败示例:
{
"code": 500,
"msg": "查询总体代码覆盖率失败:数据库访问异常"
}
权限要求:apex:coverage:query
接口 4:按类型统计代码覆盖率
功能描述:按 Class/Trigger 类型分别统计代码覆盖率,返回每种类型的覆盖率、总位置数、未覆盖位置数等。
请求方式:GET
请求路径:/api/apex/coverage/summary
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| testResultId | Long | 否 | 测试结果 ID,统计指定测试结果的代码覆盖率;不传则统计所有数据 |
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | Integer | 状态码(200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 按类型统计结果 |
| data.testResultId | Long | 测试结果 ID |
| data.classSummary | Object | 类统计信息 |
| data.classSummary.type | String | 类型(Class) |
| data.classSummary.count | Integer | 类数量 |
| data.classSummary.totalLocations | Integer | 总位置数 |
| data.classSummary.notCovered | Integer | 未覆盖位置数 |
| data.classSummary.coveragePercent | Double | 覆盖率(0-100) |
| data.triggerSummary | Object | 触发器统计信息 |
| data.triggerSummary.type | String | 类型(Trigger) |
| data.triggerSummary.count | Integer | 触发器数量 |
| data.triggerSummary.totalLocations | Integer | 总位置数 |
| data.triggerSummary.notCovered | Integer | 未覆盖位置数 |
| data.triggerSummary.coveragePercent | Double | 覆盖率(0-100) |
成功示例:
{
"code": 200,
"msg": "查询成功",
"data": {
"testResultId": 100,
"classSummary": {
"type": "Class",
"count": 10,
"totalLocations": 600,
"notCovered": 90,
"coveragePercent": 85.00
},
"triggerSummary": {
"type": "Trigger",
"count": 5,
"totalLocations": 200,
"notCovered": 50,
"coveragePercent": 75.00
}
}
}
失败示例:
{
"code": 500,
"msg": "按类型统计代码覆盖率失败:数据库访问异常"
}
权限要求:apex:coverage:query
错误码
| 错误码 | 说明 | 解决方案 |
|---|---|---|
| 200 | 成功 | - |
| 401 | 未授权 | 检查用户是否已登录 |
| 403 | 禁止访问 | 检查用户是否具有 apex:coverage:query 权限 |
| 404 | 资源不存在 | 检查请求的资源 ID 是否正确 |
| 500 | 服务器内部错误 | 查看服务器日志,联系管理员 |
| 1001 | 参数错误 | 检查请求参数是否符合要求 |
| 1002 | 无效的测试结果 ID | 检查测试结果 ID 是否正确 |
| 1003 | 无效的覆盖率 ID | 检查覆盖率 ID 是否正确 |
| 1004 | 无效的覆盖率类型 | 覆盖率类型必须是 "Class" 或 "Trigger" |
| 1005 | 无效的覆盖率值 | 覆盖率值必须在 0 到 100 之间 |
| 1006 | 查询失败 | 数据库查询失败,请联系管理员 |
| 1007 | 数据访问失败 | 数据库访问失败,请联系管理员 |
覆盖率计算说明
单个类/触发器覆盖率
coveragePercent = (1 - numLocationsNotCovered / numLocations) * 100
总体覆盖率
totalCoverage = (1 - totalNotCovered / totalLocations) * 100
类覆盖率
classCoverage = (1 - classNotCovered / classTotalLocations) * 100
触发器覆盖率
triggerCoverage = (1 - triggerNotCovered / triggerTotalLocations) * 100
计算规则
- 保留两位小数(四舍五入)
- 除零保护:当总位置数为 0 时,返回 0.0
使用示例
示例 1:查询所有代码覆盖率
curl -X GET "http://localhost:8080/api/apex/coverage?pageNum=1&pageSize=10" \
-H "Authorization: Bearer {token}"
示例 2:查询指定测试结果的代码覆盖率
curl -X GET "http://localhost:8080/api/apex/coverage?testResultId=100&pageNum=1&pageSize=10" \
-H "Authorization: Bearer {token}"
示例 3:查询覆盖率在 70% 到 90% 之间的代码
curl -X GET "http://localhost:8080/api/apex/coverage?minCoverage=70&maxCoverage=90&pageNum=1&pageSize=10" \
-H "Authorization: Bearer {token}"
示例 4:查询代码覆盖率详情
curl -X GET "http://localhost:8080/api/apex/coverage/1" \
-H "Authorization: Bearer {token}"
示例 5:查询总体代码覆盖率
curl -X GET "http://localhost:8080/api/apex/coverage/total?testResultId=100" \
-H "Authorization: Bearer {token}"
示例 6:按类型统计代码覆盖率
curl -X GET "http://localhost:8080/api/apex/coverage/summary?testResultId=100" \
-H "Authorization: Bearer {token}"
注意事项
-
数据依赖:代码覆盖率数据由测试执行功能(002-03)生成,本 API 只提供查询和统计功能。
-
权限控制:所有接口需要
apex:coverage:query权限。 -
覆盖率范围筛选:由于覆盖率是计算字段,范围筛选(minCoverage、maxCoverage)在内存中进行,对于大数据量可能影响性能。
-
数据一致性:本功能复用 002-03 的
datai_apex_code_coverage表,数据格式和字段含义与 002-03 保持一致。 -
分页查询:使用 PageHelper 进行物理分页,默认每页 10 条记录。
-
排序:支持按创建时间(createTime)和覆盖率(coveragePercent)排序。