# API 文档 - 代码覆盖率功能 ## 元数据 - 需求编号:002-04 - 需求名称:代码覆盖率 - 创建时间:2026-02-05 - 创建人:AI Assistant - 版本:v2.0.0 - 状态:已完成 ## API 概述 代码覆盖率功能 API 提供了 Salesforce Apex 代码覆盖率的查询、统计和分析能力。通过这组 API,用户可以: - 分页查询代码覆盖率列表,支持多条件筛选 - 查询单个代码覆盖率记录的详细信息 - 获取指定测试结果的总体代码覆盖率统计 - 按类型(Class/Trigger)统计代码覆盖率 所有 API 均遵循 RESTful 设计规范,返回统一的结果格式(ResultVo),支持权限控制(独立权限标识 `apex:coverage:query`)。 ## 接口列表 ### 接口 1:查询代码覆盖率列表 #### 功能描述 分页查询代码覆盖率列表,支持按测试结果 ID、类/触发器名称、类型、命名空间、覆盖率范围等多条件筛选。 #### 请求方式 POST #### 请求路径 `/api/salesforce/apex/coverage/list` #### 权限标识 `apex:coverage:query` #### 请求参数 | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | testResultId | Long | 是 | 测试结果 ID,关联 datai_apex_test_result 表 | | name | String | 否 | 类/触发器名称,支持模糊查询,长度 1-255 字符 | | type | String | 否 | 类型,可选值:Class、Trigger | | namespace | String | 否 | 命名空间,支持模糊查询,长度 1-255 字符 | | minCoverage | Double | 否 | 最小覆盖率(0.0-100.0) | | maxCoverage | Double | 否 | 最大覆盖率(0.0-100.0) | | pageNum | Integer | 否 | 页码,默认 1,最小 1 | | pageSize | Integer | 否 | 每页大小,默认 10,范围 1-100 | #### 响应参数 | 参数名 | 类型 | 说明 | |--------|------|------| | code | Integer | 状态码(200 成功,其他失败) | | msg | String | 提示信息 | | data | Object | 分页结果数据 | | data.total | Long | 总记录数 | | data.rows | Array | 代码覆盖率记录列表 | | data.rows[].id | Long | 记录 ID | | data.rows[].testResultId | Long | 测试结果 ID | | data.rows[].name | String | 类/触发器名称 | | data.rows[].type | String | 类型(Class/Trigger) | | data.rows[].namespace | String | 命名空间 | | data.rows[].numLocations | Integer | 总代码行数 | | data.rows[].numLocationsNotCovered | Integer | 未覆盖代码行数 | | data.rows[].coveragePercent | Double | 覆盖率百分比(0.00-100.00) | #### 成功示例 ```json { "code": 200, "msg": "操作成功", "data": { "total": 15, "rows": [ { "id": 1, "testResultId": 100, "name": "AccountController", "type": "Class", "namespace": "MyNamespace", "numLocations": 100, "numLocationsNotCovered": 20, "coveragePercent": 80.00 }, { "id": 2, "testResultId": 100, "name": "ContactTrigger", "type": "Trigger", "namespace": "MyNamespace", "numLocations": 50, "numLocationsNotCovered": 5, "coveragePercent": 90.00 } ] } } ``` #### 失败示例 ```json { "code": 500, "msg": "testResultId 不能为空" } ``` #### 错误码 - 200:操作成功 - 500:服务器内部错误(testResultId 不能为空、参数验证失败等) --- ### 接口 2:查询代码覆盖率详情 #### 功能描述 根据 ID 查询单个代码覆盖率记录的详细信息。 #### 请求方式 GET #### 请求路径 `/api/salesforce/apex/coverage/{id}` #### 权限标识 `apex:coverage:query` #### 请求参数 | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | id | Long | 是 | 代码覆盖率记录 ID,路径参数,最小 1 | #### 响应参数 | 参数名 | 类型 | 说明 | |--------|------|------| | 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.00-100.00) | #### 成功示例 ```json { "code": 200, "msg": "操作成功", "data": { "id": 1, "testResultId": 100, "name": "AccountController", "type": "Class", "namespace": "MyNamespace", "numLocations": 100, "numLocationsNotCovered": 20, "coveragePercent": 80.00 } } ``` #### 失败示例 ```json { "code": 500, "msg": "代码覆盖率记录不存在" } ``` #### 错误码 - 200:操作成功 - 500:服务器内部错误(代码覆盖率记录不存在、参数验证失败等) --- ### 接口 3:查询总体代码覆盖率统计 #### 功能描述 统计指定测试结果的总体代码覆盖率,包括加权平均覆盖率、总代码行数、未覆盖代码行数、已覆盖代码行数。 #### 请求方式 POST #### 请求路径 `/api/salesforce/apex/coverage/summary` #### 权限标识 `apex:coverage:query` #### 请求参数 | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | testResultId | Long | 是 | 测试结果 ID,关联 datai_apex_test_result 表 | #### 响应参数 | 参数名 | 类型 | 说明 | |--------|------|------| | code | Integer | 状态码(200 成功,其他失败) | | msg | String | 提示信息 | | data | Object | 覆盖率统计数据 | | data.testResultId | Long | 测试结果 ID | | data.totalClasses | Integer | 总类/触发器数量 | | data.totalLines | Integer | 总代码行数 | | data.coveredLines | Integer | 已覆盖代码行数 | | data.uncoveredLines | Integer | 未覆盖代码行数 | | data.averageCoverage | Double | 加权平均覆盖率百分比(0.00-100.00) | #### 成功示例 ```json { "code": 200, "msg": "操作成功", "data": { "testResultId": 100, "totalClasses": 15, "totalLines": 1500, "coveredLines": 1200, "uncoveredLines": 300, "averageCoverage": 80.00 } } ``` #### 失败示例 ```json { "code": 500, "msg": "testResultId 不能为空" } ``` #### 错误码 - 200:操作成功 - 500:服务器内部错误(testResultId 不能为空、参数验证失败等) --- ### 接口 4:按类型统计代码覆盖率 #### 功能描述 按类型(Class/Trigger)统计代码覆盖率,返回每种类型的覆盖率统计信息。 #### 请求方式 POST #### 请求路径 `/api/salesforce/apex/coverage/summary-by-type` #### 权限标识 `apex:coverage:query` #### 请求参数 | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | testResultId | Long | 是 | 测试结果 ID,关联 datai_apex_test_result 表 | #### 响应参数 | 参数名 | 类型 | 说明 | |--------|------|------| | code | Integer | 状态码(200 成功,其他失败) | | msg | String | 提示信息 | | data | Object | 按类型统计的覆盖率数据 | | data.testResultId | Long | 测试结果 ID | | data.typeSummaries | Array | 类型统计列表 | | data.typeSummaries[].type | String | 类型(Class/Trigger) | | data.typeSummaries[].totalClasses | Integer | 该类型的类/触发器数量 | | data.typeSummaries[].totalLines | Integer | 该类型的总代码行数 | | data.typeSummaries[].coveredLines | Integer | 该类型的已覆盖代码行数 | | data.typeSummaries[].uncoveredLines | Integer | 该类型的未覆盖代码行数 | | data.typeSummaries[].averageCoverage | Double | 该类型的加权平均覆盖率百分比(0.00-100.00) | #### 成功示例 ```json { "code": 200, "msg": "操作成功", "data": { "testResultId": 100, "typeSummaries": [ { "type": "Class", "totalClasses": 10, "totalLines": 1000, "coveredLines": 850, "uncoveredLines": 150, "averageCoverage": 85.00 }, { "type": "Trigger", "totalClasses": 5, "totalLines": 500, "coveredLines": 350, "uncoveredLines": 150, "averageCoverage": 70.00 } ] } } ``` #### 失败示例 ```json { "code": 500, "msg": "testResultId 不能为空" } ``` #### 错误码 - 200:操作成功 - 500:服务器内部错误(testResultId 不能为空、参数验证失败等) ## 错误码 ### 通用错误码 | 错误码 | 说明 | 处理建议 | |--------|------|----------| | 200 | 操作成功 | 无需处理 | | 401 | 未授权 | 检查用户是否登录,Token 是否有效 | | 403 | 权限不足 | 检查用户是否具有 `apex:coverage:query` 权限 | | 404 | 资源不存在 | 检查请求路径是否正确 | | 500 | 服务器内部错误 | 查看服务器日志,排查具体错误原因 | ### 业务错误码 | 错误码 | 说明 | 处理建议 | |--------|------|----------| | 500 | testResultId 不能为空 | 确保请求参数中包含 testResultId | | 500 | 代码覆盖率记录不存在 | 检查 id 参数是否正确,记录是否已删除 | | 500 | 参数验证失败 | 检查请求参数是否符合要求(如类型、范围等) | ## 数据模型 ### QueryCodeCoverageDto(查询代码覆盖率请求) | 字段名 | 类型 | 说明 | |--------|------|------| | testResultId | Long | 测试结果 ID | | name | String | 类/触发器名称 | | type | String | 类型(Class/Trigger) | | namespace | String | 命名空间 | | minCoverage | Double | 最小覆盖率 | | maxCoverage | Double | 最大覆盖率 | | pageNum | Integer | 页码 | | pageSize | Integer | 每页大小 | ### CodeCoverageResultVo(代码覆盖率结果) | 字段名 | 类型 | 说明 | |--------|------|------| | id | Long | 记录 ID | | testResultId | Long | 测试结果 ID | | name | String | 类/触发器名称 | | type | String | 类型(Class/Trigger) | | namespace | String | 命名空间 | | numLocations | Integer | 总代码行数 | | numLocationsNotCovered | Integer | 未覆盖代码行数 | | coveragePercent | Double | 覆盖率百分比 | ### CodeCoverageSummaryVo(代码覆盖率统计) | 字段名 | 类型 | 说明 | |--------|------|------| | testResultId | Long | 测试结果 ID | | totalClasses | Integer | 总类/触发器数量 | | totalLines | Integer | 总代码行数 | | coveredLines | Integer | 已覆盖代码行数 | | uncoveredLines | Integer | 未覆盖代码行数 | | averageCoverage | Double | 加权平均覆盖率 | ### CoverageTypeSummaryVo(按类型统计) | 字段名 | 类型 | 说明 | |--------|------|------| | type | String | 类型(Class/Trigger) | | totalClasses | Integer | 该类型的类/触发器数量 | | totalLines | Integer | 该类型的总代码行数 | | coveredLines | Integer | 该类型的已覆盖代码行数 | | uncoveredLines | Integer | 该类型的未覆盖代码行数 | | averageCoverage | Double | 该类型的加权平均覆盖率 | ## 相关文档 - [需求文档](../requirements/sub/2026-01-28-002-04-代码覆盖率.md) - [设计文档](../design/2026-02-03-002-04-代码覆盖率-设计.md) - [决策记录](../decisions/2026-02-03-002-04-ADR-代码覆盖率技术选型.md) - [提示词文档](../prompts/2026-02-05-002-04-prompt-代码覆盖率.md) - [会话记录](../sessions/2026-02-05-002-04-session.md) - [变更日志 v2.0.0](../changelog/2026-02-05-002-04-changelog-v2.md) - [复盘文档](../retros/2026-02-05-002-04-retro.md)