利用tare生成编写测试用例的skill,针对小功能需求基本可用

利用 Trae 生成技能(Skill)的试验

那天下午在博客园中看关于AI agent中skill的讨论,去trae官网看了下,已经tare已经支持了使用skill,更新最新版本后,在solo模式输入需要生成测试用例的需求。

复制代码
帮我生成一个拥有设计软件测试的测试用例能力的skills,输入需求文档,使用语义切分的方式分隔需求,将分隔后需求提交给大模型分析,从等价类划分法、边界值法、因果图法、判定表法、场景法、正交表法和错误推测法等方法中选择合适的方式设计测试用例,输出测试用例到json文件中。

tare就自动创建好了skill,中间会提示我点击执行,进行创建文件、执行命令的操作。

在skill生成完成后测试了几个小需求,生成的json用例基本可以用,再让tare写python代码,将json格式用例写入excel中。

复制代码
修改测试用例设计技能,添加python代码将json格式的测试用例写入到excel文件中,修改完成后重新生成测试用例

python代码的效果也符合预期。整个生成skill、编写python代码的耗时除去我的思考时间后不超过5分钟。

后续只需要对需求进行理解并重新整理后输入给tare solo就能直接在Excel文件里生成测试用例了,测试了几个小需求,目前存在的缺陷是只能依赖详细的需求,若需求描述不清晰、不完整,输出的用例一定会遗漏,需要加强用例评审。

下面是完整的skill描述和python代码

实战示例:创建测试用例设计技能

示例 1:JSON 格式测试用例设计技能

1. 创建技能目录

```bash
mkdir -p .trae/skills/test-case-designer-json
```

2. 编写 SKILL.md 文件

复制代码
```markdown
---
name: "test-case-designer-json"
description: "设计软件测试用例。输入需求文档,使用语义切分分隔需求,分析后选择合适的测试方法(等价类、边界值、因果图等),生成测试用例并输出到JSON文件。"
---

# 测试用例设计器(JSON格式)

## 功能介绍

该技能用于自动化设计软件测试用例,基于输入的需求文档,通过语义切分、需求分析和测试方法选择,生成结构化的测试用例并输出到JSON文件。

## 使用场景

- 当用户需要为软件需求设计测试用例时
- 当用户希望使用多种测试方法(等价类划分、边界值分析等)设计测试用例时
- 当用户需要将测试用例导出为JSON格式时

## 输入输出示例

### 输入:
```
需求文档:
1. 用户登录功能
   - 支持用户名和密码登录
   - 用户名长度为6-20个字符
   - 密码长度为8-16个字符
   - 登录失败时显示错误信息
2. 商品搜索功能
   - 支持关键词搜索
   - 支持按价格范围搜索
   - 支持按销量排序
