接口测试 微信小程序接口自动化的实现方案

大灰鸽 · 2021年03月04日 · 最后由 awhite 回复于 2024年04月16日 · 18683 次阅读
本帖已被设为精华帖!

背景

前几天在社区看到有人问微信小程序怎么进行接口自动化https://testerhome.com/topics/28217,所以想把自己如何进行微信小程序接口自动化的方法分享下。

微信小程序接口自动化的问题

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html这是微信小程序的登陆流程,小程序登陆需要在小程序内部调用 wx.login() 的方法拿到 code,然后去请求服务获取到 token,后续的接口才能请求。所以接口自动化的问题在于如何获取 code 去进行去获取 token。

环境准备

  1. 一台 windows 或者 mac 电脑
  2. 微信开发者工具
  3. 一个微信号以及小程序开发者权限
  4. 小程序的代码

原理

  • Python 使用minium,JS 使用miniprogram-automator,这是微信官方提供的 UI 自动化测试的工具,它们的原理都是调起微信开发者工具,然后会对外提供了一个自动化测试的端口,然后它们的 API 应该都是和这个端口进行通信。
  • 我是用的 miniprogram-automator,以下都是以 miniprogram-automator 进行说明,然后就可以使用 miniProgram.callWxMethod 的方法调用 wx.login() 这个方法获取到 code,这就是获取 code 的方法

实现

  • 我是写了一个服务,对外暴露了一个接口,http://127.0.0.1:3000/wxlogin?appid=xxxxxxxxxxxx, 该接口需要传一个参数是小程序的 appid,然后有一个 config.js 去配置 appid 和小程序的绝对项目路径(注意:一个小程序获取的 code 是无法在另一个小程序去进行登陆的,code 应该是和 appid 是有关联的)
  • 通过该 appid 找到小程序项目路径,调用 automator.launch() 方法,启动微信开发者工具,然后调用 miniProgram.callWxMethod() 去调用 wx.login() 这个方法获取到 code,最后把 code 从我提供的接口返回
  • 每个小程序要请求任意接口时候都需要先调用我提供的接口获取 code 登陆后再进行后续的请求操作

注意点

  • 不要并发请求自己提供的接口!不要并发请求自己提供的接口!不要并发请求自己提供的接口!因为这个方案是需要调起微信开发者工具,所以如果并发调起的话,会把微信开发者工具搞奔溃,我一开始就是 10 多个小程序同时调用自己的接口,然后把微信开发者工具弄崩了,所以关于微信小程序的接口用例我都是串行请求的
  • http://127.0.0.1:3000/wxlogin?appid=xxxxxxxxxxxx 这个接口因为需要调用微信开发者工具,然后再获取 code,所以响应速度会比较慢
  • 微信开发者工具需要提前登陆
  • 无法在 linux 部署,因为微信开发者工具没有 linux 版本

总结

该方法已经在公司落地,并且已实现了 10 多个微信小程序的生产巡检工作。维护工作就是需要注意微信开发者工具的账号需要保持登陆,如果自动退出了,就扫码登陆下就可以。

共收到 20 条回复 时间 点赞

顺藤摸瓜摸过来的,谢谢分享。俺去试下先

你好,有打算换工作没?

秋风劲 回复

就很强

写的挺好的,我也是折腾了这个小程序登录蛮久了

学习了,感谢,有机会试试

这贴不错!推荐精华!

陈恒捷 将本帖设为了精华贴 03月04日 23:07

此方法使用过,实际还是非常麻烦,需要打开微信开发者工具,不能完全自动化,这个不能忍,最好的方法,就是让开发提供接口,用 openid 去换 token,实现全自动化

金主 回复

微信开发者工具是通过调用我接口,然后我使用 automator.launch() 去自动打开的,不需要手动打开

金主 回复

但通过用 openid 去换 token 确实是个不错的方法,这样支付宝小程序也可以实现,学习了

大灰鸽 回复

除了打开微信开发者工具之外,登陆微信账号也麻烦,完了我记得还要授权 (搞的早了,记不大清),我的想法是,能省个步骤就省个步骤,怎么快捷方便怎么来

墨妖 请教下微信小程序的接口测试要怎么整啊? 中提及了此贴 03月05日 17:02

哇塞,实在是太感谢了!一会去试试

minium 在前年使用过,不知道现在迭代怎么样了,不过使用下来发现,调用微信开发者工具的过程还是蛮慢的,可能是我公司的电脑太卡了。另外 8 楼的建议很好,目前我们也是做了类似的,直接绕过微信换 code 这一步。我们的做法是直接把 C 端生成的 token 改失效时间,改成很大的一个值。8 楼的也是个好的选择,但我们公司考虑安全方面的东西,最终没用这种方式

亲测有效,楼主棒棒哒

接口测试工具的话可以试试国产的接口测试工具 apipost,使用起来很方便简介,不需要安装环境,全中文使用起来方便。下载地址:https://www.apipost.cnwww.apipost.cn

现在是不是不行,我看调启动微信工具必须要传小程序代码路径,打开微信工具后自动进到了项目里面,这个时候获取的 code 是已经使用过的呀,不能在单独使用

你搞出来了吗

这个不能在服务器上跑啊
服务器上怎么实现

楼主棒棒哒 有效

兔子🐰 [该话题已被删除] 中提及了此贴 02月18日 16:23

老哥 使用 python 加 Minium 的话怎么实现这一套😨

xxxaaazcc 回复

同想知道,请问整出来了吗

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册