从零开始学mitmproxy抓包工具

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 Man In The Middle mitm是Man In The Middle的首字母缩写,意思是位于中间的人,表明mitmproxy是一个代理,可以拦截请求,实现网络抓包。知名的网络抓包工具有Fiddler、Charles、HttpWatch、WireShark、BurpSuite和Postman等,mitmproxy相对来说,没有这么高的知名度,它相比于以上工具的独特优势是,它提供了Python API,可以编写Python代码对网络请求进行流量录制,从而收集接口信息以及转化为接口自动化用例等。mitmproxy官方文档不但有mitmproxy工具使用介绍,还有代理实现原理,对我们学习掌握网络知识有很大帮助。 安装与使用 pip安装 pip install mitmproxy mitmproxy是Python开发的,用pip就能安装成功。官方给出了二进制安装包等方法,我觉得作为一款用Python开发的工具,用pip直接安装是更Pythonic的。 命令启动 可以通过3种命令启动mitmproxy: mitmproxy 控制台 mitmweb 网页 mitmdump 命令行 它们的内容都是一样的,只是UI不一样而已。 手动设置代理 打开以后mitmproxy默认会监听http://localhost:8080,需要设置下代理,把代理服务器设置为这个地址。 Windows可以这样设置: 设置后一定要记得点击保存按钮,否则代理不会生效。 实际上,Charles等网络抓包工具会自动配置代理,而mitmproxy需要手动设置代理,开发团队的解释是因为浏览器版本和配置经常会变化,所以他们建议在网上根据环境搜索方法手动设置。 下载证书 访问http://mitm.it/,如果代理配置没有生效,打开后会是这个界面: 正常的话,会出现证书下载页面: 根据平台选择相应证书安装就OK了。 使用 mitmproxy更其他抓包工具用法类似。 官方用视频演示了mitmproxy如何使用: https://docs.mitmproxy.org/stable/mitmproxytutorial-userinterface/ 并且介绍了5种运行模式: https://docs.mitmproxy.org/stable/concepts-modes/ 读者可以自行阅读下。 mitmproxy工作原理 客户端(本机)连接代理服务器(http://127.0.0.1:8080),代理服务器连接服务器。 客户端给代理服务器发请求,代理服务器把请求发送到服务器。 所有请求经过mitmproxy,就可以实现请求拦截。 对于HTTP来说,直接借助mitmproxy传递请求就可以。而对于HTTPS来说,有个SSL/TLS安全认证,必须安装证书,服务器才会认为mitmproxy的请求是可信任的,请求才会成功传递。 HTTPS的代理过程就要复杂很多,客户端先跟mitmproxy建立连接(12步),然后进行安全认证(36步),最后传递请求(7~8步)。 反向代理 假设在本机使用FastAPI启动了个Mock服务,地址为http://127.0.0.1:5000,通过Postman调接口,怎么使用mitmproxy来拦截请求呢?这就需要用到反向代理。 首先以反向代理模式运行mitmproxy,服务器端口为5000,监听端口为8000: mitmproxy --mode reverse:http://127.0.0.1:5000 --listen-host 127.0.0.1 --listen-port 8000 然后把请求http://127.0.0.1:5000/login里面的5000端口改成8000,访问: http://127.0.0.1:8000/login 就能在mitmproxy看到抓到请求了: 这样就能在本地使用Mock服务来调试拦截请求的Python代码了。 反向代理,不需要在本机手动设置代理。 Python API Python API是mitmproxy的特色功能: ...

代码变形记之模板方法模式

《代码变形记》系列文章基于真实案例,记录实际工作中的代码优化方法。

计算机历史人物之冯·诺依曼

0-5岁就有过目不忘的记忆力,6个月能认出客人,2岁能用德语和母亲交流。6岁已经能读古希腊文献,经常随口报两个8位数,心算除法,结果精确到小数点后几位。8岁就自学完成微积分,阅读44卷本的《世界通史》。10岁进入著名的路德中学,这所学校后来培养出多位诺贝尔奖得主。12岁开始研究集合论和超限数,讨论无穷理论。15岁掌握泛函分析、复变函数、测度论。17岁发表第一篇数学论文《论某类最小多项式的零点位置》

