持续创作,加速生长!这是我参加「日新计划 6 月更文挑战」的第27天,点击检查活动概况
咱们好~我是
米洛
!
我正在从0到1打造一个开源的接口测验渠道, 也在编写一套与之对应的教程
,期望咱们多多支撑。
欢迎重视我的公众号米洛的测开日记
,获取最新文章教程!
回忆
上一节咱们现已能够打通【har文件完成录制=>用例生成】的整体流程。那么这一节咱们就持续把录制相关的逻辑理清楚。
还记得咱们之前抛出的问题不?
我这里其实陆陆续续发现过好几个坑,可是都一一踏平了,今日这节就无私奉献出来,期望有缘人能少踩弯路。
本地不易发觉的问题
为什么问题拖了那么久,那是因为这些问题
本地都不简单发觉,只需到了线上才会呈现。举个比如,咱们本地启动的mitmproxy的服务地址是: 127.0.0.1:77778
咱们的恳求通过了署理之后,也仍是127.0.0.1,也就是说ip并没有改变,所以这会导致咱们发现不了问题
!!!
今日我要说的问题主要分2类:
-
第三方云服务器商
之前咱们截过图,腾讯云会阻拦咱们的mitm.it页面,提示咱们没有存案,这就导致什么?
对,咱们无法通过mitm.it装置证书。
-
ip问题
还记得咱们是怎么判定一个用户有没有在录制,录制得怎么样的吗?没错,咱们是依据
ip
来的,想一下服务上线后,咱们的ip依然是127.0.0.1, 线上咱们或许通过了nginx,也或许通过了其他各类服务器转发, 那咱们的实在ip,他们还能完美拿到吗?答案是不一定的。
逐个击破
-
云服务器商
抵挡他们,其实没有太多方法。但咱们本地装备
署理
今后,拜访到mitm.it,能够观察到,对应的证书,咱们是能够下载到的,并且不同操作系统的证书是固定的。
也就是说咱们在自己的Request客户端里边加上自身署理(云服务器给自己署理),也就是相似requests.get下载mitm.it的文件,但因为要署理才能拜访,所以咱们需要给requests参加proxy相关的参数。
这个我现已封装好了,因为之前核算走mock形式。
云服务器(通过本机署理)拜访mitm.it行得通,所以咱们能够对外露出一个api:下载证书
。
这个证书只需下载到,咱们就能顺利装置并通过署理拜访到其他页面,为后面录制做铺垫了。
-
ip问题
这个是困扰我很久的一个问题,先来看第一个。先假设咱们的实在ip都是111.111.111.111,所以咱们对照录制状态这个接口:
这一块的内容,咱们期望的是依据咱们的实在ip去获取redis里边的数据,但最终走向会是什么呢?
- 前端页面建议恳求
- 恳求到达服务端nginx
- nginx转发到pity实在地址
也就是说,pity收到的恳求,其实是由nginx发给它的,那他拿到的,其实是nginx的ip地址,即nginx服务器地址
。
这就引发第一个问题,咱们获取不到咱们的录制数据
(留意本地并不会呈现哦,只需生产会)。
那么怎么处理呢?咱们的nginx在转发的时分,要带上对应的装备:
* 留意这个client_max_body_size,默许是1m,这里是har导入的时分报错我修正的。
这3个装备代表,把原始的客户端ip啥的也都持续转发曩昔。如此咱们就处理了第一个问题。
-
第二个问题
第二个问题比较粗鲁,因为咱们录制的时分,咱们实际上是走了
mitmproxy
的署理,可是他也很坏,不给咱们实在ip,只需咱们通过他,通过fastapi获取到的,都是mitmproxy部署的地址。通过我不断的探索,终于找到了对应的处理方案,直接上答案。
- 修正uvicorn的装备
我是用gunicorn的方法,所以我在gunicorn.py里边修正uvicorn的装备:
# 启动的进程数
workers = multiprocessing.cpu_count()
worker_class = 'uvicorn.workers.UvicornWorker'
forwarded_allow_ips = "*"
x_forwarded_for_header = 'X-FORWARDED-FOR'
forwarded_allow_ips这个参数是允许forward的ip,我了解的意思是,你重定向/转发今后,持续输送你旧的ip。
其实nginx的装备,也是这个参数,对不,其实咱们命名都很挨近
,网络上有些人会要求再改一个header啥的装备,我观察了一下那个装备默许是开
的,所以不需要了。
改完这个之后,你的mitmproxy就会收到你实在地址,可是这样是不行
的。咱们假如录制数据,会走署理,这样咱们的ip会被识别为mitmproxy所在ip。
所以咱们需要持续提升
(forward),咱们需要在mitmproxy录制到接口的时分也设置forward
。
在插件中,把实在的ip地址forward即可。下面来展示,我在pity.fun这个地址里边录制回放的成果。
劳动成果
- 装备署理
- 全程运用pity.fun环境录制
bug警钟,能够看到最后录制结果
多了一条开端录制的数据,咱们下期处理它。