公司搞的接口自动化,因为涉及到支付,之前一直是手工在 app 上下单,然后支付成功后拿到订单 id 去做后续的流程自动化。如果要把支付流程也自动化了需要怎么实现呢?想到 mock(其实 mock 也不是太了解),但是发现抓包根本抓不到支付的接口数据,技术比较匮乏,实在不知道该怎么搞了。论坛中这么多大佬,一定有好多搞过的,能指导一下么?技术小白,可能问的问题比较蠢,还请大佬们多多包涵
能否先说下你第三方支付接的哪个?大概是怎么和你们自己系统交互的?
不同第三方支付这方面还是有差异的,有的是服务端纯 api 对接,有的是内嵌 h5 界面 + 服务端回调,有的是 app sdk 接入。不同接入方式,对应的自动化方案差异还是挺大的。
这块问下你们开发应该会知道,先把交互理出来,才好说怎么自动化。
我指的是你的系统交互,不是用户交互。即你们的业务系统是怎么和第三方系统交互的,涉及哪些端、哪些接口等。
给你一个微信支付里的示例(只是微信支付提供的其中一种接入方式,具体你们怎么接入的,你还是问你们自己开发吧):
https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_5_2.shtml#part-5
PS:微信 app 和微信服务端交互走的是基于 tcp 长连接的自定义协议,普通 http proxy 这种抓包是抓不到的。
你有能力直接看项目代码来了解交互也可以,但问开发效率更高,而且后面遇到阻碍也容易找开发协助处理(比如鉴权太复杂,模拟成本很高,让开发开个可以跳过鉴权的后门,成本会低很多)。
我理解这只是一个比较简单的合作而已,你们是有什么特殊情况,必须纯测试团队解决这个问题吗?
我们系统比较复杂,一般交互都涉及五六个系统,开发喜欢互相踢皮球,很不好沟通,公司管理上和流程上都比较混乱。所以我都是尽量自己搞定,但是这个明显搞不定了
UI 的话就涉及到 APP 的 UI 自动化了,后期集成到 jenkins 上做持续集成 APP UI 自动化这块儿不好搞,还得借助移动端管理平台,目前这个有点长远了。真心感谢大佬的耐心解惑
我们是开发把对接微信支付 mock 了,前端传参加上特定标识就行,会自动走到模拟支付流程,后续不变。
这种在线上的话,就算找开发一般也不会同意因为比较危险。
还有微信支付可以通过接口直接调吗?不是加密了吗,每次都不同 sign 你怎么支付
这种只能走 mock,
微信支付宝之类一般是需要你们主动去调他们接口查询支付状态
我理解的 mock 就是一种模拟或者说伪造,比如接口 A 需要三个参数,返回一个订单 ID,我知道这三个参数分别叫什么名字,已经返回的订单 ID 格式,在这个基础上,如果接口 A 因为某些原因我们不能直接调用,这个时候我们可以借助一些 mock 工具或者服务去模拟接口 A 的入参和返回,以供依赖 A 的其他接口调用。不知道这样理解的对么?
这个理解没错。
主要是支付的交互不是简单的一个接口就搞定的事情,毕竟涉及安全 + 异步(一般支付背后涉及很多方,耗时很难确定,所以都是做成异步式交互的),所以需要先搞清楚你们系统的交互。要不找不到对应在哪里 mock 掉它。
另外,抓不到包应该不是因为加密,加密只会让你看不懂,不会抓不到(如果加密后会导致抓包工具抓不到,网络传输一样也会识别错误,因为协议本身定义的部分,怎么加密都是不能改的)。抓不到一般就是抓包方式和传输协议不一致了。
比如微信 app 支付这种方式,下图这个位置的交互,很可能就不是走 http(据我所知,微信 app 和微信服务端,走的都是 tcp ,正常微信发消息的通讯交互,你用基于 http proxy 抓包的工具,如 charles、fiddler ,也一样抓不到)。
谢谢解惑,我说怎么 charles 抓不到,又用 androidstudio 试了下还是抓不到 这种是不是用 wareshark 可以抓到?
我这个是自己写了一个支付 mock 的服务。开发多加一个渠道走我这里,不影响原流程
wireshark 可以抓到,但抓到你也不一定能解析或者模拟。它用的可能是自定义协议,或者类似 proto buffer 这类没有协议解析工具没法正常解析的协议。
其实前面的同学已经给了几个可行的方案了,只是基本都绕不开开发的。推荐你还是找你们开发聊一下吧。
这个是理解第三方交互的逻辑下,开发一个极其类似的服务吗
比如调起支付 查询订单 验签三个完全模拟第三方
还是说可以忽略一部分,只要输入输出不影响自己的其它测试就行
订单的实体数据一般是持久化到业务侧数据库里面的,发起支付只是业务侧拿着自己订单标识到支付平台发起生成个支付交易单。。
所以,对一般的设计来说 在支付前订单 id 实体数据就落库了吧。。那么,仅是想要流转订单状态的话,或许修改业务侧订单库是不是来得快一些。。
当然,是想要验证支付链路是否能走通,那就还得要去 mock 了吧。。这样大概也不算是业务接口自动化该做的事了?
自己写个回调接口,然后让开发对接起来
@YXF 对的
你这个自动化中是为了测试支付吗?还是为了测试支付前和支付后?
支付后,支付后会生成一个订单,现在自动化流程的起始就是得有这个订单和一些订单相关的信息,现在都是手动到 app 下单支付再进行后续的自动化。直接修改数据库数据这样的方式不让使用。
我一般都自己写 mock 服务 开发加挡板 走到我这边的第三方 mock 服务 模拟数据
我记得以前我们开发都是做了一个仿支付宝的模拟沙箱通道(即做了一个挡板),我们就可以在指定的沙箱支付通道做模拟支付操作
楼主解决了吗,求指导同样场景,即便 mock 单接口,但后续的流程不都是依赖这个接口的返回值去处理么,mock 的这个接口还需要什么处理,落库还是要后面的接口也都需要都 mock
同步楼主,问题解决了吗?
我有个疑惑,mock 也只是 mock 你某个接口的功能预期,但不是真正三方返回的东西,那实际接入三方的时候怎么能保证没问题呢 因为你 mock 返回的信息和三方肯定还是有差别的吧
我们公司也是有个支付接口的自动话脚本,但不能说是全自动化,半自动化吧,就是下单后,要你去对应扫码支付,这个过程做不了自动化,支付后,订单的结果是以三方的结果为准,1 是主动查询获取三方订单支付状态 (这也算是保障措施吧),2 是三方回调我们给结果通知,主要支付流程就是这样,这个过程中下单之后支付这个动作能做到自动化吗,我也是没想明白这个怎么搞,目前都是人为去支付,进行后续的流程
我们可以做到支付宝/微信支付流程真正的自动化,需要的话可以联系我,邮箱:lijiahe9000@163.com