接口测试 请教下微信小程序的接口测试要怎么整啊?

清明雨上书 · 2021年03月03日 · 最后由 骑车溜达 回复于 2021年07月27日 · 9590 次阅读

目前的项目流程是这样的:(要实现小程序接口自动化)
1.获取到 code,就是下面这个,需要第三方 (微信小程序) 的调用,
这个是微信文档,获取 code 的:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
2.利用获取到的 code 调用微信接口服务获取到 session_key 和 openid
3.利用 2 中的数据获取登陆凭证 token,拿到 token 之后我自己都可以写
我不知道别人是咋样的,目前我这边的项目是这样的,
遇到的问题:
1/2/3 我都没法实现,通过 charles 抓包可以拿到小程序登陆后的 token,后面的流程没有问题,主要是想怎么去拿到登陆的 code,然后去换 session_key 和 openid,最后实现登陆,拿到 token,我目前项目 token 是有有效期的,比较短,想请教大家,这个要咋实现啊?
语言用的 python,不咋会 JS,尽量不用 java 实现,谢谢大家了,
另外实在不行,只能去求开发了能不能帮帮忙,我只是个小测试

最佳回复

https://testerhome.com/topics/28244
看这个帖子,用开发者工具去调用登录,注意登录开发者工具的 wx 账号得是小程序的开发者

共收到 28 条回复 时间 点赞

接口自动化从来都不是自己一个人独自干的。。肯定要找开发去协助开发的呀。

2楼 已删除

还是问问后端 请求参数是怎么规则,比如我遇到的就是 每次小程序登录接口的一个字段 参数都是有变化的,猜想应该是加了什么东西 再加密生成,但是这个问题我还没去解决,应为暂时要点点点

我认为小程序 也应该只关注服务的登录接口参数怎么构成的,所以建议问问后端这个怎么来的 再想办法构造或者其他的

针对小程序,python 应该是有对应的 sdk 和 API。你可以通过 API 来获取 code 和 session_key、openid。这个是临时凭证。

官方文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html

token 这个好像弄不了, 我都是每次手动去抓包😂

只是实现这个流程的话只需要进行一个响应信息的获取和二次使用就行了啊,requests+findall 就差不多可以实现啦,在加个 pytest 啥的框架就完事;流程就是:调接口,正则取所需值并赋值为变量,重复 3 次就完事啦,只是变量和接口不一致

逻辑上我知道要怎么做的,但是目前卡在了获得登录凭证 code 上,这个需要调用 wx.login(),这个是小程序的。然后在掉接口获取 session_key,最后采取获取 token,目前是这块搞不定,周末我去看看小程序开发相关的资料,看看能不能整出来

晓兮 回复

问过开发大佬了,木有时间,项目比较赶

回复

问过前端了,这个跟后端关系不大,主要是第三方的接口,前端说实现不了,不能在 python 中调用微信的小程序的 JS 代码,木有执行环境,但是我想应该是可以做的,估计时间上不划算吧,另外问过后端了,后端说 token 有效期 7 天,差不多时间够用了,先这样吧,等我研究下小程序开发了,看看能不能整出来

dive 回复

官网文档看不太明白,还是自己技术太差了

abc123 回复

是啊,主要是每次都抓包,这个真的难受了

那不清楚了,我这边接口看到每次获取 token 的接口传递的某个参数是加密过后的,且应该含了时间戳,每次该参数传递的值都不一样,当我那同样的参数去重新发请求 就不行了

在服务端使用透明代理 mock 微信接口返回数据

gocopper 回复

不能 mock,因为登陆之后的操作都是要正常操作小程序业务的,还是期待小程序能整合到里面去实现

回复

我这边不一样,抓包看,请求入参都一样,返回值只有状态码,第二个接口返回 session_Key 和 openid,第三个接口利用第二个接口的数据获取 token,最后所有的业务都用到这个 token 来实现登陆后的操作

不是很明白,既然你都能抓包取到数据了,为啥接口请求不行。是无法自己构造数据么?如果无法自己构造数据,你就用 mitmproxy 吧。这个抓的数据,python 可以直接用。

解决了,大佬记得分享下, 我当时和我们的开发 一起弄了很久没弄搞定, 后面就放弃了, 每次都手动抓到 token 然后再去跑接口😂

我也是登录解决不了,后来改用 UI 自动化了

wx.login() 应该是调用微信 app 通过 jsbridge 暴露的 Js 接口执行的,必须在微信 app 内调用,否则无法执行(类比一下,就是 python 自带 的 print 函数得在 python 环境下运行,你拿个 java 去跑这个函数会说无法执行的)。前端开发和你说的执行环境应该是指这个。

这个除非知道微信内部是怎么执行获得 code 的,否则绕不过。个人能想到的思路主要两个,仅供参考:

1、通过 UI 自动化之类的方式,在微信 app 里完成 wx.login 步骤,获得 code(可以搞个 alert 之类的弹窗弹出来)
2、服务端提供另一种登录入口(有点类似留个非小程序鉴权的后门,线上环境需要固定关闭这个入口),并生成自己内部的登录态且不与微信的信息关联。接口自动化从这个入口获得登录态,进行后面的业务逻辑调用。

大灰鸽 微信小程序接口自动化的实现方案 中提及了此贴 03月04日 13:25
abc123 回复

抓 token 太麻烦了,我现在 token 有效期 7 天,我准备写个定时任务,半个小时跑一下,不然 token 失效了

Bug_Hunter 回复

UI 自动化用的啥啊?后面肯定要整 UI 自动化的,虽然 UI 变化的比较多

陈恒捷 回复

第一种思路可行,后面有空了我尝试下,微信开发者工具不知道能不能行,第二种,我们开发不干,说没时间整,哎

https://testerhome.com/topics/28244
看这个帖子,用开发者工具去调用登录,注意登录开发者工具的 wx 账号得是小程序的开发者

墨妖 回复

太感谢了,终于是有个法子能实现了。谢谢你!

清明雨上书 关闭了讨论 03月05日 19:57
清明雨上书 重新开启了讨论 03月05日 19:57
墨妖 回复

怎么把你的回复设置为最佳回复啊?

我也不知道,不用了,反正是拿别人帖子回的你😂

帮你设置好了。

鼠标移到回复右上角的赞,会多出来几个图标,其中一个打钩的就是设置为最佳回复了。

楼主请问最终是如何实现的

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