收藏
回答

自动化一些问题

框架类型 问题类型 操作系统 工具版本
小程序 Bug macOS 1.02.2003121

问题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 个回答

  • RedHood
    RedHood
    2020-03-24

    问题1:nw 升级带来的问题,最新的 nightly 版本已经修复。

    问题2:miniProgram.close 关闭的是项目窗口,目前你可以通过调用命令行 cli close 将整个工具进程关闭。

    问题3:这里主要是工具的运行机制问题,将其改造成多窗口运行需要改造大量代码,目前尚无人力支持。现在自动化已经支持使用多帐号调试打开,可以同时打开多个项目窗口(需要登录多个开发帐号),暂时解决这类问题。

    问题4:这个实现需要底层框架支持,目前工具使用的 nw.js 无法做到,之所以不支持也是因为其底层使用的 chrome 开启无头模式时有一些限制条件。短期内应该是没法做到。

    2020-03-24
    有用 2
    回复
登录 后发表内容
问题标签