这是CrewAI系列的第3篇,计划写24篇,会持续更新;
作者:14 年测试/QA 老兵
系列:CrewAI 多 Agent 测试框架实战(第 3 篇)
字数:约 4,200 字
阅读时间:10 分钟
收益:学完即可创建你的第一个 AI 员工,替代重复性工作
你是不是也经历过这些
❌ 重复写测试用例 —— 同样的场景,换个项目又要重写一遍
❌ 手动查资料 —— 遇到不懂的测试概念,要去 网上搜半天
❌ 文档没人看 —— 辛辛苦苦写的测试文档,开发说「太长了不看」
❌ 半夜被叫醒 —— 线上出问题,要半夜起来查日志、复现 bug
❌ 背锅侠 —— 延期了是测试没测好,上线出问题了是测试漏测了
如果中了一条,这篇文章就是为你写的。
换个思路:如果有个 AI 助手呢?
想象一下:
-
你告诉它「帮我写 20 条边界值分析的测试用例」,30 秒后给你一份完整的文档
-
你问它「什么是边界值分析」,它用测试人员能懂的语言解释,还附带实际例子
-
你让它「分析这个 bug 报告」,它帮你找出根本原因和复现步骤
这不是未来,这是现在就能做到的。 而 CrewAI,就是帮你创建这个 AI 员工的工具。
CrewAI 核心架构
在开始之前,先理解三个核心概念:
TEXT复制
┌─────────────────────────────────────────────────────────┐
│ CrewAI 三要素 │
├─────────────────────────────────────────────────────────┤
│ │
│ 🤖 Agent(员工) 📋 Task(工单) │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ role 角色 │ │ description │ │
│ │ goal 目标 │ │ output │ │
│ │ backstory │ │ agent │ │
│ └─────────────┘ └─────────────┘ │
│ ↓ ↓ │
│ └───────┬───────────┘ │
│ ↓ │
│ 👥 Crew(团队) │
│ ┌─────────────┐ │
│ │ agents[] │ │
│ │ tasks[] │ │
│ │ kickoff() │ ← 启动执行 │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
通俗理解: - Agent = 你的员工(定义角色、目标、背景) - Task = 分配给员工的工单(描述任务、期望输出)
- Crew = 项目组(把员工和工单组织起来,启动执行)
一个 Agent 是最小单位,多个 Agent 协作就是 Crew。
8 分钟,创建你的第一个 Agent
第一步:创建项目文件(2 分钟)
BASH复制
# 进入项目目录
cd ~/projects/crewai-demo
# 激活虚拟环境
source venv/bin/activate
# 创建文件
touch hello_agent.py
第二步:编写代码(3 分钟)
打开 hello_agent.py,复制以下代码:
PYTHON复制
from crewai import Agent, Task, Crew
# 1. 定义 Agent(创建你的员工)
agent = Agent(
role="助手",
goal="帮助用户完成任务",
backstory="你是一个友好的 AI 助手",
verbose=True
)
# 2. 定义 Task(分配工单)
task = Task(
description="请用 3 句话介绍人工智能",
expected_output="AI 简介",
agent=agent
)
# 3. 创建 Crew(组建团队)
crew = Crew(
agents=[agent],
tasks=[task],
verbose=True
)
# 4. 执行(kickoff 启动)
print("🚀 开始执行...\n")
result = crew.kickoff()
print("\n✅ 执行完成!")
print(f"结果:{result}")
第三步:运行(3 分钟)
BASH复制
python hello_agent.py
预期输出:
TEXT复制
🚀 开始执行...
╭───────────────── 🚀 Crew Execution Started ─────────────────╮
│ Crew Execution Started │
│ Name: crew │
│ ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890 │
╰──────────────────────────────────────────────────────────────╯
╭─────────────────── 📋 Task Started ────────────────────╮
│ Task Started │
│ Description: 请用 3 句话介绍人工智能 │
╰─────────────────────────────────────────────────────────╯
╭─────────────────── 🤖 Agent Started ────────────────────╮
│ Agent: 助手 │
╰─────────────────────────────────────────────────────────╯
╭───────────────── ✅ Agent Final Answer ──────────────────╮
│ 人工智能起源于 1956 年达特茅斯会议。 │
│ 20 世纪 80 年代专家系统兴起。 │
│ 2010 年后深度学习突破,AI 进入快速发展期。 │
╰─────────────────────────────────────────────────────────╯
✅ 执行完成!
结果:人工智能起源于 1956 年...
恭喜!你的第一个 AI 员工上岗了! 🎉
代码逐行解析(理解核心参数)
1. 导入类
PYTHON复制
from crewai import Agent, Task, Crew
三个核心类:
| 类 | 作用 | 类比 |
|---|---|---|
Agent | 智能体 | 你的员工 |
Task | 任务 | 工单 |
Crew | 团队 | 项目组 |
2. 定义 Agent(创建员工)
PYTHON复制
agent = Agent(
role="助手", # 角色定位
goal="帮助用户完成任务", # 工作目标
backstory="你是一个友好的 AI 助手", # 背景故事
verbose=True # 详细日志
)
4 个核心参数:
| 参数 | 作用 | 是否必填 | 影响 |
|---|---|---|---|
role | 定义 Agent 身份 | ✅ 必填 | 决定输出风格 |
goal | 定义目标任务 | ✅ 必填 | 决定工作方向 |
backstory | 让 Agent 更"真实" | ✅ 必填 | 决定输出深度 |
verbose | 输出详细日志 | ❌ 可选 | 决定日志详细度 |
3. 定义 Task(分配工单)
PYTHON复制
task = Task(
description="请用 3 句话介绍人工智能", # 任务描述
expected_output="AI 简介", # 期望输出
agent=agent # 负责人
)
3 个核心参数:
| 参数 | 作用 | 是否必填 |
|---|---|---|
description | 任务描述 | ✅ 必填 |
expected_output | 期望输出 | ✅ 必填 |
agent | 负责 Agent | ✅ 必填 |
4. 创建 Crew(组建团队)
PYTHON复制
crew = Crew(
agents=[agent], # Agent 列表
tasks=[task], # Task 列表
verbose=True # 详细日志
)
5. 执行(启动项目)
PYTHON复制
result = crew.kickoff()
kickoff() 方法: - 启动 Crew 执行 - 按顺序执行所有 Task
- 返回最终结果
实测:修改参数,观察效果变化
实验 1:修改 role(角色定位)
版本 1:友好助手
PYTHON复制
agent = Agent(
role="助手",
backstory="你是一个友好的 AI 助手"
)
输出风格: 平实、易懂
TEXT复制
人工智能是一种让计算机模拟人类智能的技术。
它可以帮助人们完成各种任务,如识别图像、理解语言等。
人工智能正在改变我们的生活方式。
版本 2:资深专家
PYTHON复制
agent = Agent(
role="AI 专家(20 年经验)",
backstory="你是拥有 20 年经验的 AI 专家,曾在谷歌、微软工作"
)
输出风格: 专业、包含技术术语
TEXT复制
人工智能(Artificial Intelligence)的概念最早由 John McCarthy
于 1956 年在达特茅斯会议上提出。经过符号主义、连接主义等阶段,
特别是 2012 年深度学习突破后,AI 进入了快速发展期...
💡 结论:role 定义直接影响输出风格和专业度。
实验 2:修改 backstory(背景故事)
版本 1:简短
PYTHON复制
backstory="你帮助写文档"
输出: 约 100 字,简单直接 版本 2:详细
PYTHON复制
backstory="""你是拥有 15 年经验的测试经理,擅长:
1. 根据需求评估测试范围
2. 制定合理的测试计划
3. 识别高风险区域
你的工作风格:
- 结果导向
- 风险驱动
- 数据驱动"""
输出: 约 500 字,详细专业 💡 结论:backstory 越长越详细,输出越专业、越有深度。
实验 3:修改 verbose(日志详细度)
verbose=False:
TEXT复制
✅ 执行完成!
结果:人工智能起源于...
verbose=True:
TEXT复制
🚀 Crew Execution Started
📋 Task Started
🤖 Agent Started
✅ Agent Final Answer
✅ 执行完成!
💡 建议:开发调试时用 True,生产环境用 False。
实战:创建测试助手 Agent
需求场景
创建一个能回答测试问题的 AI 助手,随时解答测试概念、提供测试建议。
代码实现
PYTHON复制
from crewai import Agent, Task, Crew
# 创建测试助手 Agent
test_assistant = Agent(
role="测试助手 (Test Assistant)",
goal="回答测试相关问题,提供测试建议",
backstory="""你是拥有 10 年经验的测试专家,擅长:
1. 测试用例设计(等价类、边界值、场景法等)
2. 测试执行和缺陷分析
3. 测试自动化和持续集成
你乐于助人,用简单易懂的语言解释测试概念。
喜欢用实际例子说明抽象概念。""",
verbose=True
)
# 创建任务
question = Task(
description="请解释什么是边界值分析,并给出一个实际例子",
expected_output="边界值分析的解释和示例",
agent=test_assistant
)
# 创建 Crew
crew = Crew(
agents=[test_assistant],
tasks=[question],
verbose=True
)
# 执行
result = crew.kickoff()
print(result)
输出示例
TEXT复制
╭───────────────── ✅ Agent Final Answer ──────────────────╮
│ 边界值分析是一种测试设计技术,用于测试输入域的边界条件。 │
│ │
│ 原理: │
│ 错误往往发生在边界附近,而不是中间值。 │
│ │
│ 实际例子: │
│ 测试一个输入框,要求输入 1-100 的数字。 │
│ │
│ 应该测试的边界值: │
│ - 0(小于最小值) │
│ - 1(最小值) │
│ - 2(最小值 +1) │
│ - 99(最大值 -1) │
│ - 100(最大值) │
│ - 101(大于最大值) │
│ │
│ 这样可以发现边界处理错误。 │
╰─────────────────────────────────────────────────────────╯
看到没?这就是你的 AI 测试助手! 以后遇到测试概念,不用再去 Google 搜了,直接问它就行。
你的收益计算器
假设你是一个测试人员: 学习前: - 查一个测试概念:15 分钟(搜索 + 筛选 + 理解) - 写一份测试用例文档:2 小时
- 每月重复性工作:约 35 小时
学习后: - 查一个测试概念:30 秒(问 AI 助手) - 写一份测试用例文档:20 分钟(AI 生成初稿 + 人工审核)
- 每月重复性工作:约 5 小时
每月节省:30 小时 每年节省:360 小时 = 45 个工作日 这还没算: - 减少的加班时间 - 提升的工作质量
- 避免的线上故障
更重要的是: 你可以把节省下来的时间,用来: - 学习新技能(AI 评测、大模型测试) - 做更有价值的工作(测试架构、质量体系建设)
- 早点下班,陪陪家人
而不是把生命浪费在重复的体力劳动上。
常见问题 FAQ
Q1: 输出是英文怎么办?
原因: 提示词是英文 解决: 用中文写 description
PYTHON复制
# ❌ 错误
description="Explain what is boundary value analysis"
# ✅ 正确
description="请解释什么是边界值分析"
Q2: 输出太短怎么办?
解决: 明确要求字数
PYTHON复制
task = Task(
description="请详细解释边界值分析(不少于 300 字)",
expected_output="详细的边界值分析解释"
)
Q3: 输出格式混乱怎么办?
解决: 指定输出格式
PYTHON复制
task = Task(
description="""请解释边界值分析
要求:
1. 先给出定义
2. 说明原理
3. 给出实际例子
4. 使用 Markdown 格式""",
expected_output="结构化的边界值分析说明"
)
Q4: 执行失败怎么办?
检查步骤:
BASH复制
# 1. 检查 API Key
echo $DASHSCOPE_API_KEY
# 2. 检查网络连接
ping dashscope.aliyuncs.com
# 3. 查看详细错误
# verbose=True 时会显示详细错误信息
Q5: 可以创建多个 Agent 吗?
可以! 这就是 CrewAI 的核心能力。
# 创建多个 Agent
researcher = Agent(role="研究员", ...)
writer = Agent(role="作家", ...)
reviewer = Agent(role="评审员", ...)
# 创建多个 Task
task1 = Task(agent=researcher, ...)
task2 = Task(agent=writer, ...)
task3 = Task(agent=reviewer, ...)
# 组建 Crew
crew = Crew(
agents=[researcher, writer, reviewer],
tasks=[task1, task2, task3]
)
多个 Agent 会按顺序协作完成任务。
你最想用 AI Agent 帮你做什么?
A. 自动生成测试用例
B. 自动分析 Bug 报告
C. 自动写测试文档
D. 自动执行回归测试
评论区告诉我你的选择!
下篇预告
第 4 篇我们会深入理解 Agent 核心参数:
-
如何定义专业的 Agent 角色?
-
backstory 怎么写才能让输出更专业?
-
如何控制输出的风格和格式?
-
实战:创建 5 个专业测试 Agent
敬请期待!
作者说:第一个 Agent 是起点,后续会创建 5 个专业测试 Agent,形成完整的测试团队。
欢迎关注我「测试员周周」,获取更多 AI+ 测试实战内容!
📚 系列文章索引
| 序号 | 文章 | 状态 |
|---|---|---|
| 01 | CrewAI 是什么? | ✅ 已完成 |
| 02 | 10 分钟搭建环境 | ✅ 已完成 |
| 03 | 第一个 Agent | ✅ 本篇 |
| 04 | 理解核心参数 | 📝 下一篇 |
| 05 | 设计专业 Agent 角色 | 📝 规划中 |
| ... | ... | ... |
🎁 获取完整代码
关注、点赞、评论获取:
-
✅ hello_agent.py 完整源码
-
✅ test_assistant.py 测试助手源码
-
✅ CrewAI 参数速查表(PDF)
-
✅ 常见问题解决方案文档
作者:测试员周周,14 年测试经验,专注 AI+ 测试实战