聚焦于任务调度的测试平台pytestx

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 设计理念 聚焦于任务调度,接口自动化80%本地编写,20%交由平台管理。 如果使用pytest做接口自动化,那么个人认为最好的编写工具是PyCharm,任何低代码测试平台都无法取代。当然不会代码,或者不使用pytest,那低代码测试平台,或者yaml,甚至excel写自动化用例,都是可以接受的。而在使用pytest这个特定场景里面,要做平台化,平台的功能就需要仔细斟酌。既然编写用例最好使用PyCharm,平台也就只能专注于用例编排和任务调度,即创建任务,关联用例,批量运行,以及定时,并行,通知等。 pytestx正是基于此理念设计的一款纯粹的任务调度平台。 平台架构 tep1.0.0的延续 tep1.0.0版本已经封版,在pytestx中对它进行了延续。 从pypi到git tep是上传到pypi的,通过pip命令安装,使用tep startproject命令创建项目脚手架,代码结构分为项目代码和tep代码。改造后的tep只有项目代码,存放在: https://gitee.com/dongfanger/tep-project.git 也就是说,在这个项目中,能看到整个tep全貌。之前的tep内核代码,比如fixtures自动寻找、内置fixture、环境变量等,全部迁移到了项目代码里面,尤其是conftest.py的文件内容。pip install tep顺带安装的依赖包,也整理到了requirements.txt,按照说明安装即可。 pytest-html替换allure 由重到轻,化繁为简,pytest-html能够满足数据+日志的报告需要,最新的V3.2.0版本的界面尚可。诚然allure漂亮,但安装Java、下载Allure、配置环境变量、安装pytest-allure、添加pytest hook还是相对麻烦。更重要的是,要支持平台在线查看报告,减少存储占用,pytest-html无疑是更好的选择。 下载脚手架 既可以从使用git clone下载代码,也可以从页面下载,就像spring.io那样: fastapi到django 之前的示例代码是调用的fastapi启动的应用,pytestx则将示例代码的接口换成了Django自身的mock接口。 teprunner的延续 pytestx的基础代码是从teprunner来的,对数据库设计、代码规范、项目结构做了优化。 任务管理 一、同步项目 同步项目,是把项目配置的Git仓库地址和分支,更新到本地沙箱中,项目之间完全隔离。 并把用例落库: 二、任务关联用例 创建任务,任务关联用例,就形成了新的用例集。 三、容器化运行 当前是假容器,未真正引入Docker,所谓容器,是指每次运行,都将用例拉取到新的目录,批量执行: 四、生成报告 pytest命令生成html报告,存放于reports,借助于Django挂载页面,从页面点击,在线查看报告: 体验平台 下载源码:https://github.com/dongfanger/pytestx 安装依赖:前端(npm install)后端(pip install -r requirements.txt) 启动服务:前端(npm run serve)后端(python manage.py runserver) 即可畅快体验。 学习交流 添加微信cekaigang,加入交流群,欢快讨论吧。 参考资料: https://github.com/dongfanger/pytestx

录制脚本与元素定位

UI自动化最麻烦的就是定位元素,好在Playwright支持录制脚本,可以在界面进行操作,快速获取元素定位,生成测试脚本。

