技术融合架构

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. 点击 创建应用 → 工作流

  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中维护如下代码 

def main(input_data):

    # 如果输入是字符串

    if isinstance(input_data, str):

        description = input_data

    # 如果输入是字典

    elif isinstance(input_data, dict):

        description = input_data.get("text", "")

    else:

        description = str(input_data)

   

    return {

        "description": description

    }

(5)输出变量 变量名description 变量类型String

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