1158 lines
23 KiB
Markdown
1158 lines
23 KiB
Markdown
# 社交服务 HTTP 完整测试流程
|
||
|
||
## 目录
|
||
|
||
1. [环境准备](#环境准备)
|
||
2. [服务启动](#服务启动)
|
||
3. [用户准备](#用户准备)
|
||
4. [好友功能测试](#好友功能测试)
|
||
5. [异常场景测试](#异常场景测试)
|
||
6. [测试数据清理](#测试数据清理)
|
||
7. [常见问题](#常见问题)
|
||
|
||
---
|
||
|
||
## 环境准备
|
||
|
||
### 1. 数据库准备
|
||
|
||
确保 PostgreSQL 数据库已启动并创建了 `top-fans` 数据库:
|
||
|
||
```sql
|
||
CREATE DATABASE "top-fans" OWNER haihuizhu ENCODING 'UTF8';
|
||
```
|
||
|
||
### 2. 环境变量配置
|
||
|
||
```bash
|
||
# Gateway 配置
|
||
export SERVER_PORT=8080
|
||
export GIN_MODE=debug
|
||
export DUBBO_USER_SERVICE_URL="tri://127.0.0.1:20000"
|
||
export DUBBO_SOCIAL_SERVICE_URL="tri://127.0.0.1:20001"
|
||
export JWT_SECRET="topfans-secret-key-please-change-in-production"
|
||
```
|
||
|
||
### 3. 工具准备
|
||
|
||
推荐使用以下工具之一进行API测试:
|
||
- **Postman** (推荐)
|
||
- **curl** 命令行
|
||
- **HTTPie**
|
||
- **Insomnia**
|
||
|
||
---
|
||
|
||
## 服务启动
|
||
|
||
### 1. 启动 UserService
|
||
|
||
```bash
|
||
cd /Users/haihuizhu/infinite_matrix/top-fans/backend/services/userService
|
||
./start.sh
|
||
```
|
||
|
||
**预期输出:**
|
||
```
|
||
Starting User Service...
|
||
Dubbo-go service started successfully. Press Ctrl+C to exit.
|
||
```
|
||
|
||
**检查端口:**
|
||
```bash
|
||
lsof -i :20000
|
||
```
|
||
|
||
### 2. 启动 SocialService
|
||
|
||
```bash
|
||
cd /Users/haihuizhu/infinite_matrix/top-fans/backend/services/socialService
|
||
./start.sh
|
||
```
|
||
|
||
**预期输出:**
|
||
```
|
||
Starting Social Service...
|
||
Social service started successfully. Press Ctrl+C to exit.
|
||
```
|
||
|
||
**检查端口:**
|
||
```bash
|
||
lsof -i :20001
|
||
```
|
||
|
||
### 3. 启动 Gateway
|
||
|
||
```bash
|
||
cd /Users/haihuizhu/infinite_matrix/top-fans/backend/gateway
|
||
./start.sh
|
||
```
|
||
|
||
**预期输出:**
|
||
```
|
||
Starting Top-Fans Gateway...
|
||
Gateway server started successfully
|
||
```
|
||
|
||
**检查端口:**
|
||
```bash
|
||
lsof -i :8080
|
||
```
|
||
|
||
### 4. 健康检查
|
||
|
||
```bash
|
||
curl http://localhost:8080/health
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"status": "ok",
|
||
"service": "top-fans-gateway"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 用户准备
|
||
|
||
### 步骤 1: 注册用户 A(张三)
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/api/v1/auth/register \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"mobile": "13800000001",
|
||
"password": "password123",
|
||
"star_id": 1,
|
||
"nickname": "张三"
|
||
}'
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
||
"token_expires_at": 1736234567890,
|
||
"user": {
|
||
"id": 1,
|
||
"mobile": "13800000001",
|
||
"avatar_url": "",
|
||
"is_active": true
|
||
},
|
||
"fan_profile": {
|
||
"id": 1,
|
||
"user_id": 1,
|
||
"star_id": 1,
|
||
"nickname": "张三",
|
||
"level": 1,
|
||
"social": 0
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**保存变量:**
|
||
- `USER_A_ID`: 1
|
||
- `USER_A_TOKEN`: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
||
|
||
### 步骤 2: 注册用户 B(李四)
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/api/v1/auth/register \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"mobile": "13800000002",
|
||
"password": "password123",
|
||
"star_id": 1,
|
||
"nickname": "李四"
|
||
}'
|
||
```
|
||
|
||
**保存变量:**
|
||
- `USER_B_ID`: 2
|
||
- `USER_B_TOKEN`: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
||
|
||
### 步骤 3: 注册用户 C(王五)
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/api/v1/auth/register \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"mobile": "13800000003",
|
||
"password": "password123",
|
||
"star_id": 1,
|
||
"nickname": "王五"
|
||
}'
|
||
```
|
||
|
||
**保存变量:**
|
||
- `USER_C_ID`: 3
|
||
- `USER_C_TOKEN`: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
||
|
||
---
|
||
|
||
## 好友功能测试
|
||
|
||
### API 概览
|
||
|
||
| 序号 | 功能 | 方法 | 路径 | 说明 |
|
||
|------|------|------|------|------|
|
||
| 1 | 查找用户 | GET | `/api/v1/social/search-user` | 根据用户ID查找陌生人信息 |
|
||
| 2 | 获取随机用户 | GET | `/api/v1/social/random-users` | 获取同一明星下的随机用户(用于推荐加好友) |
|
||
| 3 | 发送好友请求 | POST | `/api/v1/social/friend-requests` | 向指定用户发送好友请求 |
|
||
| 4 | 获取好友请求列表 | GET | `/api/v1/social/friend-requests` | 获取收到或发出的好友请求 |
|
||
| 5 | 处理好友请求 | POST | `/api/v1/social/friend-requests/handle` | 接受或拒绝好友请求 |
|
||
| 6 | 获取好友列表 | GET | `/api/v1/social/friends` | 获取好友列表(支持分页和搜索) |
|
||
| 7 | 关键字搜索好友 | GET | `/api/v1/social/friends?keyword=xxx` | 在好友列表中模糊搜索 |
|
||
| 8 | 检查好友关系 | GET | `/api/v1/social/friendship/check` | 检查是否为好友关系 |
|
||
| 9 | 获取好友数量 | GET | `/api/v1/social/friends/count` | 获取当前用户的好友数量 |
|
||
| 10 | 设置好友备注 | PUT | `/api/v1/social/friends/remark` | 设置好友的备注名 |
|
||
| 11 | 删除好友 | DELETE | `/api/v1/social/friends` | 删除好友关系 |
|
||
|
||
---
|
||
|
||
### 测试场景 1: 发送好友请求
|
||
|
||
#### 1.1 张三向李四发送好友请求
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/api/v1/social/friend-requests \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}" \
|
||
-d '{
|
||
"friend_user_id": 2,
|
||
"message": "你好,我是张三,我们交个朋友吧!"
|
||
}'
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"request_id": 1,
|
||
"status": "pending",
|
||
"created_at": 1736234567890,
|
||
"expires_at": 1738826567890
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 1.2 查看发出的请求列表(张三)
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/friend-requests?type=sent&page=1&page_size=10" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"has_more": false,
|
||
"items": [
|
||
{
|
||
"created_at": 1767697774916,
|
||
"expires_at": 1770289774915,
|
||
"from_user_fan_level": 1,
|
||
"from_user_id": 106,
|
||
"from_user_nickname": "不爱战战",
|
||
"id": 31,
|
||
"message": "你好,我是张三,我们交个朋友吧!",
|
||
"star_id": 87,
|
||
"status": "pending",
|
||
"to_user_fan_level": 1,
|
||
"to_user_id": 2,
|
||
"to_user_nickname": "爱战战"
|
||
},
|
||
{
|
||
"created_at": 1767697552714,
|
||
"expires_at": 1770289552714,
|
||
"from_user_fan_level": 1,
|
||
"from_user_id": 106,
|
||
"from_user_nickname": "不爱战战",
|
||
"id": 30,
|
||
"message": "你好,我们交个朋友吧!",
|
||
"star_id": 87,
|
||
"status": "pending",
|
||
"to_user_fan_level": 1,
|
||
"to_user_id": 108,
|
||
"to_user_nickname": "张小明"
|
||
}
|
||
],
|
||
"page": 1,
|
||
"page_size": 10,
|
||
"total": 2
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 1.3 查看收到的请求列表(李四)
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/friend-requests?type=received&status=pending&page=1&page_size=10" \
|
||
-H "Authorization: Bearer ${USER_B_TOKEN}"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"items": [
|
||
{
|
||
"id": 1,
|
||
"from_user_id": 1,
|
||
"to_user_id": 2,
|
||
"star_id": 1,
|
||
"status": "pending",
|
||
"message": "你好,我是张三,我们交个朋友吧!",
|
||
"created_at": 1736234567890,
|
||
"expires_at": 1738826567890,
|
||
"from_user_nickname": "张三",
|
||
"from_user_avatar": "",
|
||
"from_user_fan_level": 1
|
||
}
|
||
],
|
||
"total": 1,
|
||
"page": 1,
|
||
"page_size": 10,
|
||
"has_more": false
|
||
}
|
||
}
|
||
```
|
||
|
||
### 测试场景 2: 接受好友请求
|
||
|
||
#### 2.1 李四接受张三的好友请求
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/api/v1/social/friend-requests/handle \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer ${USER_B_TOKEN}" \
|
||
-d '{
|
||
"request_id": 1,
|
||
"action": "accept"
|
||
}'
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"action": "accept",
|
||
"friendship_created": true,
|
||
"processed_at": 1736234600000
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 2.2 查看张三的好友列表
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/friends?page=1&page_size=20" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"items": [
|
||
{
|
||
"id": 1,
|
||
"user_id": 1,
|
||
"friend_id": 2,
|
||
"star_id": 1,
|
||
"created_at": 1736234600000,
|
||
"friend_nickname": "李四",
|
||
"friend_avatar": "",
|
||
"friend_fan_level": 1,
|
||
"friend_social": 1
|
||
}
|
||
],
|
||
"total": 1,
|
||
"page": 1,
|
||
"page_size": 20,
|
||
"has_more": false
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 2.3 查看李四的好友列表
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/friends?page=1&page_size=20" \
|
||
-H "Authorization: Bearer ${USER_B_TOKEN}"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"items": [
|
||
{
|
||
"id": 2,
|
||
"user_id": 2,
|
||
"friend_id": 1,
|
||
"star_id": 1,
|
||
"created_at": 1736234600000,
|
||
"friend_nickname": "张三",
|
||
"friend_avatar": "",
|
||
"friend_fan_level": 1,
|
||
"friend_social": 1
|
||
}
|
||
],
|
||
"total": 1,
|
||
"page": 1,
|
||
"page_size": 20,
|
||
"has_more": false
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 2.4 查看好友数量
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/friends/count" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"count": 1
|
||
}
|
||
}
|
||
```
|
||
|
||
### 测试场景 3: 检查好友关系
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/friendship/check?friend_user_id=2" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"is_friend": true
|
||
}
|
||
}
|
||
```
|
||
|
||
### 测试场景 4: 设置好友备注
|
||
|
||
```bash
|
||
curl -X PUT http://localhost:8080/api/v1/social/friends/remark \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}" \
|
||
-d '{
|
||
"friend_user_id": 2,
|
||
"remark": "小李"
|
||
}'
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"remark": "小李"
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 4.1 再次查看好友列表(确认备注)
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/friends?page=1&page_size=20" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"items": [
|
||
{
|
||
"id": 1,
|
||
"user_id": 1,
|
||
"friend_id": 2,
|
||
"star_id": 1,
|
||
"created_at": 1736234600000,
|
||
"remark": "小李",
|
||
"friend_nickname": "李四",
|
||
"friend_avatar": "",
|
||
"friend_fan_level": 1,
|
||
"friend_social": 1
|
||
}
|
||
],
|
||
"total": 1,
|
||
"page": 1,
|
||
"page_size": 20,
|
||
"has_more": false
|
||
}
|
||
}
|
||
```
|
||
|
||
### 测试场景 5: 根据用户ID查找陌生人(用于加好友)
|
||
|
||
**说明:** 在发送好友请求前,可以先查找目标用户的信息,查看是否可以添加为好友。
|
||
|
||
```bash
|
||
# 张三查找李四的信息(假设李四的 user_id 为 2)
|
||
curl -X GET "http://localhost:8080/api/v1/social/search-user?friend_user_id=2" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"user_id": 2,
|
||
"nickname": "李四",
|
||
"avatar": "https://example.com/avatar/2.jpg",
|
||
"fan_level": 1,
|
||
"relationship_status": "stranger",
|
||
"can_send_request": true
|
||
}
|
||
}
|
||
```
|
||
|
||
**relationship_status 说明:**
|
||
- `stranger`: 陌生人,可以发送好友请求
|
||
- `friend`: 已经是好友
|
||
- `pending_sent`: 我已发送请求,等待对方处理
|
||
- `pending_received`: 对方已发送请求给我,等待我处理
|
||
- `rejected`: 之前被拒绝,在冷静期内(会返回 `cooldown_ends_at` 字段)
|
||
|
||
### 测试场景 6: 关键字搜索好友
|
||
|
||
**说明:** 在自己的好友列表中进行模糊搜索(搜索昵称或备注名)。
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/friends?keyword=小李&page=1&page_size=20" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"items": [
|
||
{
|
||
"id": 1,
|
||
"user_id": 1,
|
||
"friend_id": 2,
|
||
"star_id": 1,
|
||
"created_at": 1736234600000,
|
||
"remark": "小李",
|
||
"friend_nickname": "李四",
|
||
"friend_avatar": "",
|
||
"friend_fan_level": 1,
|
||
"friend_social": 1
|
||
}
|
||
],
|
||
"total": 1,
|
||
"page": 1,
|
||
"page_size": 20,
|
||
"has_more": false
|
||
}
|
||
}
|
||
```
|
||
|
||
### 测试场景 7: 拒绝好友请求
|
||
|
||
#### 6.1 王五向李四发送好友请求
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/api/v1/social/friend-requests \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer ${USER_C_TOKEN}" \
|
||
-d '{
|
||
"friend_user_id": 2,
|
||
"message": "李四你好!"
|
||
}'
|
||
```
|
||
|
||
#### 6.2 李四拒绝王五的好友请求
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/api/v1/social/friend-requests/handle \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer ${USER_B_TOKEN}" \
|
||
-d '{
|
||
"request_id": 2,
|
||
"action": "reject"
|
||
}'
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"action": "reject",
|
||
"friendship_created": false,
|
||
"processed_at": 1736234700000
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 6.3 验证好友关系未建立
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/friendship/check?friend_user_id=2" \
|
||
-H "Authorization: Bearer ${USER_C_TOKEN}"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"is_friend": false
|
||
}
|
||
}
|
||
```
|
||
|
||
### 测试场景 8: 设置好友备注
|
||
|
||
```bash
|
||
curl -X PUT http://localhost:8080/api/v1/social/friends/remark \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}" \
|
||
-d '{
|
||
"friend_user_id": 2,
|
||
"remark": "小李"
|
||
}'
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"remark": "小李"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 测试场景 9: 删除好友
|
||
|
||
```bash
|
||
curl -X DELETE http://localhost:8080/api/v1/social/friends \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}" \
|
||
-d '{
|
||
"friend_user_id": 2
|
||
}'
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"success": true
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 7.1 验证好友已被删除(张三)
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/friends?page=1&page_size=20" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"items": [],
|
||
"total": 0,
|
||
"page": 1,
|
||
"page_size": 20,
|
||
"has_more": false
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 7.2 验证好友已被删除(李四)
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/friends?page=1&page_size=20" \
|
||
-H "Authorization: Bearer ${USER_B_TOKEN}"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": {
|
||
"items": [],
|
||
"total": 0,
|
||
"page": 1,
|
||
"page_size": 20,
|
||
"has_more": false
|
||
}
|
||
}
|
||
```
|
||
|
||
### 测试场景 10: 获取随机用户
|
||
|
||
获取同一明星下的随机用户信息(用于推荐加好友等功能)。
|
||
|
||
#### 10.1 获取单个随机用户(默认)
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/random-users" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": [
|
||
{
|
||
"user_id": 2,
|
||
"nickname": "李四"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**说明:**
|
||
- 默认返回 1 个随机用户
|
||
- 返回的用户必须是同一 `star_id` 下的活跃用户
|
||
- 每次调用返回的用户可能不同(随机算法)
|
||
|
||
#### 10.2 获取多个随机用户
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/random-users?count=3" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": [
|
||
{
|
||
"user_id": 2,
|
||
"nickname": "李四"
|
||
},
|
||
{
|
||
"user_id": 3,
|
||
"nickname": "王五"
|
||
},
|
||
{
|
||
"user_id": 4,
|
||
"nickname": "赵六"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**说明:**
|
||
- `count` 参数指定返回数量(1-100)
|
||
- 如果数据库中的用户数量少于请求的数量,返回实际存在的用户数量
|
||
- 如果数据库中没有用户,返回空数组
|
||
|
||
#### 10.3 验证随机性
|
||
|
||
多次调用接口,验证返回的用户不同:
|
||
|
||
```bash
|
||
# 第一次调用
|
||
curl -X GET "http://localhost:8080/api/v1/social/random-users" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}" | jq -r '.data[0].user_id'
|
||
|
||
# 第二次调用
|
||
curl -X GET "http://localhost:8080/api/v1/social/random-users" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}" | jq -r '.data[0].user_id'
|
||
|
||
# 第三次调用
|
||
curl -X GET "http://localhost:8080/api/v1/social/random-users" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}" | jq -r '.data[0].user_id'
|
||
```
|
||
|
||
**说明:**
|
||
- 多次调用可能返回不同的用户(随机算法)
|
||
- 如果数据库中只有少量用户,可能会重复返回
|
||
|
||
#### 10.4 边界情况测试
|
||
|
||
**测试 1: count 参数为 0 或负数**
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/random-users?count=0" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}"
|
||
```
|
||
|
||
**预期响应:** 默认返回 1 个用户
|
||
|
||
**测试 2: count 参数超过最大值**
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/random-users?count=200" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}"
|
||
```
|
||
|
||
**预期响应:** 最多返回 100 个用户
|
||
|
||
**测试 3: 数据库中没有用户**
|
||
|
||
如果当前 `star_id` 下没有任何活跃用户:
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/random-users" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "ok",
|
||
"data": []
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 异常场景测试
|
||
|
||
### 异常 1: 查找不存在的用户
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/search-user?friend_user_id=99999" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 404,
|
||
"message": "用户不存在"
|
||
}
|
||
```
|
||
|
||
### 异常 2: 查找自己
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/search-user?friend_user_id=1" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 400,
|
||
"message": "不能查找自己"
|
||
}
|
||
```
|
||
|
||
### 异常 3: 未登录访问
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/api/v1/social/friends?page=1&page_size=20"
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 401,
|
||
"message": "未授权"
|
||
}
|
||
```
|
||
|
||
### 异常 4: 重复发送好友请求
|
||
|
||
```bash
|
||
# 第一次
|
||
curl -X POST http://localhost:8080/api/v1/social/friend-requests \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}" \
|
||
-d '{"friend_user_id": 2}'
|
||
|
||
# 第二次(重复)
|
||
curl -X POST http://localhost:8080/api/v1/social/friend-requests \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}" \
|
||
-d '{"friend_user_id": 2}'
|
||
```
|
||
|
||
**第二次预期响应:**
|
||
```json
|
||
{
|
||
"code": 400,
|
||
"message": "已有待处理的好友请求"
|
||
}
|
||
```
|
||
|
||
### 异常 5: 添加自己为好友
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/api/v1/social/friend-requests \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}" \
|
||
-d '{"friend_user_id": 1}'
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 400,
|
||
"message": "不能添加自己为好友"
|
||
}
|
||
```
|
||
|
||
### 异常 4: 冷却期内重复请求
|
||
|
||
```bash
|
||
# 假设李四拒绝了张三的请求后,张三立即重新发送
|
||
curl -X POST http://localhost:8080/api/v1/social/friend-requests \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}" \
|
||
-d '{"friend_user_id": 2}'
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 400,
|
||
"message": "请求已被拒绝,请 7 天后再试"
|
||
}
|
||
```
|
||
|
||
### 异常 6: 处理不存在的请求
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/api/v1/social/friend-requests/handle \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer ${USER_B_TOKEN}" \
|
||
-d '{
|
||
"request_id": 99999,
|
||
"action": "accept"
|
||
}'
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 404,
|
||
"message": "好友请求不存在"
|
||
}
|
||
```
|
||
|
||
### 异常 7: 删除不存在的好友
|
||
|
||
```bash
|
||
curl -X DELETE http://localhost:8080/api/v1/social/friends \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}" \
|
||
-d '{"friend_user_id": 99999}'
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 400,
|
||
"message": "你们不是好友"
|
||
}
|
||
```
|
||
|
||
### 异常 8: 无效的参数
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/api/v1/social/friend-requests \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}" \
|
||
-d '{}'
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 400,
|
||
"message": "参数错误: Key: 'friend_user_id' Error:Field validation for 'friend_user_id' failed on the 'required' tag"
|
||
}
|
||
```
|
||
|
||
### 异常 8: 备注过长
|
||
|
||
```bash
|
||
curl -X PUT http://localhost:8080/api/v1/social/friends/remark \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer ${USER_A_TOKEN}" \
|
||
-d '{
|
||
"friend_user_id": 2,
|
||
"remark": "这是一个超过50个字符的备注名这是一个超过50个字符的备注名这是一个超过50个字符的备注名这是一个超过50个字符的备注名"
|
||
}'
|
||
```
|
||
|
||
**预期响应:**
|
||
```json
|
||
{
|
||
"code": 400,
|
||
"message": "备注长度不能超过50个字符"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 测试数据清理
|
||
|
||
### 方法 1: 通过 API 删除(推荐)
|
||
|
||
依次删除好友关系和用户数据(通过应用逻辑)。
|
||
|
||
### 方法 2: 直接清理数据库
|
||
|
||
```sql
|
||
-- 删除好友关系
|
||
DELETE FROM friendships WHERE star_id = 1;
|
||
|
||
-- 删除好友请求
|
||
DELETE FROM friend_requests WHERE star_id = 1;
|
||
|
||
-- 删除粉丝档案
|
||
DELETE FROM fan_profiles WHERE star_id = 1;
|
||
|
||
-- 删除用户(可选)
|
||
DELETE FROM users WHERE mobile IN ('13800000001', '13800000002', '13800000003');
|
||
```
|
||
|
||
---
|
||
|
||
## 测试检查清单
|
||
|
||
- [ ] 所有服务正常启动
|
||
- [ ] 健康检查通过
|
||
- [ ] 用户注册成功
|
||
- [ ] 发送好友请求成功
|
||
- [ ] 查看请求列表正确
|
||
- [ ] 接受好友请求成功
|
||
- [ ] 好友列表显示正确
|
||
- [ ] 好友数量统计正确
|
||
- [ ] 检查好友关系正确
|
||
- [ ] 设置好友备注成功
|
||
- [ ] 关键字搜索好友有效
|
||
- [ ] 拒绝好友请求成功
|
||
- [ ] 删除好友成功
|
||
- [ ] 所有异常场景返回正确错误
|
||
|
||
---
|
||
|
||
## 常见问题
|
||
|
||
### Q1: 服务启动失败怎么办?
|
||
|
||
检查:
|
||
1. 数据库是否正常运行
|
||
2. 端口是否被占用
|
||
3. 配置文件是否正确
|
||
4. 依赖服务是否已启动
|
||
|
||
### Q2: Token 过期怎么办?
|
||
|
||
重新登录获取新的 Token:
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/api/v1/auth/login \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"mobile": "13800000001",
|
||
"password": "password123"
|
||
}'
|
||
```
|
||
|
||
### Q3: 如何查看服务日志?
|
||
|
||
```bash
|
||
# UserService 日志
|
||
tail -f /path/to/user-service.log
|
||
|
||
# SocialService 日志
|
||
tail -f /path/to/social-service.log
|
||
|
||
# Gateway 日志
|
||
tail -f /path/to/gateway.log
|
||
```
|
||
|
||
### Q4: 如何重置测试环境?
|
||
|
||
1. 停止所有服务
|
||
2. 清理数据库(执行上述清理SQL)
|
||
3. 重新启动所有服务
|
||
4. 重新注册测试用户
|
||
|
||
---
|
||
|
||
## 附录
|
||
|
||
### A. 完整的 Postman Collection
|
||
|
||
可以导入以下 JSON 到 Postman 进行测试:
|
||
|
||
[下载 Postman Collection](./社交服务测试集合.postman_collection.json)
|
||
|
||
### B. 自动化测试脚本
|
||
|
||
参考 `tests/social_service_integration_test.sh` 进行自动化测试。
|
||
|
||
### C. 性能测试建议
|
||
|
||
- 使用 Apache Bench 或 wrk 进行压力测试
|
||
- 建议并发用户数:100-1000
|
||
- 观察响应时间和错误率
|
||
|
||
---
|
||
|
||
**文档版本**: v1.0
|
||
**最后更新**: 2026-01-06
|
||
**维护者**: AI Assistant
|
||
|