使用python+Midscene.js AI驱动打造企业级WEB自动化解决方案

前言

之前我们讲过Midscene,js工具的基本搭建过程和使用方式,但是离落地企业级的自动化方案还差得远,顶多是个开胃菜,让大家先初步了解这个工具,颠覆以前对传统selenium等工具需要元素定位方式实现WEB自动化的认知,让我们积极拥抱AI,探索AI。

背景

做过WEB自动化的都清楚一个事实,基于selenium等传统工具实现WEB自动化,有以下三个主要的缺点:

1 学习成本高 ,对测试人员要求较高,需要懂html,懂python或者java,懂

pytest/RobotFramework/testng等框架。

2.开发效率低,需要花费大量的时间找元素,写Xpath,编写用例和调试用例。

3.维护工作量大,后期一旦版本有大的变动,之前好不容易写好的的代码都可能推倒重来。

而Midscene.js工具是基于纯视觉模式,只需要通过自然语言描述,工具通过跟AI大模型的交互就能完成用例的执行过程并返回可视化的html报告,让测试人员更简单更直观的进行WEB自动化测试。

不过要想使用好Midscene.js工具,得先知道工具的2个缺点:

  1. 工具需要跟大模型交互,耗费很多的tokens(需要money)。

  2. 工具基于纯视觉,不停的截图跟大模型交互,运行时间上会较长(需要时间)

总结:想用Midscene.js AI工具,得接受时间和金钱的高成本。

该工具特别适合内部已经搭建好大模型的公司,或者不差钱的公司,或者节省人力成本增加tokens成本的公司,或者只是想尝试探索新技术的公司等等。

企业级落地方案

因为Midscene.js工具本身并不具备通用化,简单化和工程化的能力,而且该工具使用的js语言对于很多测试人员来说有些陌生,很难让测试人员尤其是无编码能力的人员方便使用。

因此想尝试一种能像写http接口一样简单的方式,以下实践已经在内部项目上运行,分享出来供大家参考。

1 思路

在windows server机器上通过python语言将midscene.js工具封装为http通用api接口。这样不管是python/java,或者公司内部的自动化平台等都能很好的进行http的调用。

http接口支持解析传参并提取json(json格式严格按照midscene.js工具支持的yaml内容格式)后,转为yaml文件存储,然后调用midscene工具执行yaml文件,然后实时获取运行日志,通过正则提取html报告和结果信息,并组装html报告的get请求地址等内容返回。

2 环境搭建

1、windows 安装 midscene.js 工具

1)安装 node.js

2)安装 midscene.js

打开 cmd 命令窗口,执行如下命令:

复制代码
#配置国内nmp源或者公司内部的npm源   以阿里云举例
npm config set registry https://registry.npmmirror.com

#配置不安装google浏览器(如果在内网安装可能导致下载报错,如果上网无限制可以跳过该步骤)
set PUPPETEER_SKIP_DOWNLOAD=true

#安装midscene.js最新版本
npm install -g @midscene/cli

#检查midscene.js的版本(如果有版本信息就安装成功了)
midscene --version
1.6.0

2、配置大模型和谷歌浏览器程序路径的环境变量

打开我的电脑的环境变量配置页面,将如下配置到环境变量:

复制代码
#大模型信息
MIDSCENE_MODEL_BASE_URL=大模型http地址
MIDSCENE_MODEL_API_KEY=你的APIKEY
MIDSCENE_MODEL_NAME=doubao-seed-20-pro  #以豆包举例
MIDSCENE_MODEL_FAMILY=doubao-vision     #以豆包举例

#谷歌浏览器的程序地址,midscene.js执行时使用(如果上面步骤安装了谷歌浏览器,该步骤跳过)
PUPPETEER_EXECUTABLE_PATH=C:\Users\appadmin\AppData\Local\Google\Chrome\Application\chrome.exe  #你自己的谷歌浏览器地址

#配置跟模型交互的最大次数(默认是20次)
MIDSCENE_REPLANNING_CYCLE_LIMIT=100

