接口测试 求助:接口自动化中第三方支付的如何实现?或者说绕过?

YXF · 2021年07月06日 · 最后由 fly9 回复于 2024年03月05日 · 5796 次阅读

公司搞的接口自动化,因为涉及到支付,之前一直是手工在 app 上下单,然后支付成功后拿到订单 id 去做后续的流程自动化。如果要把支付流程也自动化了需要怎么实现呢?想到 mock(其实 mock 也不是太了解),但是发现抓包根本抓不到支付的接口数据,技术比较匮乏,实在不知道该怎么搞了。论坛中这么多大佬,一定有好多搞过的,能指导一下么?技术小白,可能问的问题比较蠢,还请大佬们多多包涵

共收到 36 条回复 时间 点赞
陈恒捷 回复

😊 谢谢解惑,我说怎么 charles 抓不到,又用 androidstudio 试了下还是抓不到😅 这种是不是用 wareshark 可以抓到?

我们是开发把对接微信支付 mock 了,前端传参加上特定标识就行,会自动走到模拟支付流程,后续不变。

YXF #33 · 2021年07月06日 Author
陈恒捷 回复

意思这东西想要搞定必须得找开发配合了解系统交互是么?单单测试这边没有办法实现的?

YXF 回复

我指的是你的系统交互,不是用户交互。即你们的业务系统是怎么和第三方系统交互的,涉及哪些端、哪些接口等。

给你一个微信支付里的示例(只是微信支付提供的其中一种接入方式,具体你们怎么接入的,你还是问你们自己开发吧):

https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_5_2.shtml#part-5

PS:微信 app 和微信服务端交互走的是基于 tcp 长连接的自定义协议,普通 http proxy 这种抓包是抓不到的。

YXF #31 · 2021年07月06日 Author
陈恒捷 回复

我们系统比较复杂,一般交互都涉及五六个系统,开发喜欢互相踢皮球,很不好沟通,公司管理上和流程上都比较混乱。所以我都是尽量自己搞定,但是这个明显搞不定了😅

YXF 回复

你有能力直接看项目代码来了解交互也可以,但问开发效率更高,而且后面遇到阻碍也容易找开发协助处理(比如鉴权太复杂,模拟成本很高,让开发开个可以跳过鉴权的后门,成本会低很多)。

我理解这只是一个比较简单的合作而已,你们是有什么特殊情况,必须纯测试团队解决这个问题吗?

YXF 回复

那就爱莫能助了,和第三方支付的交互一般都不止一处的,不找开发确认清楚交互,比较难绕过。

或者可以试试用 UI 自动化来绕过呗。

YXF #29 · 2021年07月06日 Author
陈恒捷 回复

UI 的话就涉及到 APP 的 UI 自动化了,后期集成到 jenkins 上做持续集成 APP UI 自动化这块儿不好搞,还得借助移动端管理平台,目前这个有点长远了。真心感谢大佬的耐心解惑

这种在线上的话,就算找开发一般也不会同意因为比较危险。
还有微信支付可以通过接口直接调吗?不是加密了吗,每次都不同 sign 你怎么支付

这种只能走 mock,

  1. 先确认订单在哪一步生成,
  2. 确认支付结果 是你们系统去调用支付宝微信之类,还是他们会主动回调你们,
  3. 基于 2 的结果,如果是你们主动去调,那你就在自动化中订单生成后主动去调,结果 MOCK。被动,那也是同样在订单生成后,你去主动调你们的回调接口

微信支付宝之类一般是需要你们主动去调他们接口查询支付状态

微信支付宝都会回调的吧,不过正常业务系统也需要主动去轮询查询一下他们的支付状态。

yiwang 回复

这个不太清楚,所以写了需要自己去确认, 之前有对接过三方,人家比较叼 都是让咱自己去查,不主动回调

YXF #23 · 2021年07月07日 Author

我理解的 mock 就是一种模拟或者说伪造,比如接口 A 需要三个参数,返回一个订单 ID,我知道这三个参数分别叫什么名字,已经返回的订单 ID 格式,在这个基础上,如果接口 A 因为某些原因我们不能直接调用,这个时候我们可以借助一些 mock 工具或者服务去模拟接口 A 的入参和返回,以供依赖 A 的其他接口调用。不知道这样理解的对么?

YXF #22 · 2021年07月07日 Author
布吉岛 回复

是的呢,不光加密,客户端这边根本就抓不到包,一到支付哪儿就抓不到接口数据了😅

YXF 回复

差不多吧,就是想办法让系统正常流转起来,系统要什么给他什么就可以了,

我一般都自己写 mock 服务 开发加挡板 走到我这边的第三方 mock 服务 模拟数据

