前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用mitmproxy进行埋点测试

使用mitmproxy进行埋点测试

作者头像
zx钟
发布2021-10-11 10:28:29
8150
发布2021-10-11 10:28:29
举报
文章被收录于专栏:测试游记测试游记

官网:https://mitmproxy.org/ 文档:https://docs.mitmproxy.org/stable/ mitmproxy is a free and open source interactive HTTPS proxy.

mitmproxy不仅可以截获请求帮助开发者查看、分析,更可以通过自定义脚本进行二次开发。

我们可以批量拿到请求,然后根据自定义的python脚本来进行解析与处理,实现高度定制化的需求。例如进行「埋点测试」、「判断异常请求并发送邮件」等等。

特性

  • 拦截 HTTP 和 HTTPS 请求和响应并即时修改它们
  • 保存完整的 HTTP 对话以供以后重播和分析
  • 重播 HTTP 对话的客户端
  • 重播先前记录的服务器的 HTTP 响应
  • 反向代理模式将流量转发到指定的服务器
  • macOS 和 Linux 上的透明代理模式
  • 使用 Python 对 HTTP 流量进行脚本化更改
  • 实时生成用于拦截的 SSL / TLS 证书
  • ……

环境搭建

代码语言:javascript
复制
$ pip install mitmproxy

查看版本校验是否安装成功

代码语言:javascript
复制
(venv) (base) localhost:wytest zhongxin$ mitmdump --version
Mitmproxy: 7.0.4
Python:    3.8.3
OpenSSL:   OpenSSL 1.1.1k  25 Mar 2021
Platform:  macOS-10.16-x86_64-i386-64bit

安装证书

https://docs.mitmproxy.org/stable/concepts-certificates/

代码语言:javascript
复制
sudo security add-trusted-cert -d -p ssl -p basic -k /Library/Keychains/System.keychain ~/.mitmproxy/mitmproxy-ca-cert.pem

Mac配置代理

配置代理

其他环境的代理可以根据「安装证书」中的链接查看官方帮助文档

埋点测试demo

监听代码

代码语言:javascript
复制
# @File    : test_mitmdump.py
import json
import time

import mitmproxy.http

with open('1.json', 'w') as f:
    json.dump([], f) # 新建一个空列表json用于存放结果


class Demo:
    def __init__(self):
        self.other_data = None

    def response(self, flow: mitmproxy.http.HTTPFlow):
        url = flow.request.url
        if 'trackh5.guahao.cn' not in url:
            return
        if 'trackh5.guahao.cn' in url: # 根据url地址判断是否要再次处理
            # 埋点报文
            query = flow.request.query
            with open('1.json', 'r') as f:
                d = json.load(f)
            with open('1.json', 'w') as f:
                data = {
                    "time": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), # 记录触发时间
                    "url": url,
                }
                try:
                    data["query"] = str(query)
                except Exception:
                    pass
                d.append(data)
                json.dump(d, f)


addons = [
    Demo(),
]

运行代码,可以方便调试

代码语言:javascript
复制
# @File    : run.py
import sys
import os
from mitmproxy.tools.main import mitmdump

sys.path.append(os.path.dirname(os.path.abspath(__file__)))

mitmdump(['-s', 'test_mitmdump.py'])

测试

触发一次埋点后查看json文件中的内容:

代码语言:javascript
复制
[
  {
    "time": "2021-10-08 11:36:04",
    "url": "https://trackh5.guahao.cn/blank.gif?pdata=pv_sid=0|pv_seq=1|channel=jlyh5|inchannel=|enc_user_id=89AB41A4C099101440A6821DB15F7FCAFFC3F8AB4CED97BF|uuid=6ba709723df10d66a5527706a20cd315|persession_id=1631689150059789338086|shortsession_id=1633627822175|user_id=CF5AA056D0070907CF7CB017A19FD143|open_id=23FE46EFC793433E|uid_cat=27|language=zh-cn|report_time=1633662887928|refer_url=|url=http%3A%2F%2Fm.guahao-test.com%2Foutpatient%2Flist%2Fsearch%3FpatientId%3D6E426275034A52E0401D6846A6B1FBC0%26doctorUserId%3D40A53CCE3BC3D37C22221289F37C26426844E653153C4B16%26sessionId%3D6115e37351a4da0001af1470|unique_id=1633662887928-1|acct_id=|track_souce=&ndata=id=|h=812|w=375|xp=html%3Ebody%3Ediv%5B1%5D%3Esection%3Ediv%5B3%5D%3Eul%3Ediv%5B20%5D%3Ep%5B2%5D%3Eimg|x=315|y=293|ct=d41d8cd98f00b204e9800998ecf8427e|oh=22|ol=299|ot=279.984375|ow=22",
    "query": "MultiDictView[('pdata', 'pv_sid=0|pv_seq=1|channel=jlyh5|inchannel=|enc_user_id=89AB41A4C099101440A6821DB15F7FCAFFC3F8AB4CED97BF|uuid=6ba709723df10d66a5527706a20cd315|persession_id=1631689150059789338086|shortsession_id=1633627822175|user_id=CF5AA056D0070907CF7CB017A19FD143|open_id=23FE46EFC793433E|uid_cat=27|language=zh-cn|report_time=1633662887928|refer_url=|url=http://m.guahao-test.com/outpatient/list/search?patientId=6E426275034A52E0401D6846A6B1FBC0&doctorUserId=40A53CCE3BC3D37C22221289F37C26426844E653153C4B16&sessionId=6115e37351a4da0001af1470|unique_id=1633662887928-1|acct_id=|track_souce='), ('ndata', 'id=|h=812|w=375|xp=html>body>div[1]>section>div[3]>ul>div[20]>p[2]>img|x=315|y=293|ct=d41d8cd98f00b204e9800998ecf8427e|oh=22|ol=299|ot=279.984375|ow=22')]"
  }
]

后续结合selenium即可完成埋点自动化测试

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 特性
  • 环境搭建
  • 埋点测试demo
    • 测试
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档