3、使用midscene.js工具执行yaml文件的方式,完成一个web自动化的示例

yaml 文件示例:

复制代码
web:
url: https://www.baidu.com

tasks:
  - name: 搜索天气
flow:
      - ai: 搜索 "今日天气",点击"百度一下"
      - sleep: 3000
      - aiAssert: 搜索后结果显示天气信息

打开cmd,执行命令:midscene yaml文件。



4、python封装midscene.js工具,支持通用的http接口调用能力

通过 python的Flask封装http接口,具备2个能力:

  1. 通过post请求,解析传参中的用例名称和yaml所需的测试步骤,然后后台调用midscene.js 工具执行yaml文件,解析日志,生成测试结果和报告。将测试结果以 json 数据格式返回。

  2. 通过get请求获取html报告。


a、http接口用于执行用例

caseName:用例名称,会生成以它命名的 yaml 文件和 html 报告

Steps:yaml 文件格式内容,为json格式数据

举例:

{'caseName':'百度搜索天气','Steps':{'web': {'url': 'https://www.baidu.com'}, 'tasks': {'name': '搜索天气', 'flow': \[{'ai': '搜索 "今日天气",点击"百度一下"'}, {'sleep': 3000}, {'aiAssert': '搜索后结果显示天气信息'}}]}}

响应json数据

返回字段说明:code:1 代表成功,0 代表失败;output:工具的一些输出信息;report:html 报告的http请求地址,可访问和下载。

举例(返回数据)

复制代码
{
"code": 0,
"output": "查看截图左侧菜单栏,能够看到「人员管理」选项处于选中状态,是明确展示在左侧菜单栏的,因此"在左侧菜单栏不应该展示用户管理"的表述不成立,对应布尔值为false。",
"report": "http://127.0.0.1:5000/execute/htmlreport/登录web成功_1775184223.588202.html"
}

b.通过 get 请求可以获取到 html 报告的内容
  • 接口方式:HttpGet 请求
  • 功能:访问 report 字段中的地址,直接返回 HTML 报告的完整内容
  • 特点:支持在浏览器打开、下载报告,可视化查看执行步骤、截图、断言结果等

5 搭建后台flask工程

工程结构如下:

python文件结构

FlaskHttpServer.py:Flask主程序,负责路由与接口调用。

ExecuteCase.py:执行用例,生成yaml文件并执行,然后提取html报告并返回数据。

logUtil.py:日志存储管理。

用到的python包:

flask/waitress/loguru/yaml (需要安装),其他如subprocess/os/shutil/re/datetime/json等

6 Flak程序运行后,就可以通过http接口调用

以python的requests工具调用举例:

希望能给大家带来一些经验,感兴趣的请点赞收藏加关注。

有需要部署代码的的可以私信联系。

相关推荐
金虹桥程序员几秒前
【动画】 📚 CSS 动画与 GPU 合成层优化全链路指南
前端·面试
wuhuhuan3 分钟前
Case Generator 平台升级
python·测试工具·自动化
程序员老赵4 分钟前
Docker 部署填鸭表单完整教程:搭建私有化问卷与表单收集平台
前端·docker·开源
RobinDevNotes6 分钟前
用 Profile 揪出大模型训练性能瓶颈
python·性能优化
李航198313 分钟前
用 DeepDraw 几何引擎开发建筑设计软件(六):创建画线工具
python·软件构建
AI 编程助手GPT13 分钟前
Python 备份 SQLite:为什么复制了 .db,恢复后还是少数据?
人工智能·python·ai·chatgpt
无限压榨切图仔20 分钟前
向量库能搜到内容,为什么还不算学会 RAG
前端·agent
mmsx20 分钟前
MapLibre 实战 11|用户说"我的地块丢了":一个 sealed class 图层模型,和四个让我重构三版的坑
android·前端·开源
xqchen23 分钟前
代码差异可视化方案选型:diff2html 实战指南
前端
名字还没想好☜24 分钟前
用 Zustand 做 React 全局状态管理:告别 Context 重渲染,3 个实战模式与持久化
前端