提交响应后无法转发_测试工具链——AnyProxy请求代理转发构建Mock服务的设计策略(二)...

c5d49146789850ab3acf12b46ba20cc5.png

在上一篇文章《AnyProxy搭建HTTP(S)代理服务器构建Mock服务》中主要介绍了AnyProxy部署方法和基本的启动方式,本文主要介绍通过AnyProxy的自定义规则实现Mock服务构建的整体设计及示例分享。

AnyProxy的主要变化

AnyProxy4.0与3.x版本相比,其中最主要的改变是规则文件内的接口优化,在使用时需要注意版本,其他变化还包含:

  • 规则文件全面支持Promise和Generator
  • Web版界面重构

本文主要基于最新版本——AnyProxy4.0进行介绍,官网地址如下:

https://github.com/alibaba/anyproxy

AnyProxy4.0主要规则模块

summary

summary(): string | summary:string

规则模块的介绍描述,用于AnyProxy提示用户, 可以是函数,也可以是字符串。

beforeSendRequest

beforeSendRequest(requestDetail)

AnyProxy向服务端发送请求前,调用beforeSendRequest,进行请求参数内容修改或直接返回本地响应内容(不再继续请求流程)。

beforeSendResponse

beforeSendResponse(requestDetail, responseDetail)

AnyProxy向客户端发送请求前,调用beforeSendResponse,进行返回状态码、返回内容的修改。

beforeDealHttpsRequest

beforeDealHttpsRequest(requestDetail)

AnyProxy收到https请求时,调用beforeDealHttpsRequest,如果配置了全局解析https的参数,则AnyProxy会略过这个调用。同时只有返回true时,AnyProxy才会尝试替换证书,解析https请求,否则只做数据流转发,无法看到明文数据。

对于我们的Mock服务构建而言,AnyProxy的主要作用体现在接管某个API的响应,进行数据mock,因此主要使用beforeSendRequest规则模块


AnyProxy代理转发请求处理流程

AnyProxy代理转发请求处理流程如下:

2fc37de284163ad463016a01bba2823c.png

当http请求经过代理服务器时,其处理流程如下:

  • AnyProxy收集请求所有参数,包括url、method、header、body等。
  • AnyProxy调用规则模块beforeSendRequest方法,修改请求参数内容或返回本地响应内容,如果beforeSendRequest返回了本地响应内容,则立即把此响应返回到客户端(不再向服务端发送,请求流程结束)。
  • 根据请求参数,向服务端发出请求,接收服务端响应。
  • 调用规则模块beforeSendResponse方法,对响应内容进行修改。
  • 把响应信息返回给客户端,请求流程结束。

当https请求经过代理服务器时,AnyProxy可以替换证书,对请求进行明文解析。

  • 调用规则模块beforeDealHttpsRequest方法,如果返回true,则明文解析这个请求,否则请求不处理。
  • 被明文解析后的https请求,处理流程同http一致。未明文解析请求不会再进入规则模块做处理。

基于AnyProxy构建Mock服务的整体设计

AnyProxy构建Mock服务的整体设计如下:

229f6fe6462e4f8ff57e8be3d58ad80a.png

抽取公共配置文件、Mock接口配置、本地响应配置实现与代理转发规则(js规则文件)解耦(即数据驱动),通过灵活修改、添加配置,实现高效、灵活的Mock服务。

公共配置文件

公共配置文件,如Mock启停配置。

9c700c5795216839669ca05f1fb46dd5.png

Common.json

Mock接口配置

需要Mock的接口Url列表。

ee5c556262701b6dac8a0b015e239ba9.png

Proxy_Api.txt

本地响应配置

明确需要Mock的接口Url与Response映射关系。

f545af2c657835ec6bdf52814bff9ab4.png

LocalResponse.json

自定义规则文件

读取各配置文件,利用beforeSendRequest规则方法,实现对需要Mock接口直接返回本地对应的响应内容。

7b4f8dc9264bb7469bf8158df3fb471e.png

基于AnyProxy构建Mock服务的实现示例

示例主要步骤

  1. 利用Wiremock启动3个伪服务,作为测试服务接口。
  2. 将其中两个接口添加至对应配置文件中。
  3. 启动AnyProxy(修改代理服务器配置)。
  4. 通过Python requests请求3个服务,验证是否实现Mock。

1.启动伪服务

f5f44ece34c9659f4d070bd3a86e76de.png

通过浏览器请求三个服务,响应结果如下:

a6a41719f3675850f9adb8fe47124495.png

Wiremock构建伪服务

通过Python requests请求三个服务,响应结果如下:

0486b130406a5cfad0196ffc939536b4.png

服务请求响应结果

2.配置相关配置文件

配置/profile_v3/graphic/publish、/profile_v3/graphic/comment接口至Proxy_Api配置文件中。

ee5c556262701b6dac8a0b015e239ba9.png

Proxy_Api.txt

配置如下Url与响应体映射信息至LocalResponse.json配置文件中。

f545af2c657835ec6bdf52814bff9ab4.png

LocalResponse.json

3.启动AnyProxy

执行anyproxy -i --rule Proxy_Rule.js ,启动AnyProxy,如下

cc1a6aa89283198d4075f284a0379253.png

4.Requests请求

利用Python的Requests模块,请求三个接口,查看对应接口是否Mock成功,结果如下。

5798246caf6308c9a1686dfe43fb37d5.png

如上,我们实现了基于AnyProxy的Mock服务构建。

若对你有所帮助,欢迎大家评论、留言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值