178 lines
7.6 KiB
Plaintext
178 lines
7.6 KiB
Plaintext
# OPPO AI 能力自动化测试框架(测试用例部分)
|
||
|
||
## 1. OPPO测试用例项目简介
|
||
|
||
本项目旨在为 OPPO 移动设备提供一套全面的 AI 能力自动化测试解决方案。通过模拟真实用户操作,对 AI 社交、AI 办公、AI 学习、AI 影像及 AI 生活等多个核心场景的功能进行端到端验证,确保各项 AI 功能的稳定性与可靠性。
|
||
|
||
## 2. 项目结构
|
||
|
||
项目采用分层结构,将核心逻辑、测试用例与配置文件分离,以提高代码的可维护性与扩展性。
|
||
|
||
```
|
||
oppo/
|
||
├── .well-known/ # 此目录存放与服务器交互的规范文件(由框架自动生成,请勿手动维护。)
|
||
├── .pacakge/ # 此目录存放更为底层的框架封装(勿动!)
|
||
├── assets/ # 所需的测试素材与语料均保存在此目录中(请勿使用git维护此目录)
|
||
├── core/ # 核心业务逻辑与辅助模块
|
||
│ ├── album.py # 相册操作封装
|
||
│ ├── local_search.py # 本地搜索功能封装
|
||
│ ├── sound_recorder.py # 录音机功能封装
|
||
│ ├── ui_helper.py # UI 交互辅助工具
|
||
│ ├── xiaobu.py # 小布助手交互封装
|
||
│ └──...
|
||
├── scenarios/ # 自动化测试用例场景
|
||
│ ├── tc_01_social/ # AI 社交场景
|
||
│ ├── tc_02_office/ # AI 办公场景
|
||
│ ├── tc_03_study/ # AI 学习场景
|
||
│ ├── tc_04_visual/ # AI 影像场景
|
||
│ └── tc_05_daily_life/ # AI 生活场景
|
||
├── conftest.py # Pytest 配置文件,提供全局 Fixture
|
||
├── pyproject.toml # 项目配置文件 (PEP 621),定义项目依赖与元数据
|
||
├── README # 项目说明文档
|
||
└── .env # 环境变量配置(请勿提交至版本库)
|
||
```
|
||
|
||
### 2.1. `core` 目录
|
||
|
||
`core` 目录包含了项目所需的核心功能模块。这些模块提供了对设备原生应用(如相册、录音机)和系统级功能(如UI操作、小布助手)的原子化操作接口,为上层测试用例的编写提供稳定支持。
|
||
|
||
### 2.2. `scenarios` 目录
|
||
|
||
`scenarios` 目录存放所有自动化测试用例。用例根据功能领域划分为不同的子目录,每个子目录对应一个二级测试场景。用例文件(`tc_*.py`)的命名遵循统一规范。
|
||
|
||
|
||
## 3. 测试场景概览
|
||
|
||
本项目覆盖了以下五大核心 AI 测试领域:
|
||
|
||
| 二级场景 | 编号前缀 | 描述 |
|
||
| :--- | :--- | :--- |
|
||
| AI 社交 | `tc_01` | 覆盖通话、短信、社交应用等场景下的 AI 功能。 |
|
||
| AI 办公 | `tc_02` | 覆盖日程管理、会议、文稿处理、全局搜索等办公场景。 |
|
||
| AI 学习 | `tc_03` | 覆盖问答、翻译、AI 教学等学习辅助功能。 |
|
||
| AI 影像 | `tc_04` | 覆盖 AI 拍摄、图片生成与处理、视频处理等影像能力。 |
|
||
| AI 生活 | `tc_05` | 覆盖生活问答、系统操作、出行、健康等日常应用场景。 |
|
||
|
||
每个场景下的具体测试用例(三级场景)均在对应的 `tc_*.py` 文件中实现。
|
||
|
||
## 4. 指标收集与发送机制
|
||
|
||
本项目包含一个完整的指标收集与发送机制,用于记录和传输测试过程中的关键性能指标和测试结果。
|
||
|
||
### 4.1 设计思想
|
||
|
||
指标管理器(`metric_manager.py`)的设计目标是提供一个灵活且易于使用的接口,用于收集和发送各种类型的测试指标。指标管理器支持多种指标类型,包括文本、数值、图像和视频。通过`conftest.py`中的`metric` fixture,指标管理器被集成到测试框架中,使得所有测试用例可以方便地使用它。
|
||
|
||
### 4.2 指标收集
|
||
|
||
指标管理器提供了以下方法来收集不同类型的指标:
|
||
|
||
- `add_text_metric(name: str, value: str, label: str | None = None)`: 添加文本类型的指标。
|
||
- `add_number_metric(name: str, value: float, label: str | None = None)`: 添加数值类型的指标。
|
||
- `add_image_metric(name: str, value: Path | str, label: str | None = None)`: 添加图像类型的指标。
|
||
- `add_video_metric(name: str, value: Path | str, label: str | None = None)`: 添加视频类型的指标。
|
||
|
||
此外,指标管理器还提供了一个`from_dict`方法,用于从字典中批量添加指标。
|
||
|
||
### 4.3 指标发送
|
||
|
||
在测试用例执行完成后,指标管理器会自动调用`send`方法,将收集到的所有指标发送到服务器。发送过程由`conftest.py`中的`metric` fixture管理,确保在每个测试用例结束后指标能够及时发送。
|
||
|
||
### 4.4 使用示例
|
||
|
||
在测试用例中,可以通过`metric` fixture来使用指标管理器。以下是一个简单的示例:
|
||
|
||
```python
|
||
import pytest
|
||
|
||
@pytest.mark.meta(id="TC-0101-01", description="AI社交/语音交流/AI代接/快递")
|
||
def test_tc_0101_01(metric):
|
||
metric.span(m_type="social", m_id="TC-0101-01", m_iter=1)
|
||
metric.add_text_metric(name="call_status", value="success", label="通话状态")
|
||
metric.add_number_metric(name="call_duration", value=120.5, label="通话时长")
|
||
metric.send()
|
||
```
|
||
|
||
在这个示例中,测试用例首先调用`span`方法开始一个新的指标收集周期,然后使用`add_text_metric`和`add_number_metric`方法添加文本和数值类型的指标,最后调用`send`方法将指标发送到服务器。
|
||
|
||
## 5. 开发规范与工具配置
|
||
|
||
为了确保代码质量和开发规范,项目中使用了`justfile`和`.pre-commit-config.yaml`两个重要配置文件。
|
||
|
||
### 5.1 `justfile` - 本地开发任务管理
|
||
|
||
`justfile` 是一个本地开发任务管理工具,类似于 Makefile,但更加简洁和易用。它定义了一系列常用开发任务及其执行命令,可以帮助你快速执行构建、清理、测试等操作。
|
||
|
||
#### 当前有的主要功能
|
||
|
||
- **任务分组**:任务按照功能分组,例如构建、测试、清理等。
|
||
- **命令简化**:通过简单的命令即可执行复杂的操作。
|
||
- **环境配置**:可以设置环境变量和默认参数。
|
||
|
||
后续,你可以参考现有命令自行拓展。
|
||
|
||
#### 使用示例
|
||
|
||
- **执行所有测试**:
|
||
```shell
|
||
just run
|
||
```
|
||
- **清理缓存**:
|
||
```shell
|
||
just clean-all
|
||
```
|
||
|
||
### 5.2 `.pre-commit-config.yaml` - 代码质量检查
|
||
|
||
`.pre-commit-config.yaml` 是 pre-commit 工具的配置文件,用于在每次提交代码前自动执行代码质量检查和格式化操作。
|
||
加入此工具的目的是为了代码风格的一致性和代码质量。
|
||
|
||
#### 主要功能
|
||
|
||
- **代码检查**:使用 Ruff 进行代码风格检查和格式化。
|
||
- **文件检查**:检查大文件、YAML 文件、TOML 文件的格式。
|
||
- **冲突检测**:检测合并冲突。
|
||
|
||
#### 使用示例
|
||
|
||
- **安装 pre-commit 钩子**:
|
||
```shell
|
||
pre-commit install
|
||
```
|
||
- **手动运行检查**:
|
||
```shell
|
||
pre-commit run --all-files
|
||
```
|
||
|
||
## 6. 环境与依赖
|
||
|
||
本项目使用 `uv` 作为包管理工具,所有依赖项均在 `pyproject.toml` 文件中声明。
|
||
|
||
**环境设置步骤:**
|
||
1. 确保已安装 `uv`。
|
||
2. 在项目根目录下执行以下命令创建并激活虚拟环境:
|
||
```shell
|
||
uv venv
|
||
source .venv/bin/activate
|
||
```
|
||
3. 安装项目依赖:
|
||
```shell
|
||
uv pip install -e .
|
||
```
|
||
|
||
## 7. 执行测试
|
||
|
||
本项目测试框架基于 `pytest` 构建。在激活虚拟环境后,可使用标准 `pytest` 命令执行测试。
|
||
|
||
- **执行所有测试:**
|
||
```shell
|
||
pytest
|
||
```
|
||
- **执行指定场景的测试:**
|
||
```shell
|
||
pytest scenarios/tc_01_social/
|
||
```
|
||
- **执行单个测试文件:**
|
||
```shell
|
||
pytest scenarios/tc_01_social/tc_0101.py
|
||
``` |