背景
Atlassian推出Ask Rovo重塑了当前AI使用的工作方式,它专为集成Confluence和Jira等协作工具而设计。它能够自动检索和整合团队在Confluence文档和Jira工单中的知识与数据,帮助成员快速找到所需信息和最佳实践。通过Ask Rovo,团队成员无需手动翻查大量页面或任务,只需提出问题,即可获得精准、实时的答案。
目标
鉴于当前公司项目通过Jira管理软件开发流程工单和使用Confluence作为知识库,因此Ask Rovo天然地有了大部分背景,对于开发团队中的测试角色来说,需要完成用例编写这样的任务,除了使用Jira单据和Confluenct知识库作为上下文外,还有一个非常重要的上下文就是TestRail中存放的已有用例,现在需要设计并实现一个TestRail Agent工具集成到Rovo中,能够最大限度地获取相关的上下文,以便Rovo辅助QA从一个Jira单据中生成测试用例。
整体架构设计
flowchart TD
A[用户在Jira中向Rovo提问] --> B{Rovo分析问题意图}
B --> C[需要编写测试用例]
C --> D[调用 TestRail Agent]
subgraph D [TestRail Agent 工作流]
D1[调用 get_module_features] --> D2[AI分析系统结构<br>选择相关模块]
D2 --> D3[调用 get_relevent_cases<br>传入选定模块]
D3 --> D4[返回精准的用例列表]
end
D --> E[Rovo结合需求+用例上下文<br>生成分析报告和新用例]
E --> F[最终响应返回用户]

