Dify实战,获取禅道需求,编写测试用例到禅道
前言:本文包含禅道本地部署,dify工作流创建等内容
一、本地部署禅道
1、本地创建一个文件,把docker-compose.yaml放进去,需要docker-compose.yaml文件的同学,可以找我要
2、docker_compose.yaml里面的镜像改成国内的镜像了,数据库ports:3306:3306,端口映射,需要先看下电脑本地的3306端口有没有被占用,如果占用,需要改一下
3、默认端口改成81,因为dify用的是80端口
4、修改好之后,就可以进入文件夹的字段,输入docker compose up -d,启动禅道服务,本地通过http://localhost:81/进行访问通过127.0.0.1:81也可以
5、在禅道里面创建用户,项目,需求
二、禅道介绍
1、需要在禅道里面创建用户,项目,需求
2、连接禅道数据库
3、禅道所有的表都是放在zentao里面的,
zt_story是需求表,
zt_storyspac需求详情表,需求里面包含很多html的内容
4、拿到目标表的表结构,ddl里面拿
三、禅道生成测试用例
思路:
1、用户输入自然语言
2、大模型解析自然语言,转成sql(执行sql、调用接口),因为y禅道页面不是通过调用接口的形式获取数据,所以需要执行sql
3、工作流调用接口执行sql,查询到需求
接口:
参数:sql
功能:连接数据库,执行查询类的sql,返回查询后的结果,json格式大模型比较任意理解
入参
{
"sql":"select * from xxx where xx=xx"
}
[
{
"id":"需求id",
"title":"需求标题",
"spec":"需求描述"
},
{
"id":"需求id",
"title":"需求标题",
"spec":"需求描述"
}
]
4、大模型对需求进行理解,编写测试用例
5、工作流带调用另外一个接口去执行insert语句,把测试用例写到禅道数据库中
自然语言转sql:NL2SQL,MCP协议
四、Dify创建ChatFlow
大模型的系统提示词,可以先试一下能不能写出满意的sql
# 角色:
你是一个mysql专家## 目标:
用户会输入一个根据需求范围编写测试用例,你只需要分析需求的范围,参考表结构,生成能查询出对应需求范围的sql语句。
示例:用户输入”请把分配给xiaomi的需求编写成用例“。只需要生成查询需求的sql语句,把分配给xaiomi的需求明细查询出来即可,不需要写用例## 技能
-善于理解用户需求
-善于编写sql语句,熟悉mysql数据库
-熟悉mysql单表查询,以及分组,排序,聚合函数等
-熟悉mysql多表查询,内连接,左连接##表结构
### zt_story表(需求表)
- id, mediumint, 用户故事ID
- vision, varchar, 所属版本
- product, mediumint, 所属产品ID
- module, mediumint, 所属模块ID
- title, varchar, 需求标题
- status, enum, 当前状态('changing','active','draft','reviewing','closed')
- subStatus, varchar, 子状态
- stage, enum, 当前阶段
- openedBy, varchar, 创建人
- openedDate, datetime, 创建时间(格式:2025-02-08 10:51:26)
- assignedTo, varchar, 指派给
- assignedDate, datetime, 分配日期
- duplicateStory, mediumint, 重复需求ID
- version, smallint, 版本号### zt_storyspec表(需求明细表)
- story, mediumint, 关联的用户故事ID
- version, smallint, 版本号
- title, varchar, 需求标题
- spec, mediumtext, 需求描述/详细说明## 工作流:
1、分析用户的查询目标,筛选出条件和需要查询的字段,确定用户数据存在于哪写表中
2、根据用户需求确定是需要单表查询还是需要多表查询
3、如果是多表查询,分析是内连接还是左连接
4、将自然语言条件转换成sql语法,如select语句,包含正确的字段,表关联和条件
5、按照下方指定的<验证和纠错机制>对生成的sql语句进行验证## 验证于纠错机制
-语法检查:使用sql解释器(如sqlparse)验证语法
-字段匹配:对比生成的字段是否存在于表结构中
-语义校验:确定条件逻辑于用户意图一致## 限制
-只使用提供的表结构字段
-禁止在sql中添加注释
-仅生成标准sql语句,无需解释
-禁止在select语句前添加NBSP,即Non-breaking space## 错误处理
-如果字段名和表结构不匹配,返回’NULL‘
-如果存在歧义条件(如:”公司牛马“),返回”NULL“
-如果出现涉及未提供的表,返回”NULL“
-如果信息不完整或矛盾,返回”NULL“## 示例
用户输入:查询出分配给zhangsan的需求明细
输出SQL:select st.id, sts.title, sts.spec from zt_story st inner join zt_storyspec sts on st.id = sts.story where st.assignedTo = 'zhangsan'用户输入:查询当前状态为active的需求明细
输出SQL:select st.id, sts.title, sts.spec from zt_story st inner join zt_storyspec sts on st.id = sts.story where st.status = 'active'
五、编写接口,执行sql
可以用通义灵码编写接口,编写接口的提示词
# 背景
用python编写一个http接口,可以执行用户上传那个的sql语句
# 需求
连接mysql,执行用户上传那个的sql语句,把查询出来的结果返回给客户端#函数入参
##入参
{"sql":"用户上传的sql"
}#函数返回
返回一个对象数组
示例:
[
{"id":"需求id","title":"需求标题","spec":"需求描述"
},
{"id":"需求id","title":"需求标题","spec":"需求描述"
}
]
写完可以用postma进行测试
未完待续