问题1:当ide中已经有项目处于打开状态,运行自动化脚本的 launch 失败
打开状态的图
运行启动脚本
const automator = require('miniprogram-automator')
describe('index', () => {
let miniProgram
let page
beforeAll(async () => {
miniProgram = await automator.launch({
projectPath: 'path/to/miniprogram-demo'
})
page = await miniProgram.reLaunch('/page/component/index')
await page.waitFor(500)
}, 30000)
afterAll(async () => {
await miniProgram.close()
})
})
启动脚本 automator.launch实际是调用 cli auto ,这个脚本在项目打开的情况下运行结果是直接关闭项目,没有任何报错,也不重新打开,这个bug比较严重了,每次执行测试脚本,还要手动关闭所有打开的项目,耗费心智啊。
问题二:运行miniProgram.close虽然会关闭运行的项目,但 cli auto进程会一直常驻,这个么消耗资源你们(写automator的,写cli的那些人)的良心不会痛吗
以图为证,运行几次launch就常驻几个进程
问题三:官方文档推荐使用jest,却没有明确指出 不支持并行测试
jest默认是多workers并行测试,对多个spec文件独立运行时环境,互不干扰,且spec文件的执行顺序随机,然而小程序自动化测试严重依赖IDE环境的运行时实例,必须要launch好实例才能测试UI,也就是说jest要去的各个测试单元隔离,并强行的耦合到一起了,因此,如果你写了多个spec(1个page1个spec不过分吧,大家都是写程序的,模块化思想应该具备),每个spec中获取page实例 page = await miniProgram.reLaunch('/page/path'),想测试不同page,然后最终得到是一个page实例,且是随机的,因为你根本不知道哪个会最后一个执行。这里哪个不应该是launch多个miniprogram实例,每个实例launch自己的page,互不干扰。(目前的状态性能肯定受不了,见问题四)
如果想测试多个page怎么办呢?有两个方案,1.关闭并行 maxWorkers: "1"(手动阉割性能) 。2、把所有的测试用例写到一个文件中(这是程序员该干的事吗?)。此时此刻我需要再问一句,这么阉割jest的性能,这么编写测试文件你们(推荐用jest,却不明确指出缺陷的人)的良心不会痛吗
问题四:自动化测试过分依赖IDE的界面,这个大概不算问题,但这肯定会影响测试的性能,渲染UI要消耗资源的呀,小程序IDE消耗多大的资源你们心里没点数吗?就不能搞个像无头浏览器那样,在后台运行吗?测试用例跑起来也不用人机交互,也不用人为干预,更不用人瞪着屏幕看UI变化的对不对,要UI界面干什么呢?
问题1:nw 升级带来的问题,最新的 nightly 版本已经修复。
问题2:miniProgram.close 关闭的是项目窗口,目前你可以通过调用命令行 cli close 将整个工具进程关闭。
问题3:这里主要是工具的运行机制问题,将其改造成多窗口运行需要改造大量代码,目前尚无人力支持。现在自动化已经支持使用多帐号调试打开,可以同时打开多个项目窗口(需要登录多个开发帐号),暂时解决这类问题。
问题4:这个实现需要底层框架支持,目前工具使用的 nw.js 无法做到,之所以不支持也是因为其底层使用的 chrome 开启无头模式时有一些限制条件。短期内应该是没法做到。