2021.1.24charles抓包与Mock实战 2-纯理论

1. UI、接口、代理测试:

   接口主要是测服务器

   代理主要是测客户端

2. 

3. 几种常见协议区别:  https://blog.csdn.net/miao_9/article/details/85286025

标题

雪球app抓包与mock实战

课程价值

  • 掌握 mock 使用场景,基本 mock 原理
  • 掌握 ssl 通信原理
  • 掌握协议区别和联系(http,https,socket, websocket,tcp ,串口, visa 等)
  • 熟练使用工具:charles maplocal mapremote ,mitmproxy maplocal

大纲

  • mock 使用场景
  • 基本 mock 原理
  • ssl 通信原理
  • 协议区别和联系(http,https,socket, websocket,tcp ,串口, visa 等)
  • mitmproxy

内容

mock 场景

为什么要用 mock

测试对象:数据(AT^BSN 或 1000601)

 

 

如果没有 mock ,需要人为打开装备生成的 log ,把 log 与电子流进行对比(1v1),如果不一致,测试失败(需要跟开发确认指令顺序是否正确)- 重复与繁琐,不仅了解 log ,还需要与开发进行大量沟通。

mock 是什么

 

 

怎么用 mock

  1. 理解传输协议

 

 

 

 

  1. 根据协议选择工具
  • 应用层 charls , mitmproxy :http,https (网络数据传输:打开网页), websocket(通信:微信聊天)
  • socket mitmproxy pysocket:粘贴剂(不属于层,是一个把理论变为现实的工具,让人们去调用)
  • 传输层 mitmproxy :tcp(可靠传输),udp(不可靠)
  • 传输层之下:不要测

应用

 

 

反向代理

 

 

打开 charles 的 Proxy , 点击 reverse prxies

image

image

当访问:https://127.0.0.1:8081/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=霍格沃兹测试学院 2

charles 会反向代理到 baidu ,搜索霍格沃兹测试学院

业务场景: 可以编写测试服务( flask ),服务根据不同响应,返回不同数据。实现对采用 https 协议的应用测试。

maplocal

 

 

搜索雪球中股票名字

image

 

 

右键请求,选择 maplocal ,选择本地文件(或者打开 tools , 点击 maplocal)

image

image

mitmproxy

介绍

mitmproxy说明文档

docs.mitmproxy.org 4

Introduction 4

 

分类:

  1. mitmproxy:交互式工具(不支持 windows )
  2. mitmweb: web UI 代理工具(可视化,功能少)

 

 

  1. mitmdump: 可扩展的无 UI 代理工具(扩展功能强,可人为写插件增强)

安装

pip install mitmproxy

证书安装

docs.mitmproxy.org

Certificates

 

mitmproxy 使用

监听 8080 端口,提高显示等级

mitmdump --flow-detail 3

脚本:实现请求计算器,每来一个请求,计算器 + 1 ,并且打印

from mitmproxy import ctx


class Counter:
    def __init__(self):
        self.num = 0

    def request(self, flow):
        self.num = self.num + 1
        ctx.log.info("hello")
        ctx.log.info("We've seen %d flows" % self.num)


addons = [
    Counter()
]

实现 maplocal

from mitmproxy import ctx
from mitmproxy import http


class ABC:
    def __init__(self):
        self.num = 0
    def request(self, flow: http.HTTPFlow) -> None:
        if "quote.json" in flow.request.pretty_url and "x=" in flow.request.pretty_url:
          with open(r"C:\Users\yuruo\Desktop\tmp.json", 'r', encoding="utf-8") as f:
            flow.response = http.HTTPResponse.make(
                200,  # (optional) status code
                f.read(),  # (optional) content
                {"Content-Type": "application/json"}  # (optional) headers
            ) 

addons = [
    ABC()
]

rsa 握手阶段

 

 

 

 

 

posted @ 2021-01-24 20:37  方园FPP  阅读(180)  评论(0编辑  收藏  举报