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

402 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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)