微信小程序自动化测试接入踩坑

269 阅读4分钟

什么是自动化测试?

测试是软件开发中不可缺少的阶段。为了提高测试效率,减少人力成本,提升测试覆盖率等,就有了自动化测试。

自动化测试是用工具和脚本模拟人为操作,自动执行测试用例。

miniprogram-automator

小程序项目很多功能已经上线并稳定使用了,后期迭代版本不会重新验证所有功能,为了避免老功能受影响,决定接入自动化SDK。小程序自动化 SDK 与 Selenium WebDriver 或者 Puppeteer的工作原理是类似的,主要区别在于控制对象由浏览器换成了小程序。

官方文档

接入步骤

1、微信开发工具--设置--安全设置,开启服务端口

2、npm i miniprogram-automator --save-dev (我用vscode,就在它终端输入命令安装)

3、在项目根目录创建文件夹(名字随意),新建spec.js后缀的文件

4、将文档的这个代码复制到index.spec.js

需要注意的是

  • cliPath: 如果微信开发者工具安装的时候,是默认安装,没有换安装位置,那它可以不填;如果像我一样换到了D盘,就填:D:/微信web开发者工具/cli.bat;

    如果是Mac ,找到微信小程序开发工具,右键显示包内容,进入Contents/MacOs/找到cli文件并将其选中,快捷键 :command+option+c复制路径,

  • projectPath:这个是项目的地址,这里我用process.cwd(),它是node方法,用户获取当前工作目录 第二三个框框,换成自己的页面,和页面存在的节点

5、执行脚本,开发工具就会自动重启,并打印输出结果

遇到的问题

接入过程中,遇到过这个报错:重启开发工具失败,确保http port已经开启

百度了一圈,可能的原因有

  1. 没有操作步骤一,开启服务端口
  2. 确认运行环境,基础库,开发工具版本符合要求
  3. projectPath地址不对
  4. 还有说要关闭开发工具
  5. 要用命令行打开项目

可能大家有遇到过同样的问题,是用上面5种办法解决的,但我最终的原因是

不要cd进去jest-demo文件夹执行,直接在根目录……

JEST

小程序自动化 SDK miniprogram-automator,可以在帮助我们在小程序中完成一些事情,比如:控制小程序跳转到指定页面,获取小程序页面数据,获取小程序页面元素状态等。但它本身不提供测试框架,需要配合测试框架来编写测试用例,实现小程序端自动化测试。这里用jest。

接入jest | 微信开放文档

jest官网

接入步骤

1、在vscode执行以下命令安装依赖

npm i miniprogram-automator jest
npm i jest -g

2、将文档的这段脚本拷贝到index.spec.js文件,projectPath等地址还是按上面说的改

3、这个时候运行是会报错

我们需要编写测试用例(先随便写一个,跑起来再完善)

it('desc', async () => {
  const desc = await page.$('.页面中有的类名')
  expect(desc.tagName).toBe('view')
})

4、vscode执行脚本开始自动化

jest index.spec.js

微信开发工具就会自动重启,并且自动跑用例

看到vscode 控制台输出以下消息PASS,说明用例测试通过

 PASS  ./index.spec.js (5.341s)
  index
    √ desc (18ms)
    √ list (14ms)
    √ list action (1274ms)
Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        6.378s
Ran all test suites matching /index.spec.js/i.

遇到的问题

1、

这个原因是因为,jest安装的时候没有指定版本,安装最新版的,我的nodejs版本比较旧,两者不匹配,升级nodejs或者指定安装较低版本jest都可以

2、

有时候工具启动耗时比较久,就会报超时,可以把beforeAll 时间调大一点

3、获取自定义组件内的元素比较麻烦

page.$() 和page.$$()只能获取页面元素,获取自定义组件中的元素时返回的都是undefind。可以用wxml()方法打印父节点的wxml结构,看看自定义组件中元素实际情况。

4、无法操作原生组件

工具的自动化测试

文档

开发工具可以支持录制用例,回放用例导出jest脚本。这个可能适用于测试录制操作步骤,直接发给开发,就可以不用当面复现了。

但是导出的jest脚本,不适合当成真实用例执行(比如页面的点击,它都是用x,y坐标表示)

而且,dispatchEvent这个方法提示不存在啊。文档也没有看到,这个谁知道可以告知一下

总结

自动化测试有它的突出优势,但是项目要覆盖也需要一定门槛。需要了解jest语法,ui界面改动的话用例也要相应修改。深入需要花一定时间