01-15 接口mock实战

课堂 ppt

PPT地址

实战内容

Charles mock 实战

mock 原理

mock 场景

  • 前后端数据交互
  • 第三方系统数据交互
  • 硬件设备解耦

mock 核心要素

  • 匹配规则
  • 模拟响应

Charles 安装配置

移动端连接

  1. 设备和电脑在同一个 wifi 下
  2. 网络设置
    image
  3. 安装证书:系统浏览器中输入 chls.pro/ssl

charles 中设置 ssl
image

charles 新版本

Android 抓包版本问题

Android 6 以上版本默认不信任 Charles 证书,练习需要用 Android 6 及以下系统。mumu Android 6

Android 6 以上版本需要开发配合打开抓包属性

URL 组成

  • 协议类型:http https
  • 服务主机地址:www.xx.xx ip
  • 端口:主机地址:端口
  • 路径:/xxxxxx.xx/xx
  • 请求参数:xx=xx&yy=yyy

Charles Rewrite

原理

设置方式

  1. Tools → Rewrite
  2. 勾选 Enable Rewrite
  3. 点击下方 Add 按钮增加重写
  4. 在右侧编辑重写规则
    • 上面匹配规则
    • 下面响应修改规则
  5. 点击 ok 生效

使用场景

  1. 动态修改响应数据
  2. 修改请求数据

Charles Map Local

原理

设置步骤

  1. 准备接口响应数据
  2. 配置 MapLocal:选择对应的接口,鼠标右键–Map Local(自动填写好接口数据)
  3. Map To 选择本地文件

场景:修改响应数据

Map Remote

原理

设置

  1. 选定对应接口
  2. 点击鼠标右键 – Map Remote(自动填写接口信息)
  3. 填写目标接口信息
  4. 点击 ok

应用场景:切换测试环境

mitmproxy 安装

pip install mitmproxy==5.2.0

证书安装方式

  1. 启动 mitmdump 工具mitmdump -p 8999
  2. 浏览器访问 mitm.it 下载对应系统证书安装

mitmproxy mock 实战

工具组成

  • mitmproxy:命令行工具(win 不支持)
  • mitmweb:web UI 工具
  • mitmdump:加载 python 脚本

常用参数

  • -p 指定抓包端口
  • -s 指定加载的 python 脚本

实现 maplocal

修改雪球行情页面的股票名称和价格

from mitmproxy import http

# request 名称不可以改变
# 当 mitmdump 加载这个脚本的时候,当有请求来,就会回调 request 方法
# flow 就是 mitmdump 抓到的接口数据
def request(flow: http.HTTPFlow) -> None:
    # 修改判断条件
    if "quote.json" in flow.request.pretty_url:
        # 打开本地数据文件
        with open("/Users/mac/Desktop/quote.json") as f:
            # 创建一个响应,返回给客户端
            flow.response = http.HTTPResponse.make(
                200,  # 响应状态码
                # 读取文件中的数据作为响应内容
                f.read(),
                {"Content-Type": "application/json"}  # 通过设置头信息指定响应格式
            )

启动脚本

mitmdump -p 8999 -s xxx

实现 rewrite

修改雪球行情页面的股票名称和价格

import json
from mitmproxy import http


def response(flow: http.HTTPFlow):
    if "quote.json" in flow.request.pretty_url and "x=" in flow.request.pretty_url:
        # 使用 json loads 方法,把响应转化为 python 对象
        data = json.loads(flow.response.content)
        # 修改响应内容
        data['data']['items'][0]['quote']['name'] = "hogwarts001"
        data['data']['items'][1]['quote']['name'] = "hogwarts002"
        data['data']['items'][1]['quote']['current'] = 10000
        # 把字典转为字符串,赋值给 response 原始数据格式
        flow.response.text = json.dumps(data)

启动脚本

mitmdump -p 8999 -s xxx

代码

课后调查表

Charles 中接口如何定位

  1. 清除数据,单独刷新页面,这样干扰会少一些
  2. 通过接口文档,知道接口对应的 url,通过 url 去找
  3. 或者可以 ctrl+f 进入搜索页面,搜索接口中包含的内容,也可以快速定位到接口

弱网测试

基础模拟

  • 点击小乌龟图标,图标为绿色时开始模拟弱网

  • 再次点击小乌龟图标,图标为灰色时结束弱网模拟

定制弱网

  • 打开菜单栏 proxy->Throttle Setting… 界面上的 Enable Throttling
  • 勾选 enable,打开弱网配置
  • 可以对指定的域名进行配置,如果不设置就是对所有的域名都起效
  • Throttle preset 可以选择不同的网速进行模拟