/wetest

Wetest is a no code E2E test

Primary LanguageTypeScriptMIT LicenseMIT

wetest

工具使用场景/边界

wetest当前能力致力于解决业务绝大部分基础场景的无代码自动化测试(80%场景),未来wetest将进一步深度开发,以达到90%以上的业务场景支持度

场景支持度

场景 支持度
表格场景 支持
表单场景 支持
多标签页 支持
静态页面 支持
画布场景 暂不支持

事件支持度

事件 支持度 未来计划
click 支持 -
auxclick 支持 -
hover 支持 -
input 支持 -
keydown 支持 -
dragAndDrop 暂不支持 下个迭代支持
dbclick 暂不支持 下个迭代支持

断言支持度

断言 支持度 未来计划
元素快照 支持 -
元素截图 支持 -
url断言 支持 -
全屏截图 支持 -
相反断言 暂不支持 下个迭代支持
文本断言 暂不支持 下个迭代支持

环境要求

  • node > 16.18.0

工具使用者准备工作(user)

npm i -g playwright
npm i -g @idux/wetest-cli

工具开发者准备工作(developer)

npm i -g pnpm

pnpm install

pnpm build

pnpm dev

cd packages/cli

pnpm link -g

开始(user and developer)

编写工具配置.wetest.js:

通过wetest init 命令生成wetest初始配置,配置说明如下:

wetest init
{
       recorder: {
        // selector相关的开放配置
        selector: {
            // 元素埋点标记,当不配置的该项的时候,使用wetest无埋点选择器
            buryingPoint: '',

            // 不作为选择器的class
            excludeClass: [],

            // 不作为选择器的包含以下修饰的class,例如xxxx_btn-hover
            excludeClassModify: /(-hover|active)/,

            // 不作为选择器的属性
            excludeAttr: /(id-.*)/,

            // 排除指定内容的id,例如id="id-xxx"的ID不会作为有效选择器
            excludeIdByVal: /(id-.*)/
        }
    },

    runner: {

        // 无头浏览器信息,可以增加firefox、webkit浏览器信息
        userAgent: {
            chromium: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
        },

        // 登录url,用来判断是否过期需要重登录
        loginUrl: 'https://github.com/login',

        // 不需要等待的请求,这列请求对业务没有影响,但对自动化执行可能会形成阻塞
        abortUrl: /(.*sentry_key.*|.*matomo.*)/
    }
}

.wetest.js放置在执行wetest命令根目录下,通过-c 参数指定位置

录制用例

输入启动录制命令:wetest record [pageURL] -o [caseDir] -c [.wetest.jsDir]

解释:为要打开的页面,caseDir为录制的用例存放目录

[pageURL] 需要打开进行录制的页面

-o [caseDir] 录制的用例输出存放目录

-c [.wetest.jsDir] 工具配置文件的存放位置,一般在命令执行根目录新建.wetest.js文件

录制命令其他参数:

-b [browser] 启动录制的浏览器,当前支持chrome、firefox、webkit

-c [.wetest.jsDir] 工具配置文件.wetest.js的存放位置

例子:wetest record https://github.com -o tests -c .wetest.js

自动回归用例:

输入启动录制命令:wetest run [caseDir] -c [.wetest.jsDir]

解释:

[caseDir]为录制的用例存放目录

-c [.wetest.jsDir] 工具配置文件的存放位置,一般在命令执行根目录新建.wetest.js文件

回放命令其他参数:

-hl [headless] 是否启动无头浏览器执行用例

-fb [fileGlob] flob语法筛选回放制定的目录用例

-ai [action-interval] 设置每个回放动作的间隔时间

例子:wetest run tests -c .wetest.js -hl

错误报告:

wetest执行完自动化用例后,会在__reporter__生成错误报告(单页web应用),需要在__reporter__下启动服务查看(可用http-server包启动服务) 报告包含了所有自动化用例的执行情况,包括:用例报告、错误报告、用例每一步的执行情况,强烈推荐使用报告中的快速定位错误功能

developer

如何调试

  • 对于wetest工具层面层面的调试,在开启pnpm dev后(当然是已经pnpm link -g过了),强烈推荐使用visual studio code中terminal的JavaScript Debug terminal断点调试
  • 对于自动化报告应用,是独立的Vue单页应用,按照Vue应用调试即可,需要注意的是,自动化报告应用在构建后会复制到@idux/wetest-wetest上,每次执行完用例后注入报告数据,所以如果报告应用要结合报告数据调试的话,目前只能执行完用例后在__reporter__上启动web服务查看,这点确实比较麻烦一些

项目结构介绍

cli

提供命令行工具,引用了engine的代码

engine

基于playwright二次封装,提供录制和回归的功能

│  assertor.ts // 断言器
│  browserManager.ts // 浏览器管理,管理page和context
│  caseManager.ts // 用例管理器
│  mockProxy.ts // 数据代理器
│  recorder.ts // 录制器
│  runner.ts // 回归器

inject

提供工具栏和事件监听等功能,engine通过playwright的api引入,在启动record时,注入inject代码,挂载工具栏和事件监听

ai-selector

元素选择器,用于定位操作的元素,执行无埋点生成选择器,当然有埋点更佳,维护性会更好一些

share

公共的东西

web

wetest报告源码