如何让文科生5分钟写上Python

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 序言 这篇文章是转型后发表的第一篇文章,有必要先聊一下我的写文计划。 串行文章和并行文章 我会按照发文顺序分为串行文章和并行文章。Python 语言本身的内容,我会按照入门、进阶、原理的顺序依次展开。由于我的水平有限,为了保证质量不乱讲,我选择站在巨人的肩膀上进行二次创作。入门篇主要参考菜鸟教程的基础教程部分。进阶篇主要参考《流畅的Python》这本书,我是买了实体书的,计划后面会送出来,虽然有些破旧,还望不要嫌弃(当时买的时候书页就坏了,京东还赔了我 1000 京豆)。原理篇主要参考官方文档以及外网资料,有一说一,国外资料确实更多更专业,只不过都是英文的,还好现在已经适应了。Django、算法、pytest、tep、测试成长小说等系列专题会并行发表,也包括其他单篇文章。这两天了解到 Python 之父 Guido van Rossum 从 Google 退休后,又加入微软继续搞 Python 了。有点意思。 有啥不一样? Python 文章和视频都非常多,我就在想我写的东西对读者而言价值到底在哪?我不是搞培训的,也不是做教程,内容会更偏向于学习笔记和实用经验。看我的文章,说不定能把以前遗漏或遗忘的知识点再次补上。同时我已经有一段时间的写作经验了,我也尽量深入浅出的把知识讲清楚讲透彻,首先写的文章我要自己都理解透,这样别人看的时候才会觉得一目了然。另外就是认真的态度,见过一些为了流量写的教程,不做评价。只是觉得既然写了,既要对得起自己,也要对得起别人。 标题 既为了提高打开率,也是为了新颖,我不会按照比如《Python入门1》、《Python入门2》这种常规的命名,这样的文章实在是太多了。而是会在写完文章后,根据文章内容,选择其中的亮点,作为标题。这个过程也挺有趣,有种点睛之笔的意味。同时我也希望随便摘一篇文章拿出去,也是够看的。 (突然想起来上学写 2000 多条错题笔记的时候,简单又充实) 开篇 为了把这个开篇写好,我专门在 B 站上面找了最火的 Python 教程,全站排行榜最高第1名的《花了2万多买的Python教程全套》,质量很高,也推荐大家看看。不过我不搞培训,也不需要宣扬 Python 的好处促进就业,就不写那么多背景介绍了。身边学财会的朋友之前让我教教 Python,干脆我就以这个为契机,作为开篇,保证 5 分钟内,即便是文科生,也能用 Python 编起程序来! 电脑 Python 并不神秘,它其实就和 QQ 一样,只是一个运行在电脑上的普普通通的软件。只要有一台电脑,就可以写 Python。 安装 打开这个下载网址: https://www.python.org/downloads/ 点击 Download Python 进行下载(Mac 土豪请注意选择版本)。下载后傻瓜式一路点击下一步安装就好。 使用 一般的软件我们都是双击图标打开。Python 在安装以后桌面上不会出现图标。不过可以从开始菜单找到: 点击后就打开了: Python 毕竟是一门编程语言,它也有它自己的尊严,所以它的界面看起来也有专业的一面,比如那一串密密麻麻的英文。 输入一句话试试: print("hello") 敲击回车。它马上就会回应一句,hello: 没错,是的,你已经在用 Python 编程了! 小结 本文以极其简单的例子,介绍了如何动手用 Python 编程。我试了下,如果网速快的话,5 分钟内完成是妥妥的。哈哈哈。之所以选择这个简单例子,也是想说明 Python 本来就是很简单的,不用听到编程就被吓到了。先动手,一点一点学习就好。不过言归正传,我们工作中并不是这么写 Python 的,而是用一款叫做 PyCharm 的软件。PyCharm 分为社区免费版和专业旗舰版。日常使用社区版就可以了,个人推荐旗舰版。提示一下,破解的时候注意搜索带上 PyCharm 的版本,比如 2020.2.3,成功率会更高。

事件时间日志,精准工作之道

李笑来在书中谈到了事件时间日志的好处:“它会使你对时间的感觉越来越精确。可以调整我对时间的感觉,在估算任何任务的工作量的时候,都更容易确定真正现实可行的目标。相对准确的估算又使得目标基本上都可以达成,由此可以算是战胜了焦虑”。

刷了80道算法题以后

刷了80道算法题以后,我最大的感受是,自信心倍增。既克服了对算法的恐惧,也加强了Java代码能力,还收集了2068行答案代码。

一个请求的一生

点进Service,全是接口。点进ServiceImpl,前半段在校验业务规则,后半段调了个stockService.deduct(),又得跳到另一个Service。

原创电子书全新重磅升级

电子书,简洁专注的阅读体验。对于技术文章来说,电脑端比手机端更适合阅读,尤其是代码。电子书的左侧目录能快速找到文章,虽然公众号也有文章分类功能,但是不能像目录树一样有“位置感”。电子书还能支持搜索。所以把个人网站做成了电子书。

2026-01-01 · 1 分钟 · 11 字 · 测试开发刚哥 · AI技术 · #AI开发