Midscene.js的AI 驱动的WEB自动化测试--太惊艳了
自从在公司内部搭建好Midscene.js的AI自动化测试环境后,我们的WEB自动化已经大部分开始定定时让AI自动执行用例了,真实太惊艳了,完全超乎想象。
新手还不熟悉Midscene.js,请跳转学习:
Midscene.js - AI驱动,带来全新UI自动化体验(安装配置篇)
豆包Midscene.js-AI驱动,通过Chrome插件快速体验AI操作网页
使用python+Midscene.js AI驱动打造企业级WEB自动化解决方案
测试人员工作量简单到只有2步:
1)测试人员不写代码,不定位元素,只需要写符合Midscene.js框架的测试步骤(手工测试怎么做,自动化测试就怎么写)。
2)测试人员在自动化平台上输入上述测试步骤,平台会自动调用封装好的http执行接口,将测试步骤json数据转为yaml文件,然后执行用例,测试人员只需要等待检查html测试报告。
从此以后WEB的自动化测试就是这么简单。
那为什么我要死磕yaml文件的Midscene.js的AI自动化测试呢?
主要基于以下3个原因:
1)我们公司主要依靠外包测试人员,他们的代码能力偏弱,需要让他们尽量简单的使用合适的工具做测试,在Midscene.js框架下执行yaml是最简单的方式。
2)我们公司内部搭建了豆包、千问等支持图片视频的多模态大模型,token使用不受限制,无成本压力。
3)测试交付压力大,活多人少,只能想办法节省时间,提升效率。
Midscene.js使用过程也踩过一些坑
1、执行时间比传统时间慢
官网上讲提升效率的方法:
有几种方法可以提高运行效率:
- 使用即时操作接口,如 agent.aiTap('Login Button') 代替 agent.ai('Click Login Button')。
- 尽量使用较低的分辨率,降低输入token成本。
- 更换更快的模型服务。
- 使用缓存来加速调试过程。

尝试下来最有效的是采用缓存功能,在yaml的agent参数中增加cache参数,如下
配置方式:cache: { id: "my-cache-id" } 或 cache: { strategy: "read-write", id: "my-cache-id" }
strategy的默认值是read-write,这样在yaml执行时自动读取已有缓存,执行过程中自动更新缓存文件。
以下是官网的一些介绍:

strategy还有其他一些模式,比如只读(read-only),只写(write-only),一般都使用读写模式(read-write)
举例:使用cache模式前后的执行时间,以在百度搜索天气这条用例为例,yaml文件:
tasks:
- name: 查询百度天气
flow:
- ai: 在百度输入框输入天气
- aiTap: 点击百度一下按钮
- sleep: 2000
- aiAssert: 搜索成功,出现天气数据
web:
url: https://www.baidu.com
waitForNetworkIdle:
timeout: 0
agent:
cache:
id: baidu-cache-test
strategy: read-write
首次执行耗时73s:

第二次命中cache耗时16s:html报告中命中cache时会显示如下Cache字样,后面的时间也是极大减少,基本都在1s以下,减少了跟大模型的交互,也就极大降低了token使用。

2、如果跟大模型交互次数过多,工具会报错(默认时20次)
解决: 配置环境变量
MIDSCENE_REPLANNING_CYCLE_LIMIT=100次 或者更大

3、执行失败重试次数配置
1. action执行重试
- 配置: execution.maxRetries
- 默认:5
- 场景:元素没找到、点击失败、超时等操作层面错误
更新环境变量:设置重试次数
# Linux/Mac
export MIDSCENE_EXECUTION_MAX_RETRIES=2
# Windows cmd
set MIDSCENE_EXECUTION_MAX_RETRIES=2
2. AI 模型调用重试
- 环境变量:
MIDSCENE_MODEL_RETRY_COUNT
- 默认:1
- 场景:AI 接口超时、429、网络错误等
4. network idle超时问题
midscene执行时默认采用Puppeteer引擎,该方式有network idle空闲检查,当网络不空闲时,执行日志会报错,并占用不少时间。
Waiting for the "network idle" has timed out, but Midscene will continue execution. Please check https://midscenejs.com/faq.html#customize-the-network-timeout for more information
Waiting for the "network idle" has timed out, but Midscene will continue execution. Please check https://midscenejs.com/faq.html#customize-the-network-timeout for more information
Waiting for the "network idle" has timed out, but Midscene will continue execution. Please check https://midscenejs.com/faq.html#customize-the-network-timeout for more information
在yaml中web部分有参数控制,
web:
# Puppeteer 模式下等待网络空闲的策略,可选
# `timeout` 会作用于初始打开 YAML 中的 `web.url`,以及后续 `aiTap`、`aiInput` 等操作后的等待
# `continueOnNetworkIdleError` 只作用于初始打开 YAML 中的 `web.url`
waitForNetworkIdle:
# 每次网络空闲等待的超时时间,可选,默认 2000ms
timeout: <ms>
# 初始打开 YAML 中的 `web.url` 时,如果网络空闲等待超时,是否继续执行,可选,默认 true
# 后续脚本执行中的等待即使超时也总是继续执行
continueOnNetworkIdleError: <boolean>
直接在web参数中,将idle等待关掉:配置timeout为0
web:
url: https://www.baidu.com
waitForNetworkIdle:
timeout: 0
欢迎大家交流,喜欢的不要忘了点赞收藏关注。



259

被折叠的 条评论
为什么被折叠?



