Mock 最佳实践
1. 前言
传统架构下的银行、保险、证券等金融类客户,存在很多用于代付、转账等的第三方接口。而当第三方提供的测试环境不稳定时,此类客户的研发测试效率就会受到非常大的影响。本文将对如何通过使用阿里云云效-专有云版本的 Mock 产品来解决上述问题进行了介绍。
2. 最佳实践概述
在当今流行的互联网架构下,分布式服务的粒度非常细,互相之间也存在非常复杂的调用依赖。但这些服务又同时在并行开发和并行测试。因此,无法保证测试自己的服务时,自己依赖的服务均已准备就绪。此外,前后端分离开发的方法也是目前比较提倡的。所以,当后端代码尚未准备好,甚至接口尚未提供时,我们建议先做前端页面的逻辑。
【适用场景】
- 解耦服务端依赖,模拟尚未实现的服务端服务接口
- 模拟异常场景:模拟难以验证的异常场景,比如余额不足,风控禁止交易等
- 模拟昂贵的三方系统:如模拟人行的授信查询,降低测试代价
【流程示意】
- 新建 Mock 模拟接口服务返回所需结果
- 调用 Mock 服务
3. 前置条件
在执行本文操作前,请完成以下准备工作:
- 所在公司已购买并开通云效 Mock 产品模块。
- 已注册云效账号并完成认证,可以登录云效平台。
- 完成云效产品培训并通过相关考试。
- 加入云效的钉钉答疑群(联系本公司云效接口负责人入群)。
- 了解和分析所要模拟的业务逻辑,根据业务逻辑找出将要模拟的接口或服务。
- 了解调用方和服务提供方的调用方式以便选择合理的模拟方式。
- 了解和熟悉将要模拟的接口所采用的通信协议以及传输的报文内容,模拟的接口要与真实接口的通信协议以及数据格式一致。
4. 工具准备
- 本方案使用 Chrome 浏览器,需提前准备。
- 安装钉钉或企业微信。
5. 使用流程
【背景说明】:在一些电商类系统中,经常会调用第三方支付接口来完成支付业务,为测试各种支付异常场景,若使用真实系统,每种场景就必须使用一个真实账户,准备数据较为繁琐。但是,使用 Mock 就不再需要真实的支付账户,并且可以模拟各种异常场景。
下面来说明如何通过 Mock 平台根据入参中不同的账户返回不同的异常结果的场景,此示例采用 http 的通信协议,请求响应为 json 格式,账户的参数名为 buyer_id。
5.1 新建 Mock
【操作步骤】:点击新建 Mock按钮。
5.2 配置 Mock 模拟支付的各种异常场景
此处,以两个异常场景来为例进行说明:支付账号余额不足场景和支付账号被冻结场景。我们创建两个 Mock,一个场景对应一个 Mock。
- 使用账号 buyer_id=“2088102146225136” 返回用户银行卡余额不足
- 使用账号 buyer_id=“2088102146225135” 返回账号被冻结
- 接口地址:必须与真实地址一致(使用 gateway.95516.com)
匹配规则:调用该 Mock 时,入参中如果包含这里定义的规则(buyer_id==”特定账号”)就会返回在返回结果中定义的内容。因此:
- 余额不足的场景匹配规则为 buyer_id==“2088102146225136”
- 账号冻结场景为匹配规则为 buyer_id==“2088102146225135”
期望返回结果:定义异常的返回结果,保证 response 的格式与真实接口保持一致。
5.2.1 模拟用户银行卡余额不足的场景
5.2.2 模拟账号冻结的异常场景
5.3 使用 Mock
无需变动代码,只需配置测试环境的 Hosts 将所模拟的服务的地址指向云效的 Mock 平台。当我们在测试环境测试这些异常场景时,就会返回我们定义的返回结果。其中 IP 地址为云效 Mock 平台服务器的地址,而域名为所模拟的服务的域名。
为了展示 Mock 的使用过程,我们编写了一个模拟支付的过程 Web 应用,在 Web 页面中输入支付账号,点击支付按钮,Web 应用会调用支付服务,并将支付服务返回的支付结果直接显示在 Web 页面。
【操作步骤】:
- 首先,在测试环境中设置 Web 应用所在服务器的 Hosts 文件,将 Web 应用调用的底层支付服务域名指向 Mock 服务器:
- 然后,便可使用不同账号进行支付测试。 1)如果支付账号的值为 208810214622513,页面显示银行卡余额不足:
2)如果支付账号的值为 2088102146225135,页面显示账号被冻结:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论