129 lines
3.5 KiB
Python
129 lines
3.5 KiB
Python
|
|
"""
|
|||
|
|
QA Agent - 测试工程师智能体
|
|||
|
|
负责根据 SRS 生成自动化测试用例(Pytest 格式)
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
from typing import Dict, Any
|
|||
|
|
from crewai import Agent, Task
|
|||
|
|
from models.qwen_config import get_llm
|
|||
|
|
|
|||
|
|
|
|||
|
|
def create_qa_agent() -> Agent:
|
|||
|
|
"""
|
|||
|
|
创建测试工程师智能体
|
|||
|
|
|
|||
|
|
Returns:
|
|||
|
|
Agent: QA 智能体实例
|
|||
|
|
"""
|
|||
|
|
return Agent(
|
|||
|
|
role="高级测试架构师",
|
|||
|
|
goal="根据软件需求规格说明书 (SRS) 设计并生成完整的自动化测试用例",
|
|||
|
|
backstory="""你是一位拥有 8 年经验的高级测试架构师,擅长:
|
|||
|
|
1. 基于需求文档设计全面的测试策略
|
|||
|
|
2. 编写高质量的 Pytest 自动化测试脚本
|
|||
|
|
3. 覆盖单元测试、集成测试、端到端测试
|
|||
|
|
4. 遵循博世研发规范中的测试要求
|
|||
|
|
|
|||
|
|
你的测试用例将作为开发实现的验证标准,务必保证覆盖率和可执行性。""",
|
|||
|
|
verbose=True,
|
|||
|
|
allow_delegation=False,
|
|||
|
|
llm=get_llm()
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
|
|||
|
|
def create_qa_task(srs_document: str) -> Task:
|
|||
|
|
"""
|
|||
|
|
创建测试用例生成任务
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
srs_document: 软件需求规格说明书
|
|||
|
|
|
|||
|
|
Returns:
|
|||
|
|
Task: QA 任务实例
|
|||
|
|
"""
|
|||
|
|
return Task(
|
|||
|
|
description=f"""
|
|||
|
|
请根据以下 SRS 文档,生成完整的自动化测试用例:
|
|||
|
|
|
|||
|
|
【SRS 文档】
|
|||
|
|
{srs_document}
|
|||
|
|
|
|||
|
|
【输出要求】
|
|||
|
|
请按照以下结构输出测试方案:
|
|||
|
|
|
|||
|
|
## 1. 测试策略概述
|
|||
|
|
- 1.1 测试范围
|
|||
|
|
- 1.2 测试方法(单元测试/集成测试/E2E 测试)
|
|||
|
|
- 1.3 测试工具和技术栈
|
|||
|
|
|
|||
|
|
## 2. 测试场景列表
|
|||
|
|
- 2.1 功能测试场景(对应每个功能性需求)
|
|||
|
|
- 2.2 边界值测试场景
|
|||
|
|
- 2.3 异常场景测试
|
|||
|
|
- 2.4 性能测试场景
|
|||
|
|
|
|||
|
|
## 3. Pytest 测试代码
|
|||
|
|
为每个核心功能生成 Pytest 测试脚本,包含:
|
|||
|
|
```python
|
|||
|
|
# 测试文件:test_<feature>.py
|
|||
|
|
import pytest
|
|||
|
|
|
|||
|
|
class Test<Feature>:
|
|||
|
|
\"\"\"<功能>测试类\"\"\"
|
|||
|
|
|
|||
|
|
def test_<scenario>_(self):
|
|||
|
|
\"\"\"测试场景描述\"\"\"
|
|||
|
|
# Arrange - 准备测试数据
|
|||
|
|
# Act - 执行操作
|
|||
|
|
# Assert - 验证结果
|
|||
|
|
pass
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 4. 测试数据准备
|
|||
|
|
- 4.1 测试 fixtures
|
|||
|
|
- 4.2 Mock 数据
|
|||
|
|
- 4.3 测试数据库种子
|
|||
|
|
|
|||
|
|
## 5. 测试执行说明
|
|||
|
|
- 5.1 运行命令
|
|||
|
|
- 5.2 环境要求
|
|||
|
|
- 5.3 预期通过率
|
|||
|
|
|
|||
|
|
【注意事项】
|
|||
|
|
- 遵循 AAA(Arrange-Act-Assert)测试模式
|
|||
|
|
- 使用描述性的测试函数命名
|
|||
|
|
- 包含充足的断言验证
|
|||
|
|
- 考虑边界条件和异常情况
|
|||
|
|
""",
|
|||
|
|
expected_output="完整的测试方案和 Pytest 测试代码",
|
|||
|
|
agent=create_qa_agent()
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
|
|||
|
|
def execute_qa_stage(srs_document: str) -> Dict[str, Any]:
|
|||
|
|
"""
|
|||
|
|
执行 QA 阶段任务
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
srs_document: 软件需求规格说明书
|
|||
|
|
|
|||
|
|
Returns:
|
|||
|
|
Dict[str, Any]: 包含测试方案和执行结果
|
|||
|
|
"""
|
|||
|
|
qa_agent = create_qa_agent()
|
|||
|
|
qa_task = create_qa_task(srs_document)
|
|||
|
|
|
|||
|
|
crew = Crew(
|
|||
|
|
agents=[qa_agent],
|
|||
|
|
tasks=[qa_task],
|
|||
|
|
verbose=True
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
result = crew.kickoff()
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
"stage": "测试用例设计",
|
|||
|
|
"test_plan": result.raw,
|
|||
|
|
"status": "completed"
|
|||
|
|
}
|