python AI自动化:为啥死磕Midscene.js的yaml执行方法?

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、执行时间比传统时间慢

官网上讲提升效率的方法:

有几种方法可以提高运行效率:

  1. 使用即时操作接口,如 agent.aiTap('Login Button') 代替 agent.ai('Click Login Button')。
  2. 尽量使用较低的分辨率,降低输入token成本。
  3. 更换更快的模型服务。
  4. 使用缓存来加速调试过程。

尝试下来最有效的是采用缓存功能,在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

欢迎大家交流,喜欢的不要忘了点赞收藏关注。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科雷learning

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值