YXF #8 · 2021年07月09日 Author
Zoke 回复

不涉及公司机密或者安全准则,能给下示例代码么?😂 如果公司有严格的代码安全管理就算了

YXF 回复

这个理解没错。

主要是支付的交互不是简单的一个接口就搞定的事情,毕竟涉及安全 + 异步(一般支付背后涉及很多方,耗时很难确定,所以都是做成异步式交互的),所以需要先搞清楚你们系统的交互。要不找不到对应在哪里 mock 掉它。

另外,抓不到包应该不是因为加密,加密只会让你看不懂,不会抓不到(如果加密后会导致抓包工具抓不到,网络传输一样也会识别错误,因为协议本身定义的部分,怎么加密都是不能改的)。抓不到一般就是抓包方式和传输协议不一致了。

比如微信 app 支付这种方式,下图这个位置的交互,很可能就不是走 http(据我所知,微信 app 和微信服务端,走的都是 tcp ,正常微信发消息的通讯交互,你用基于 http proxy 抓包的工具,如 charles、fiddler ,也一样抓不到)。

我这个是自己写了一个支付 mock 的服务。开发多加一个渠道走我这里,不影响原流程

YXF 回复

wireshark 可以抓到,但抓到你也不一定能解析或者模拟。它用的可能是自定义协议,或者类似 proto buffer 这类没有协议解析工具没法正常解析的协议。

其实前面的同学已经给了几个可行的方案了,只是基本都绕不开开发的。推荐你还是找你们开发聊一下吧。

自己写个回调接口,然后让开发对接起来

兔子 回复

这个是理解第三方交互的逻辑下,开发一个极其类似的服务吗
比如调起支付 查询订单 验签三个完全模拟第三方

还是说可以忽略一部分,只要输入输出不影响自己的其它测试就行

订单的实体数据一般是持久化到业务侧数据库里面的,发起支付只是业务侧拿着自己订单标识到支付平台发起生成个支付交易单。。
所以,对一般的设计来说 在支付前订单 id 实体数据就落库了吧。。那么,仅是想要流转订单状态的话,或许修改业务侧订单库是不是来得快一些。。
当然,是想要验证支付链路是否能走通,那就还得要去 mock 了吧。。这样大概也不算是业务接口自动化该做的事了?

YXF #10 · 2021年07月09日 Author
恒温 回复

支付后,支付后会生成一个订单,现在自动化流程的起始就是得有这个订单和一些订单相关的信息,现在都是手动到 app 下单支付再进行后续的自动化。直接修改数据库数据这样的方式不让使用。

YXF #13 · 2021年07月08日 Author
兔子 回复

意思就是支付的时候多了类似于支付宝或者微信那样的支付选择是么?

你这个自动化中是为了测试支付吗?还是为了测试支付前和支付后?

我记得以前我们开发都是做了一个仿支付宝的模拟沙箱通道(即做了一个挡板),我们就可以在指定的沙箱支付通道做模拟支付操作

仅楼主可见

楼主解决了吗,求指导同样场景,即便 mock 单接口,但后续的流程不都是依赖这个接口的返回值去处理么,mock 的这个接口还需要什么处理,落库还是要后面的接口也都需要都 mock

同步楼主,问题解决了吗?

我们公司也是有个支付接口的自动话脚本,但不能说是全自动化,半自动化吧,就是下单后,要你去对应扫码支付,这个过程做不了自动化,支付后,订单的结果是以三方的结果为准,1 是主动查询获取三方订单支付状态 (这也算是保障措施吧),2 是三方回调我们给结果通知,主要支付流程就是这样,这个过程中下单之后支付这个动作能做到自动化吗,我也是没想明白这个怎么搞,目前都是人为去支付,进行后续的流程

我有个疑惑,mock 也只是 mock 你某个接口的功能预期,但不是真正三方返回的东西,那实际接入三方的时候怎么能保证没问题呢 因为你 mock 返回的信息和三方肯定还是有差别的吧

能否先说下你第三方支付接的哪个?大概是怎么和你们自己系统交互的?

不同第三方支付这方面还是有差异的,有的是服务端纯 api 对接,有的是内嵌 h5 界面 + 服务端回调,有的是 app sdk 接入。不同接入方式,对应的自动化方案差异还是挺大的。

这块问下你们开发应该会知道,先把交互理出来,才好说怎么自动化。

我们可以做到支付宝/微信支付流程真正的自动化,需要的话可以联系我,邮箱:lijiahe9000@163.com

YXF #35 · 2021年07月06日 Author
陈恒捷 回复

感谢大佬的回复,交互是这样的

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