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
- 理解传输协议
- 根据协议选择工具
- 应用层 charls , mitmproxy :http,https (网络数据传输:打开网页), websocket(通信:微信聊天)
- socket mitmproxy pysocket:粘贴剂(不属于层,是一个把理论变为现实的工具,让人们去调用)
- 传输层 mitmproxy :tcp(可靠传输),udp(不可靠)
- 传输层之下:不要测
应用
反向代理
打开 charles 的 Proxy , 点击 reverse prxies
当访问: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
搜索雪球中股票名字
右键请求,选择 maplocal ,选择本地文件(或者打开 tools , 点击 maplocal)
mitmproxy
介绍
mitmproxy说明文档
Introduction 4
分类:
- mitmproxy:交互式工具(不支持 windows )
- mitmweb: web UI 代理工具(可视化,功能少)
- mitmdump: 可扩展的无 UI 代理工具(扩展功能强,可人为写插件增强)
安装
pip install mitmproxy
证书安装
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 握手阶段