```

### 输出:
```
测试用例已生成到 test_case/test_cases_20260226_1112.json 文件中,包含以下测试用例:
[
  {
    "用例ID": "TC001",
    "用例描述": "添加单个高亮规则",
    "操作步骤": [
      "打开表格高亮配置界面",
      "点击添加规则按钮",
      "选择表格字段",
      "输入匹配内容",
      "设置背景颜色和文字颜色",
      "保存配置"
    ],
    "期望结果": "成功添加高亮规则,表格中符合条件的行/列显示高亮效果",
    "测试方法": "场景法"
  }
]
```

## 测试方法说明

该技能支持以下测试方法:

1. **等价类划分法**:将输入数据划分为有效等价类和无效等价类
2. **边界值法**:测试输入数据的边界值
3. **因果图法**:分析输入条件与输出结果之间的因果关系
4. **判定表法**:基于条件组合生成测试用例
5. **场景法**:基于用户场景生成测试用例
6. **正交表法**:基于正交设计生成测试用例
7. **错误推测法**:基于经验推测可能的错误情况

## 工作流程

1. **输入需求文档**:用户提供软件需求文档
2. **语义切分**:将需求文档按照语义进行切分,提取独立的功能点
3. **需求分析**:对每个功能点进行分析,识别输入、输出和约束条件
4. **测试方法选择**:根据功能特点选择合适的测试方法
5. **测试用例生成**:基于选择的测试方法生成测试用例,格式为JSON对象数组
6. **JSON文档输出**:每次生成测试用例时创建新的JSON文档,文件名包含时间戳,放入test_case文件夹中
7. **Excel文档输出(可选)**:使用json_to_excel.py脚本将JSON格式的测试用例转换为Excel文件

## 使用方法

1. 调用该技能
2. 提供需求文档内容
3. 等待技能分析和生成测试用例
4. 查看test_case文件夹中生成的测试用例文档:
   - JSON格式:test_cases_<时间戳>.json
5. (可选)生成Excel格式测试用例:
   - 确保已安装依赖:`pip install pandas openpyxl`
   - 运行脚本:`python json_to_excel.py`
   - 查看生成的Excel文件:test_cases_<时间戳>.xlsx

## 注意事项

- 需求文档应尽可能详细,包含功能描述、输入输出说明和约束条件
- 技能会自动选择最适合的测试方法,但用户可以根据需要指定特定的测试方法
- 生成的测试用例可能需要根据实际情况进行调整和补充
```

高级技巧:添加辅助脚本

为了增强技能的功能,您可以添加辅助脚本。例如,为JSON格式测试用例设计技能添加Excel转换脚本:

创建 json_to_excel.py 脚本

复制代码
import json
import pandas as pd
import os
from datetime import datetime

# 读取JSON文件
def read_json_file(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        return json.load(f)

# 将JSON转换为Excel
def json_to_excel(json_data, output_file):
    # 准备数据
    rows = []
    for test_case in json_data:
        # 将操作步骤列表转换为字符串
        steps = '\n'.join(test_case['操作步骤'])
        row = {
            '用例ID': test_case['用例ID'],
            '用例描述': test_case['用例描述'],
            '操作步骤': steps,
            '期望结果': test_case['期望结果'],
            '测试方法': test_case['测试方法']
        }
        rows.append(row)
   
    # 创建DataFrame
    df = pd.DataFrame(rows)
   
    # 写入Excel
    with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
        df.to_excel(writer, index=False, sheet_name='测试用例')
       
        # 设置列宽
        worksheet = writer.sheets['测试用例']
        for column in worksheet.columns:
            max_length = 0
            column_letter = column[0].column_letter
            for cell in column:
                try:
                    if len(str(cell.value)) > max_length:
                        max_length = len(str(cell.value))
                except:
                    pass
            adjusted_width = min(max_length + 2, 50)
            worksheet.column_dimensions[column_letter].width = adjusted_width

if __name__ == '__main__':
    # 确保test_case文件夹存在
    os.makedirs('test_case', exist_ok=True)
   
    # 读取最新的JSON文件
    json_files = [f for f in os.listdir('test_case') if f.endswith('.json')]
    if not json_files:
        print('No JSON files found in test_case directory')
        exit(1)
   
    # 按修改时间排序,获取最新的文件
    json_files.sort(key=lambda x: os.path.getmtime(os.path.join('test_case', x)), reverse=True)
    latest_json = os.path.join('test_case', json_files[0])
   
    # 读取JSON数据
    test_cases = read_json_file(latest_json)
   
    # 生成Excel文件名
    timestamp = datetime.now().strftime('%Y%m%d_%H%M')
    excel_file = os.path.join('test_case', f'test_cases_{timestamp}.xlsx')
   
    # 转换为Excel
    json_to_excel(test_cases, excel_file)
   
    print(f'Excel file generated: {excel_file}')

念头

某个下午产生的想法,利用大模型去实现,对我的工作已经有些帮助了,当大模型持续进化、加强,我的工作不知道是否还存在。