需求
项目¶
PetClinic 接口自动化测试的侧重点在于验证后端 RESTful API 的业务逻辑正确性、数据交互稳定性及接口契约一致性。测试主要围绕 宠物主人、宠物、兽医、就诊记录 等核心模块的接口展开,重点检查 请求参数校验、响应数据结构、状态码返回、业务流程联动 以及 数据库更新结果 的准确性。通过自动化测试框架(如 pytest + requests),实现接口的快速回归、批量执行与持续集成(CI/CD)联动,确保在频繁迭代中系统功能不被破坏。同时,应设计覆盖 正向与异常场景 的用例,验证系统在输入不合法、权限不足或数据缺失情况下的稳健性。整体目标是通过高效、可复用的接口自动化测试,构建稳定的回归验证体系,保障 PetClinic 后端服务的功能一致性与接口可靠性。
需求¶
本文档有以下作用:
- 开发人员开发依据
- 设计人员输入源
- 产品经理跟进产品执行实现程度的依据
- 测试人员编写接口自动化测试用例的输入源
- 外部人员产品理解或执行的依据
产品简述¶
产品描述¶
Petclinic 是一个宠物医院系统。系统中可以完成宠物主人信息、宠物信息、宠物主人与宠物的对应关系管理以及宠物医生对应的信息管理。
产品功能¶
对于宠物医院系统来说,只有商家端产品。商家端完成关于宠物主人、宠物和宠物医生的所有管理。
对于宠物主人,可以添加,修改,查询宠物主人信息,还可以为宠物主人添加宠物。对于宠物医生可以进行添加、查询、修改、删除的操作。
也可以添加宠物的类型和宠物医生的特长信息。
专有名词解释¶
| 专有名词 | 描述 |
|---|---|
| Owners | 宠物主人 |
| Last name | 英文姓名中的姓氏 |
| Find Owner | 查询宠物主人信息 |
| REST API | 表述性状态转移应用程序接口 |
| JSON | JavaScript对象表示法 |
产品总体架构¶
下图为 PetClinic 系统架构图
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 前端界面 │ │ REST API │ │ 数据库 │
│ (Web UI) │◄──►│ (Spring Boot) │◄──►│ (H2/MySQL) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
宠物主人信息搜索接口功能¶
接口概述¶
宠物主人搜索功能通过REST API提供,支持通过Last Name进行模糊搜索,返回匹配的宠物主人信息。
接口列表¶
| 接口名称 | 请求方法 | 接口路径 | 功能描述 |
|---|---|---|---|
| 搜索宠物主人 | GET | /owners | 根据Last Name搜索宠物主人信息 |
| 获取宠物主人详情 | GET | /owners/{id} | 获取指定ID的宠物主人详细信息 |
| 创建宠物主人 | POST | /owners | 创建新的宠物主人信息 |
| 更新宠物主人 | PUT | /owners/{id} | 更新指定ID的宠物主人信息 |
| 删除宠物主人 | DELETE | /owners/{id} | 删除指定ID的宠物主人信息 |
接口详细说明¶
1. 搜索宠物主人接口¶
接口地址: GET /owners
请求参数:
| 参数名 | 类型 | 必填 | 描述 | 示例 |
|---|---|---|---|---|
| lastName | String | 否 | 宠物主人的姓氏,支持模糊匹配 | "Davis" |
请求示例:
GET /owners?lastName=Davis HTTP/1.1
Host: localhost:8080
Content-Type: application/json
响应参数:
| 参数名 | 类型 | 描述 |
|---|---|---|
| id | Integer | 宠物主人ID |
| firstName | String | 宠物主人名字 |
| lastName | String | 宠物主人姓氏 |
| address | String | 地址 |
| city | String | 城市 |
| telephone | String | 电话 |
| pets | Array | 宠物列表 |
响应示例:
[
{
"id": 1,
"firstName": "George",
"lastName": "Davis",
"address": "110 W. Liberty St.",
"city": "Madison",
"telephone": "6085551023",
"pets": []
},
{
"id": 2,
"firstName": "Betty",
"lastName": "Davis",
"address": "638 Cardinal Ave.",
"city": "Sun Prairie",
"telephone": "6085551749",
"pets": []
}
]
状态码说明:
| 状态码 | 描述 |
|---|---|
| 200 | 请求成功 |
| 400 | 请求参数错误 |
| 404 | 未找到匹配的宠物主人 |
| 500 | 服务器内部错误 |
2. 获取宠物主人详情接口¶
接口地址: GET /owners/{id}
路径参数:
| 参数名 | 类型 | 必填 | 描述 |
|---|---|---|---|
| id | Integer | 是 | 宠物主人ID |
请求示例:
GET /owners/1 HTTP/1.1
Host: localhost:8080
Content-Type: application/json
响应示例:
{
"id": 1,
"firstName": "George",
"lastName": "Davis",
"address": "110 W. Liberty St.",
"city": "Madison",
"telephone": "6085551023",
"pets": [
{
"id": 1,
"name": "Leo",
"birthDate": "2010-09-07",
"type": {
"id": 1,
"name": "cat"
}
}
]
}
3. 创建宠物主人接口¶
接口地址: POST /owners
请求体:
| 参数名 | 类型 | 必填 | 描述 |
|---|---|---|---|
| firstName | String | 是 | 宠物主人名字 |
| lastName | String | 是 | 宠物主人姓氏 |
| address | String | 是 | 地址 |
| city | String | 是 | 城市 |
| telephone | String | 是 | 电话 |
请求示例:
POST /owners HTTP/1.1
Host: localhost:8080
Content-Type: application/json
{
"firstName": "John",
"lastName": "Smith",
"address": "123 Main St.",
"city": "New York",
"telephone": "5551234567"
}
响应示例:
{
"id": 15,
"firstName": "John",
"lastName": "Smith",
"address": "123 Main St.",
"city": "New York",
"telephone": "5551234567",
"pets": []
}
4. 更新宠物主人接口¶
接口地址: PUT /owners/{id}
路径参数:
| 参数名 | 类型 | 必填 | 描述 |
|---|---|---|---|
| id | Integer | 是 | 宠物主人ID |
请求体:
| 参数名 | 类型 | 必填 | 描述 |
|---|---|---|---|
| firstName | String | 是 | 宠物主人名字 |
| lastName | String | 是 | 宠物主人姓氏 |
| address | String | 是 | 地址 |
| city | String | 是 | 城市 |
| telephone | String | 是 | 电话 |
请求示例:
PUT /owners/1 HTTP/1.1
Host: localhost:8080
Content-Type: application/json
{
"firstName": "George",
"lastName": "Davis",
"address": "110 W. Liberty St.",
"city": "Madison",
"telephone": "6085551023"
}
响应示例:
{
"id": 1,
"firstName": "George",
"lastName": "Davis",
"address": "110 W. Liberty St.",
"city": "Madison",
"telephone": "6085551023",
"pets": []
}
5. 删除宠物主人接口¶
接口地址: DELETE /owners/{id}
路径参数:
| 参数名 | 类型 | 必填 | 描述 |
|---|---|---|---|
| id | Integer | 是 | 宠物主人ID |
请求示例:
DELETE /owners/1 HTTP/1.1
Host: localhost:8080
Content-Type: application/json
响应示例:
{
"message": "Owner deleted successfully"
}
接口性能需求¶
- 接口响应时间不超过2秒
- 支持100个并发用户同时访问
- 接口可用性达到99.9%
接口安全需求¶
- 所有接口需要支持HTTPS协议
- 敏感信息传输需要加密
- 需要实现接口访问频率限制
- 需要实现接口访问权限控制
接口兼容性需求¶
- 支持HTTP/1.1和HTTP/2协议
- 支持JSON格式的数据交换
- 支持跨域请求(CORS)