当前位置: 首页 > news >正文

如何在自动化测试中使用MitmProxy获取数据返回?

背景介绍

当我们在接口或UI自动化项目中,常常会出现这种现象——明明是正常请求,却无法获取到想要的数据返回。

比如:

场景A:页面是动态数据,第一次进入页面获取到的数据,和下次进入页面获取到的数据完全不一样。

场景B:页面数据有展示限制,页面某些模块或整个页面数据仅展示3次,且通过服务端返回控制。

这时我们要怎么办?

如果是手工测试时,我们大可以直接使用Charles、Fiddler进行模拟,毕竟代理软件基本能解决大部分测试需求。

那如果是在自动化项目中呢?如果还是使用代理软件——其实也不是完全不行,但我们还有更佳的实践方式。

也就是使用MitmProxy作为正向代理拦截请求和返回数据。

如何使用MitmProxy作为正向代理

实现Maplocal

MitmProxy是一个三方库,我们在程序中可以把它当成Charles来使用。

这里以实现Maplocal功能进行说明:

(1)Maplocal功能,简单理解就是当针对特定请求,返回特定数据。

比如请求"www.baidu.com",正常应该返回:

 
{"post": {"title": "百度一下",},"type": 1
}

但我们修改返回数据,只要有"www.baidu.com"请求过来,就让它自动返回:

{"post": {"title": "谷歌一下啦啦啦",},"type": 1
}

这就是一个最基础的maplocal案例。

(2)在MitmProxy里如何实现Maplocal功能呢?

这里以get请求实现进行说明:

get.json 配置文件,在这里记录所有需要拦截的get请求:

 
{"https:www.baidu.com":[{"jsonPath":"../data/maplocal/first_tab.json"}]
}

MitmProxy脚本中:

 
from mitmproxy import http
from mitmproxy import ctxclass InterceptRequests:def __init__(self):def request(self, flow: http.HTTPFlow) -> None:"""使用request事件实现map local:param flow::return:"""# GET 请求处理if method == "GET":pure_url = get_url_host(interceptUrl)url_data = get_json.get(pure_url)if url_data:interce_params = get_url_params(interceptUrl)params = get_json_value(get_path, pure_url)for para in params:if para.items() <= interce_params.items():jsonpath = para.get("jsonPath")jsonpath_abs = path(jsonpath)self.file_maplocal(flow, jsonpath_abs)
addons = [InterceptRequests()
]

在执行的脚本中(如本地shell 或 其他执行的py脚本里):

# kill mitmproxy
lsof -n -i:8999 | grep LISTEN | awk '{print $2}' | xargs kill
# start mitmproxy
mitmdump -p 8999  -s mitmHandler.py

启动脚本后,连接MitmProxy的设备的请求全部都会被脚本监控。

如果出现"www.baidu.com"的请求,就会到get.json里找到对应的json,自动返回给设备。

这样,就实现了一个最简单的maplocal。

当然基于目前的MitmProxy脚本,我们还可以进行一些功能扩展。

如针对接口类型get或post请求,针对请求参数类型json或x-www-form-urlencoded,都可以进行更多延伸扩展。


最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你

 

http://www.lryc.cn/news/157684.html

相关文章:

  • 达之云BI平台助力中国融通集团陕西军民服务社有限公司实现数字化运营
  • Private market:借助ZK实现的任意计算的trustless交易
  • 反序列化漏洞复现(typecho)
  • QT设计一个小闹钟
  • MybatisPlus(3)
  • 安全计算环境技术测评要求项
  • Excel快捷键表
  • Windows Server 系统各版本及授权说明(附下载地址
  • 【智慧工地源码】物联网和传感器技术在智慧工地的应用
  • 计算机安全学习笔记(IV):基于角色的访问控制 - RBAC
  • MFC中的Button修改颜色的方法
  • 【算法】选择排序
  • golang之context实用记录
  • 音视频FFmpeg简单理解学习,必学技术
  • 一款内网信息收集利用工具
  • 数据库表的操作
  • Golang开发--channel的使用
  • SQL sever中表管理
  • CSSoverflow 属性
  • 08:STM32----DMA数据转运
  • Golang 程序漏洞检测利器 govulncheck(二):漏洞数据库详解
  • [JDK8下的HashMap类应用及源码分析] 数据结构、哈希碰撞、链表变红黑树
  • 高等数学刷题
  • lintcode 1840 · 矩阵还原【中等 vip 二维前缀和数组】
  • VMware虚拟机+Centos7 配置静态,动态IP
  • 【C++精华铺】10.STL string模拟实现
  • 微信小程序开发---事件的绑定
  • 基于Hata模型的BPSK调制信号小区覆盖模拟matlab完整程序分享
  • 音视频 ffmpeg视频裁剪
  • Web3数据云OORT推出商用版智能代理构建平台:OORT TDS