功能实现
阶段一:TestRail Agent开发
Step 1: 设计Agent接口
1.1 get_module_features 方法
-
输入: 无
-
输出: TestRail中完整的模块-功能树状结构
-
数据格式:
javascript{ "modules": [ { "module_name": "用户管理", "module_id": "M1", "features": [ {"feature_name": "用户登录", "feature_id": "M1-F1"}, {"feature_name": "用户注册", "feature_id": "M1-F2"}, {"feature_name": "密码重置", "feature_id": "M1-F3"} ] }, { "module_name": "支付系统", "module_id": "M2", "features": [ {"feature_name": "微信支付", "feature_id": "M2-F1"}, {"feature_name": "支付宝支付", "feature_id": "M2-F2"} ] } ] }
1.2 get_relevent_cases 方法
-
输入 :
module_id,feature_id -
输出: 指定模块-功能下的所有测试用例详情
-
数据格式:
javascript'''json { "module": "用户管理", "feature": "用户登录", "cases": [ { "case_id": "C100", "title": "验证用户使用正确用户名密码登录成功", "steps": "1. 输入用户名...", "expected_result": "登录成功,跳转到首页", "coverage_scope": ["正常流登录", "会话建立"] }, { "case_id": "C101", "title": "验证用户登录失败提示信息", "steps": "1. 输入错误密码...", "expected_result": "显示'用户名或密码错误'提示", "coverage_scope": ["错误流", "密码错误处理"] } ] }Step 2: 实现Agent后端服务
开发人员需要创建一个独立的服务,提供这两个API端点:
python
# 伪代码示例
class TestRailAgent:
def get_module_features(self):
"""从TestRail API获取所有模块和功能目录"""
# 1. 调用 TestRail API: get_sections/{project_id}
# 2. 解析模块和功能的层级结构
# 3. 返回标准化的模块-功能树
def get_relevent_cases(self, module_id, feature_id):
"""根据模块和功能ID获取相关测试用例"""
# 1. 调用 TestRail API: get_cases/{project_id}§ion_id={feature_id}
# 2. 解析用例详情并格式化返回
阶段二:Ask Rovo 集成配置
Step 3: 注册自定义函数
在Ask Rovo的管理后台注册这两个方法:
3.1 注册 get_module_features
javascript
'''yaml
name: "get_module_features"
description: "获取TestRail中所有的模块和功能目录结构,用于让AI了解系统有哪些测试覆盖区域"
parameters: {}
returns: "系统模块功能树状结构"
3.2 注册 get_relevent_cases
javascript
'''yaml
name: "get_relevent_cases"
description: "根据指定的模块和功能ID,获取该功能下所有的现有测试用例"
parameters:
module_id: "string" # 模块ID
feature_id: "string" # 功能ID
returns: "指定功能下的详细测试用例列表"
Step 4: 设计AI推理逻辑
这是最核心的部分------设计AI的思考链:
步骤1:需求分析
-
AI读取Jira单据的标题、描述、验收标准
-
理解本次需求涉及的核心业务功能
步骤2:系统结构探索
-
AI自动调用
get_module_features获取完整目录 -
基于需求内容,选择最相关的模块和功能
步骤3:精准用例查询
-
AI调用
get_relevent_cases,传入选定的模块功能ID -
获取该功能下所有现有用例
步骤4:智能分析与生成
-
对比"新需求"和"现有用例覆盖范围"
-
识别测试缺口,生成补充用例
如何在Ask Rovo中预制Prompt Template实现AI推理逻辑?
1.设计System Prompt
Jira管理员在Ask Rovo后台配置Prompt
'''prompt
# Role: 智能测试分析师
## Core Function: 测试用例分析与生成
你专门负责为Jira需求分析测试覆盖并生成测试用例。当用户要求编写测试用例时,你必须严格按照以下推理链执行:
### 推理步骤:
1. **需求分析阶段**
- 仔细阅读当前的Jira单据(包括标题、描述、验收标准)
- 识别需求涉及的核心业务功能、模块边界和测试点
2. **系统结构探索阶段**
- 自动调用 `get_module_features` 获取TestRail中所有模块功能目录
- 基于需求分析结果,选择最相关的1-3个模块和功能
- 如果找不到完全匹配的模块,选择最接近的或识别为"全新功能"
3. **现有用例查询阶段**
- 对每个选定的功能,调用 `get_relevent_cases` 获取现有测试用例
- 分析现有用例的覆盖范围、测试场景和验证点
4. **智能生成阶段**
- **对比分析**:明确指出现有用例已覆盖新需求中的哪些部分
- **缺口识别**:精准识别新需求中未被覆盖的测试场景
- **用例生成**:仅针对测试缺口生成详细的测试用例
### 输出格式要求:
- 首先展示**覆盖分析报告**
- 然后列出**需要补充的测试场景**
- 最后提供**详细的测试用例草案**
- 每个用例包含:用例标题、测试步骤、预期结果、覆盖的业务场景
严禁跳过任何步骤直接生成用例!
2.创建用户友好的Prompt Template
为了让团队成员更容易使用,可以创建几个预设的模板指令:
模板1:标准用例生成
/生成测试用例
需求分析:{自动读取当前Jira上下文}
执行模式:完整分析
模板2:快速覆盖检查
/检查测试覆盖 关注模块:{用户可指定特定模块} 详细程度:简要报告
3.配置触发逻辑
在Ask Rovo后台设置触发规则:
'''yaml
triggers:
- pattern: ["编写测试用例", "生成测试用例", "创建测试case", "/生成测试用例"]
action: execute_qa_workflow
auto_invoke:
- get_module_features
- analyze_requirements
workflow_steps:
1. 验证Jira上下文存在
2. 执行System Prompt中定义的4步推理链
3. 确保每次调用都遵循module_features -> relevent_cases -> analysis的流程
4.针对测试场景的优化配置
为了确保符合Step 5的测试场景目标,需要在System Prompt中加入场景识别逻辑:
''prompt
## 场景识别与处理策略:
### 场景1:功能增强型需求(如:登录功能新增图形验证码)
- 识别关键词:"新增"、"增强"、"优化"、"增加"
- 处理策略:重点分析现有功能的用例,识别增量测试点
- 预期输出:明确指出"现有登录流程已覆盖,需要补充验证码相关场景"
### 场景2:全新功能开发(如:全新的消息推送中心)
- 识别关键词:"全新"、"新功能"、"首次开发"
- 处理策略:确认TestRail中无相关模块后,完整生成用例集
- 预期输出:"这是全新功能,需要完整编写测试用例"
### 场景3:缺陷修复相关
- 识别关键词:"修复"、"缺陷"、"Bug"、"问题"
- 处理策略:分析缺陷根本原因,生成回归测试用例
- 预期输出:包含"缺陷验证用例"和"回归测试用例"
阶段三:测试与优化
Step 5: 端到端测试场景
测试场景1:用户登录功能增强
-
输入: "为PROJ-456编写测试用例,需求是为用户登录新增图形验证码功能"
-
预期AI行为:
-
调用
get_module_features,发现"用户管理"模块下的"用户登录"功能 -
调用
get_relevent_cases获取现有登录用例 -
分析发现现有用例覆盖了用户名密码登录,但缺少验证码相关场景
-
生成验证码显示、验证、错误处理等新用例
-
测试场景2:全新功能开发
-
输入: "为PROJ-457编写测试用例,需求是开发全新的消息推送中心"
-
预期AI行为:
-
调用
get_module_features,发现没有"消息推送"相关模块 -
返回提示:"这是全新功能,TestRail中暂无相关用例,需要完整编写"
-
基于需求生成完整的测试用例集
-
Step 6: 优化提示词工程
为AI设计清晰的推理指令:
prompt
你是一个资深QA分析师。当需要编写测试用例时,请按以下步骤思考:
1. **分析需求范围**:仔细阅读Jira需求,确定涉及的业务模块和功能点。
2. **探索系统结构**:调用get_module_features了解现有测试覆盖的模块,选择与当前需求最相关的模块和功能。
3. **获取现有用例**:调用get_relevent_cases获取选定功能下的所有现有测试用例。
4. **对比分析生成**:
- 指出现有用例已经覆盖了哪些场景
- 识别新需求中哪些场景尚未被覆盖
- 仅针对未覆盖场景编写详细测试用例
始终基于实际的模块结构和现有用例来做出准确判断。
技术实现要点
-
缓存机制 :
get_module_features的结果可以缓存,避免频繁调用TestRail API -
错误处理: 当AI选择了不存在的module_id时的降级策略
-
超时控制: 设置合理的API超时时间,保证用户体验
-
结果格式化: 确保返回的数据结构清晰,便于AI理解