OpenClaw 实战:5 分钟用 AI Agent 自动生成规范测试用例并写入 Excel

OpenClaw 实战:5 分钟用 AI Agent 自动生成规范测试用例并写入 Excel

OpenClaw 实战:5 分钟用 AI Agent 自动生成规范测试用例并写入 Excel

一、核心前提

OpenClaw 是轻量级 Agent 框架,核心聚焦:
Skill 注册 → 工具选择 → 任务执行

  • 没有 Dify 的可视化界面
  • 没有知识库、没有复杂工作流
  • 代码极简洁、上手极快
  • 适合:测试开发 / 有编程能力的测试工程师

一句话定位:
OpenClaw = 极简、轻量、只专注做工具调用的小 Agent 引擎

二、环境准备

1. 安装 OpenClaw 及依赖

# 安装 OpenClaw 核心框架 pip install openclaw # Excel 操作 + LLM 调用 pip install openpyxl openai requests 

2.配置 LLM 密钥

import os # 替换成你的 OpenAI API Key os.environ["OPENAI_API_KEY"]="你的API Key"

三、完整实现代码(测试用例生成 + 写入 Excel)

import json import openpyxl from openpyxl.styles import Font, Alignment, PatternFill from openclaw import Agent, Tool, Parameter from openclaw.llms import OpenAILLM # ===================== Skill 1:生成测试用例 =====================classTestCaseGenerateTool(Tool): name ="test_case_generator" description =""" 软件测试专用工具:根据产品需求生成结构化测试用例,包含用例ID、模块、用例标题、前置条件、操作步骤、预期结果、优先级 必须返回JSON数组格式的用例数据,每个用例是字典 """ parameters =[ Parameter( name="requirement",type="str", description="产品需求描述", required=True), Parameter( name="module",type="str", description="测试模块名称", required=True), Parameter( name="priority",type="str", description="用例优先级(高/中/低)", required=True)]defrun(self, requirement:str, module:str, priority:str)->str: prompt =f""" 作为资深软件测试工程师,根据以下需求生成{priority}优先级的{module}测试用例: 需求描述:{requirement} 要求: 1. 用例字段:用例ID、模块、用例标题、前置条件、操作步骤、预期结果、优先级 2. 用例ID格式:模块缩写+序号(比如登录模块→DL001) 3. 覆盖所有功能点、边界条件、异常场景 4. 返回纯JSON数组,无多余文字 """ llm = OpenAILLM(model="gpt-3.5-turbo", temperature=0.3) response = llm.chat.completions.create( messages=[{"role":"user","content": prompt}], model="gpt-3.5-turbo") test_cases = json.loads(response.choices[0].message.content.strip())for i,caseinenumerate(test_cases,1):case["用例ID"]=f"{module[:2].upper()}00{i}"return json.dumps(test_cases, ensure_ascii=False)# ===================== Skill 2:写入Excel =====================classExcelWriteTool(Tool): name ="excel_writer" description =""" 软件测试专用工具:把JSON格式的测试用例列表写入Excel,生成规范的测试用例文档 支持字段:用例ID、模块、用例标题、前置条件、操作步骤、预期结果、优先级 """ parameters =[ Parameter( name="test_cases",type="str", description="JSON格式的测试用例列表", required=True), Parameter( name="file_path",type="str", description="Excel保存路径", required=True)]defrun(self, test_cases:str, file_path:str)->str:try: cases = json.loads(test_cases) wb = openpyxl.Workbook() ws = wb.active ws.title ="功能测试用例" headers =["用例ID","模块","用例标题","前置条件","操作步骤","预期结果","优先级"]for col, header inenumerate(headers,1): cell = ws.cell(row=1, column=col, value=header) cell.font = Font(bold=True, color="FFFFFF") cell.fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid") cell.alignment = Alignment(horizontal="center")for row,caseinenumerate(cases,2):for col, header inenumerate(headers,1): cell_value =case.get(header,"无") ws.cell(row=row, column=col, value=cell_value) ws.cell(row=row, column=col).alignment = Alignment(horizontal="center") col_widths =[10,15,30,20,40,30,10]for i, width inenumerate(col_widths,1): ws.column_dimensions[chr(64+i)].width = width wb.save(file_path)returnf"成功!测试用例已写入 {file_path},共 {len(cases)} 条用例"except Exception as e:returnf"失败:{str(e)}"# ===================== 初始化 Agent =====================definit_openclaw_agent(): llm = OpenAILLM(model="gpt-3.5-turbo", temperature=0.3) tools =[TestCaseGenerateTool(), ExcelWriteTool()] agent = Agent( llm=llm, tools=tools, system_prompt=""" 你是软件测试专属Agent,负责: 1. 先调用 test_case_generator 生成测试用例 2. 再调用 excel_writer 把用例写入Excel 3. 最终返回Excel生成结果 """, verbose=True)return agent # ===================== 执行 =====================if __name__ =="__main__": agent = init_openclaw_agent() user_task =""" 请生成登录模块的高优先级测试用例,需求: 用户登录功能支持手机号+验证码登录,手机号非11位提示「请输入正确手机号」, 验证码错误3次后账号锁定10分钟,登录成功跳转到首页。 生成后把用例写入 ./登录模块测试用例.xlsx """ result = agent.run(user_task)print("\n===== 最终结果 =====")print(result)

