You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OneAuth/scripts/tests/README.md

108 lines
3.0 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 测试脚本说明
本目录包含 VBase 的集成测试脚本,使用 bash + curl 测试 API 功能。
## 目录结构
```
scripts/tests/
├── README.md # 本说明文件
├── lib.sh # 公共函数库
├── 00_none_auth.sh # 未登录访问测试
├── 01_setup_users.sh # 用户初始化与基础认证
├── 02_resource_perm.sh # 资源权限交叉测试
├── 03_org_permission.sh # 组织权限测试
└── run_all.sh # 运行所有测试
```
## 前置条件
1. 服务必须已启动:
```bash
rm /tmp/vb.sqlite && go run cli/main.go -db.type=sqlite -db.dsn /tmp/vb.sqlite -p 4000
```
2. 手动查询后端接口列表
```bash
curl -sSf http://localhost:4000/_api.json
```
## 测试脚本说明
### 00_none_auth.sh
**测试内容**:未登录状态下访问受保护接口
- 验证 API 是否正确拦截未携带 Token 的请求
- 覆盖 Users, Orgs, Roles, Settings 等核心模块
### 01_setup_users.sh
**测试内容**:用户初始化与基础功能验证
- 注册三个核心账户Admin, User1, User2
- 验证注册与登录流程
- 使用临时账户验证:
- 修改个人信息
- 修改密码(验证旧密码失效、新密码生效)
- Token 刷新
- 用户登出
### 02_resource_perm.sh
**测试内容**:跨用户资源访问权限验证
- 场景 1: Admin 修改任意用户信息 (允许)
- 场景 2: User1 修改自己信息 (允许)
- 场景 3: User1 修改 User2 信息 (禁止)
- 场景 4: User1 修改 Admin 信息 (禁止)
- 场景 5: User2 修改 User1 信息 (禁止)
### 03_org_permission.sh
**测试内容**:组织权限控制
- admin 创建组织
- user 不能修改他人创建的组织
- admin 邀请 user 加入组织
- 普通成员不能修改组织信息
- 只有 admin/owner 可以修改组织
### run_all.sh
**功能**:运行所有测试
- 按顺序执行所有测试脚本
- 遇到错误时停止
- 输出测试摘要
- 统一时间戳 `TEST_TIMESTAMP`,确保跨脚本的用户数据一致性
## 使用方法
### 运行所有测试 (推荐)
```bash
cd scripts/tests
bash run_all.sh
```
### 运行单个测试
```bash
# 必须先设置时间戳以避免冲突 (可选)
export TEST_TIMESTAMP=$(date +%s)
# 运行特定测试
bash 00_none_auth.sh
bash 01_setup_users.sh
bash 02_resource_perm.sh
```
## 测试环境变量
| 变量 | 默认值 | 说明 |
| ---------------- | ----------------------- | ------------------------------ |
| `BASE_URL` | `http://localhost:4000` | API 基础地址 |
| `TEST_TIMESTAMP` | 自动生成 | 测试时间戳,用于生成唯一用户名 |
## 注意事项
1. 测试脚本会创建真实数据,建议在测试数据库上运行
2. 测试失败时会立即退出(`set -e`
3. `run_all.sh` 会自动导出 `TEST_TIMESTAMP`,手动运行单个脚本时建议手动设置,否则每次运行都会生成新用户。