引言:

在 Dify 自动化测试的宏大版图中,skyvern 的加入无疑是一场具有深远影响的重大变革,为测试工作带来了前所未有的突破和提升 。

在解决传统测试工具难题方面,skyvern 展现出了强大的实力。传统的测试工具在面对网页元素定位和操作时,往往依赖于固定的元素定位方式,如 XPath 或 DOM 解析。然而,现代网页的布局和结构日益复杂,且更新迭代频繁,这使得传统测试工具的稳定性和适应性受到了极大的挑战。一旦网页的布局发生变化,哪怕只是微小的调整,基于 XPath 或 DOM 解析的测试脚本就可能会失效,需要耗费大量的时间和精力进行重新编写和调试。而 skyvern 则彻底摆脱了对这些固定元素定位方式的依赖,它通过视觉大模型和计算机视觉技术,让机器能够像人类一样 “看懂” 网页,根据网页的语义和视觉信息来定位和操作元素。这就好比一个人在浏览网页时,不会因为按钮的位置或颜色发生了变化而找不到它,而是能够根据按钮上的文字和周围的上下文信息来识别它。例如,在测试一个电商网站的购物流程时,如果使用传统测试工具,当网站的商品详情页进行了改版,原本用于添加商品到购物车的按钮位置发生了改变,测试脚本就可能会出错。但如果使用 skyvern,它能够通过对网页的视觉理解,准确地找到新位置的添加购物车按钮,并顺利完成操作,大大提高了测试的稳定性和可靠性。

从增强 Dify 测试适应性角度来看,skyvern 使得 Dify 能够轻松应对各种不同类型和风格的网页。无论是简单的静态网页,还是复杂的动态网页,skyvern 都能够快速理解其结构和内容,准确地执行测试任务。而且,skyvern 还具备强大的跨网站通用性,同一个测试工作流可以直接应用于不同的网站,无需为每个网站单独定制测试脚本。这就像是一把万能钥匙,能够打开各种不同的锁。比如,在进行多平台电商应用的测试时,使用 skyvern 可以编写一套通用的测试工作流,用于测试不同电商平台的商品搜索、购买等功能,极大地提高了测试效率和覆盖面,降低了测试成本。

skyvern 还显著增强了 Dify 测试的准确性。它能够通过对网页元素的精准理解和分析,避免因元素定位不准确或操作不当而导致的测试错误。同时,skyvern 还具备智能推理能力,能够根据测试过程中的实际情况,自动调整操作策略,确保测试结果的准确性和可靠性。例如,在测试一个在线表单填写功能时,skyvern 可以根据表单字段的提示信息和用户输入的内容,智能地判断输入是否符合要求,并及时给出相应的提示和反馈,从而提高了测试的准确性和有效性。

我们可以先Centos环境下调试

# 测试登录

curl -X POST http://localhost:8000/run \ -H "Content-Type: application/json" \ -d '{"description":"打开 http://192.168.0.30/ceshi\n点击用户名输入框\n输入 admin\n点击密码输入框\n输入 admin123\n点击登录按钮\n等待3秒"}'

输出结果

若页面元素抓取不到

 调页面元素(可以不操作)

# 进入容器
docker exec -it skyvern bash

# 运行 Python 调试脚本
python3 << 'PYEOF'
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto('http://192.168.0.30/ceshi')
    
    print('=== 所有输入框 ===')
    inputs = page.locator('input').all()
    for i, inp in enumerate(inputs):
        input_type = inp.get_attribute('type')
        input_name = inp.get_attribute('name')
        input_placeholder = inp.get_attribute('placeholder')
        input_class = inp.get_attribute('class')
        print(str(i) + ': type=' + str(input_type) + ', name=' + str(input_name) + ', placeholder=' + str(input_placeholder) + ', class=' + str(input_class))
    
    print('\n=== 所有按钮 ===')
    buttons = page.locator('button').all()
    for i, btn in enumerate(buttons):
        btn_text = btn.text_content()
        btn_type = btn.get_attribute('type')
        print(str(i) + ': text=' + str(btn_text) + ', type=' + str(btn_type))
    
    browser.close()
PYEOF

exit

# 退出容器
exit

调整/opt/skyvern下 skyvern_server.py代码

第1步:登录 Dify

浏览器打开:http://192.168.0.18:8080

第2步:创建新工作流

  1. 点击 创建应用 → 工作流

  2. 命名为 "自动化登录"

📝 配置工作流节点

节点1:开始节点

点击开始节点,添加输入变量:

  • 变量名:test_description

  • 类型:文本

  • 标题:测试需求描述

节点2:HTTP 请求节点(调用 Skyvern)

点击 + 添加节点 → 选择 HTTP 请求

配置:

URL: http://localhost:8000/run

Method: POST

Headers:

  Content-Type: application/json

Body:

{
  "description": "打开 http://192.168.0.130/测试\n输入用户名 admin\n输入密码 admin123\n点击登录按钮\n等待3秒"
}

节点3:结束节点

点击 + → 结束

输出变量选择 HTTP 请求节点的 body

🎯 发布并测试

第1步:发布工作流

点击右上角 发布

第2步:运行测试

点运行

在测试需求描述中不要输入

点击 运行

运行结果

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