四、核心代码解释

  1. Skill 定义核心:
Tool= 技能 / 函数 name:工具名 description:Agent 判断什么时候调用该工具 parameters:告诉 AI 需要什么参数 run():真正执行逻辑 

2. Agent 执行逻辑:

 思考:用户需要生成测试用例 → 调用 test_case_generator 参数提取成功 → 生成用例 再思考:需要写入 Excel → 调用 excel_writer 最终返回结果 

五、运行效果

控制台输出

===== 最终结果 ===== 成功!测试用例已写入 ./登录模块测试用例.xlsx,共 5 条用例 

Excel 文件内容

标准 7 列测试用例 美观规范,可直接提交评审 可直接导入测试平台 

六、OpenClaw 进阶扩展

1. 解析 PDF/Word 需求文档

classDocumentParseTool(Tool): name ="document_parser" description ="解析PDF/Word格式的产品需求文档,提取核心需求文本" parameters =[Parameter(name="file_path",type="str", description="文档路径", required=True)]defrun(self, file_path:str)->str:import PyPDF2 withopen(file_path,"rb")as f: reader = PyPDF2.PdfReader(f) content ="\n".join([page.extract_text()for page in reader.pages])return content 
classTestLinkUploadTool(Tool): name ="testlink_uploader" description ="把测试用例导入TestLink测试管理平台" parameters =[Parameter(name="test_cases",type="str", description="JSON用例列表", required=True)]defrun(self, test_cases:str)->str:# 调用 TestLink API 实现导入return"用例已成功导入TestLink"

七、总结

OpenClaw 核心流程:
定义 Tool(技能)
注册给 Agent
输入一句话任务
Agent 自动选择工具、自动执行、自动输出结果
优势:
轻量、无冗余
代码完全可控
适合嵌入自动化脚本、CI/CD
比可视化平台更灵活、更适合测试开发

Read more

Java JDBC核心技术全解析

一、JDBC概述 1、概念 * jdbc是(Java Database Connectivity)单词的缩写,翻译为java连接数据库 * jdbc是java程序连接数据库的技术统称 * jdbc由java语言的规范(接口)和各个数据库厂商的实现驱动(jar)组成 * jdbc是一种典型的面向接口编程 * jdbc优势 1. 只需要学习jdbc规范接口的方法,即可操作所有的数据库软件 2. 项目中期切换数据库软件,只需要更换对应的数据库驱动jar包,不需要更改代码 2、jdbc核心api和使用路线 1、jdbc技术组成 各个数据库厂商提供的驱动jar包 因为各个数据库厂商的DBMS软件各有不同,那么内部如何通过sql实现增、删、改、查等管理数据,只有这个数据库厂商自己更清楚,因此把接口规范的实现交给各个数据库厂商自己实现。 jar包是什么? java程序打成的一种压缩包格式,你可以将这些jar包引入你的项目中,然后你可以使用这个java程序中类和方法以及属性了! jdk下jdbc规范接口, 存储在java.sql和javax.sql包中的ap

