datai/datai-scenes/datai-scene-salesforce/docs/api-docs/2026-02-03-002-04-api.md

402 lines
12 KiB
Markdown
Raw Permalink Normal View History

2026-02-03 16:51:09 +08:00
# 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 | 总记录数 |
**成功示例**
```json
{
"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
}
```
**失败示例**
```json
{
"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 |
**成功示例**
```json
{
"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"
}
}
```
**失败示例**
```json
{
"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 |
**成功示例**
```json
{
"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"
}
}
```
**失败示例**
```json
{
"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 |
**成功示例**
```json
{
"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
}
}
}
```
**失败示例**
```json
{
"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查询所有代码覆盖率
```bash
curl -X GET "http://localhost:8080/api/apex/coverage?pageNum=1&pageSize=10" \
-H "Authorization: Bearer {token}"
```
### 示例 2查询指定测试结果的代码覆盖率
```bash
curl -X GET "http://localhost:8080/api/apex/coverage?testResultId=100&pageNum=1&pageSize=10" \
-H "Authorization: Bearer {token}"
```
### 示例 3查询覆盖率在 70% 到 90% 之间的代码
```bash
curl -X GET "http://localhost:8080/api/apex/coverage?minCoverage=70&maxCoverage=90&pageNum=1&pageSize=10" \
-H "Authorization: Bearer {token}"
```
### 示例 4查询代码覆盖率详情
```bash
curl -X GET "http://localhost:8080/api/apex/coverage/1" \
-H "Authorization: Bearer {token}"
```
### 示例 5查询总体代码覆盖率
```bash
curl -X GET "http://localhost:8080/api/apex/coverage/total?testResultId=100" \
-H "Authorization: Bearer {token}"
```
### 示例 6按类型统计代码覆盖率
```bash
curl -X GET "http://localhost:8080/api/apex/coverage/summary?testResultId=100" \
-H "Authorization: Bearer {token}"
```
## 注意事项
1. **数据依赖**代码覆盖率数据由测试执行功能002-03生成本 API 只提供查询和统计功能。
2. **权限控制**:所有接口需要 `apex:coverage:query` 权限。
3. **覆盖率范围筛选**由于覆盖率是计算字段范围筛选minCoverage、maxCoverage在内存中进行对于大数据量可能影响性能。
4. **数据一致性**:本功能复用 002-03 的 `datai_apex_code_coverage` 表,数据格式和字段含义与 002-03 保持一致。
5. **分页查询**:使用 PageHelper 进行物理分页,默认每页 10 条记录。
6. **排序**支持按创建时间createTime和覆盖率coveragePercent排序。
## 相关文档
- [需求文档](../requirements/sub/2026-01-28-002-04-代码覆盖率.md)
- [设计文档](../design/2026-02-03-002-04-代码覆盖率-设计.md)
- [决策记录](../decisions/2026-02-03-002-04-ADR-代码覆盖率技术选型.md)
- [变更日志](../changelog/2026-02-03-002-04-changelog.md)
- [复盘文档](../retros/2026-02-03-002-04-retro.md)