技术融合架构
ollama 与 skyvern 在 Dify 自动化测试中,共同构建起了一个紧密协作、高效运行的技术融合架构,宛如一个精密而复杂的交响乐团,每个乐器组都各司其职,又相互配合,共同演奏出美妙的测试乐章 。
从整体架构来看,ollama 作为智能大脑,主要负责测试用例的生成和智能分析。它基于自然语言理解和生成技术,能够根据测试人员输入的自然语言描述,自动生成详细的测试用例。例如,测试人员只需简单地描述 “测试电商网站的购物流程,包括商品搜索、添加购物车、结算支付等环节”,ollama 就能迅速理解需求,并生成涵盖各种正常和异常情况的测试用例,如搜索热门商品、搜索不存在的商品、添加限购商品到购物车、使用不同支付方式进行结算等。同时,ollama 还能够对测试结果进行智能分析,挖掘出潜在的问题和风险,为测试人员提供有价值的建议和改进方向。
skyvern 则专注于网页自动化操作和元素识别。它利用先进的视觉大模型和计算机视觉技术,实现对网页元素的精准定位和操作。在测试过程中,skyvern 就像是一个不知疲倦的机器人,能够按照 ollama 生成的测试用例,自动在网页上进行各种操作,如点击按钮、输入文本、选择下拉框等。而且,skyvern 的元素识别能力非常强大,它不受网页元素定位方式变化的影响,能够准确地识别出各种复杂网页中的元素,确保测试的稳定性和可靠性。
Dify 则作为整个架构的核心枢纽,负责协调 ollama 和 skyvern 之间的数据交互和任务执行。它通过可视化工作流设计,将 ollama 生成的测试用例和 skyvern 的自动化操作有机地结合起来,形成一个完整的测试流程。在 Dify 的工作流中,测试人员可以轻松地配置测试环境、选择测试用例、监控测试进度和结果,实现对整个测试过程的全面掌控。
在数据交互流程方面,当测试人员在 Dify 中发起一个测试任务时,首先会将测试需求以自然语言的形式输入给 ollama。ollama 接收到需求后,经过分析和处理,生成相应的测试用例,并将这些测试用例发送给 Dify。Dify 根据测试用例的要求,调用 skyvern 对网页进行自动化操作。skyvern 在操作过程中,会实时将操作结果反馈给 Dify,Dify 再将这些结果传递给 ollama 进行分析。ollama 根据分析结果,生成测试报告,并将报告返回给测试人员。整个数据交互流程就像是一条高效的生产线,各个环节紧密配合,确保测试工作的顺利进行。
实际测试流程演示
以用户登录流程测试为例,让我们来详细领略一下 ollama 与 skyvern 结合后在 Dify 自动化测试中的神奇表现 。
第1步:登录 Dify
浏览器打开:http://192.168.0.18:8080(自己地址)
第2步:创建新工作流
点击创建应用→工作流
命名为 "自动化登录"
📝 配置工作流节点
节点1:开始节点
点击开始节点,添加输入变量:
变量名:user_input
类型:文本
标题:测试需求
节点2:集成Ollma
(1)添加结点
(2)选择LLM
(3)上下文设置变量值,选择user_input
(4)SYSTEM中维护如下内容
你是测试助手。将用户的自然语言测试需求转换为操作步骤列表。 用户需求:{{#开始.user_input#}} 输出格式(每行一个步骤): 打开 http://192.168.0.130/ceshi 输入用户名 [具体用户名] 输入密码 [具体密码] 点击登录按钮 等待3秒 规则: 1. 如果用户说"登录系统",使用用户名 admin,密码 admin123 2. 如果用户提供了用户名和密码,使用用户提供的 3. 必须输出具体的用户名和密码,不要输出占位符如 {用户名} 4. 只输出步骤,不要输出解释 5. 每步一行,不要编号 示例1: 用户说:登录系统 输出: 打开 http://192.168.0.130/ceshi 输入用户名 admin 输入密码 admin123 点击登录按钮 等待3秒 示例2: 用户说:登录系统,用户名 test,密码 123456 输出: 打开 http://192.168.0.130/ceshi 输入用户名 test 输入密码 123456 点击登录按钮 等待3秒 示例3: 用户说:登录 http://example.com,账号 john,密码 secret 输出: 打开 http://example.com 输入用户名 john 输入密码 secret 点击登录按钮 等待3秒 |
节点3:代码结点
(1)添加结点
(2)选择代码执行
(3)输入变量 变量名input_data ,选择LLM下text
(4)PYTHON3中维护如下代码
defmain(input_data): # 如果输入是字符串 ifisinstance(input_data,str): description = input_data # 如果输入是字典 elifisinstance(input_data,dict): description = input_data.get("text","") else: description =str(input_data) return{ "description": description } |
(5)输出变量 变量名description 变量类型String