By Ne0inhk
Java融合PostgreSQL:节气与季节检索的实战应用

Java融合PostgreSQL:节气与季节检索的实战应用

目录 前言 一、节气和季节知识小课堂 1、节气是什么 2、季节是什么 3、节气和季节的关系 二、PostgreSQL数据库设计 1、信息存储 2、数据示例 3、SQL查询 三、JAVA计算节气和季节 1、模型层查询接节气 2、根据节气反推季节 3、节气及季节检索 四、总结 前言         在当今数字化时代,信息检索技术在各个领域都发挥着至关重要的作用。从简单的网页搜索到复杂的数据库查询,检索技术的高效性和准确性直接影响着用户体验和工作效率。在众多检索领域中,对自然现象的检索,如节气与季节的检索,虽然看似简单,却蕴含着丰富的文化内涵和实用价值。         节气是中国古代农耕文明的智慧结晶,它将一年分为二十四个节气,每个节气大约15天。这些节气不仅反映了自然界的气候变化,还与农业生产、民俗文化等密切相关。例如,“立春”标志着春天的开始,是播种的季节;“冬至”则是一年中白天最短、

By Ne0inhk
javaSE————网络原理

javaSE————网络原理

今天巨无聊,全是概念,重点记一下五元组,TCP/IP五层模型和OSI七层调用模型,大家这期就当看故事啦; 1,网络发展史 1)独立模式 我们刚开始使用计算机呢,客户端的数据不是共享的,如果有一个人想要办理业务,而这个业务所需的资源是在三台电脑上,那么这个人就需要在这三个电脑上不断的办理任务,而其他人想要办理业务,还需要等到前一个人办理完,效率非常低,那怎么办,我们就改进; 2)网络互联 接下来我们就使用网络进行计算机资源的共享,让多个计算机可以一起办理业务,达成数据共享,即网络通信,我们可以根据网络互联的规模分为局域网和广域网; 3)局域网LAN 局域网是本地,局部构建的一种私有网络,又被称为内网,局域网内的主机能够实现网络通信,局域网和局域网在没有连接的情况是不能进行通信的; 组件局域网等待方式也有很多种,可以通过网线直连,也可以通过交换机相连,还可以通过集线器相连,还可以通过路由器连接交换机在与多个主机相连; 4)广域网WAN 广域网就是多个局域网完成了连接,很多很多的局域网都能进行网络通信,我们其实可以把咱们中国的网络看成一个巨大的广域网,我们管内部

By Ne0inhk

JavaScript 垃圾回收原理与 V8 分代回收

在我们写JavaScript的时候,我们很少手动释放内存。不像 C/C++ 需要使用free(), JS 引擎会帮我们自动回收内存。 但是,自动回收 != 不需要理解内存,很多前端的性能问题,页面卡顿,内存暴涨,其实都和垃圾回收机制有关。 因此理解垃圾回收机制也尤为重要。 什么是垃圾回收? 垃圾回收(Garbage Collection,简称 GC): 自动识别“无法再访问”的对象,并释放其占用的内存。 核心问题只有一个:如何判断一个对象“没用了”? 那么基于这个定义,没有被引用的对象,就是垃圾。比如 let obj = { name: "Tom" } obj = null 当 obj = null 后: * 原来的对象不再被引用 * 成为垃圾 * 等待回收 内存模型基础 那么,

By Ne0inhk