问答 想问一下,有没有什么方法可以获取访问 app 请求的所有接口返回?

YCF · 2024年02月23日 · 最后由 sc6288 回复于 2024年03月01日 · 8752 次阅读

想问一下,比如,操作进入 app 某一个页面,有没有什么方法可以获取该页面请求的所有接口返回?我打算以自动化形式对所有接口返回做个断言判断是否有报错。

分享【目前已找微信小程序使用 get_current_requests(),可以获取访问页面的所有请求响应。】

共收到 11 条回复 时间 点赞

Fiddler 是可以的

YCF #2 · 2024年02月23日 Author

我打算做成 ui+api 自动化形式,测功能的同时,校验页面内的所有 api 是否有报错或者部分 api 返回是否正确。fiddler 需要认为的去配合

打了一堆我又删了,请问你知道你想问什么吗

reqable,试试看

市面上常见的抓包工具都行吧,fiddler,charles

自己搞个抓包代理就可以了吧,执行 ui 自动化的时候,让代理去进行返回校验

你是不是想做个代理啊?手动测试的时候开启代理,然后直接对所有前后端传输的数据进行校验,就像加了一层中间件一样。是的话可以用 mitmproxy

YCF #8 · 2024年02月23日 Author

重新编辑了一下问题,其实场景就是,UI 自动化执行用例的同时,获取操作操作的所有 api 请求,去断言。
因为公司的接口不稳定,经常会有接口不定时报错,想找出这些接口去优化

那为什么不直接做接口自动化捏

在 UI 自动化过程中开启代理,并对指定 base_url 下的接口进行简单断言,比如:状态码:200;"success":"true"等
如果您想在 UI 自动化过程中仅对代理请求的接口进行记录并断言,可以使用 mitmproxy 库。mitmproxy 是一个强大的交互式 HTTPS 代理工具,它可以拦截、检查和修改 HTTP 请求和响应。

以下是一个简单示例,演示如何使用 mitmproxy 对请求进行拦截并进行简单断言:

首先,安装 mitmproxy:

pip install mitmproxy

然后,创建一个名为 myaddon.py 的 Python 脚本,包含用于拦截和断言的代码:

from mitmproxy import http

def request(flow: http.HTTPFlow) -> None:
    # 设置目标 base_url 和要断言的路径
    base_url = "https://api.example.com"
    endpoint = "/some_endpoint"

    # 检查请求的 URL 是否匹配指定的 base_url 和 endpoint
    if base_url in flow.request.pretty_url and endpoint in flow.request.pretty_url:
        print(f"Intercepted request to: {flow.request.pretty_url}")

        # 断言状态码是否为 200
        assert flow.response.status_code == 200, "Status code is not 200"

        # 读取响应内容并转换为 JSON 格式
        data = flow.response.get_text()
        json_data = flow.response.get_text(as_bytes=False)

        # 断言返回值中是否包含 "success": true
        assert "success\": true" in json_data, "Success key not found in response"

接下来,在终端中启动 mitmproxy,并加载上面定义的脚本:

mitmproxy -s myaddon.py

现在,当您运行代理时,它会拦截符合指定 base_url 和 endpoint 的请求,并进行简单的断言。您可以根据需要调整断言逻辑以满足特定需求。

并不建议你将 ui+api 结合起来做自动化
1.首先 APP 不一定可以允许代理,其次就算代理也会增加 ui 自动化的不稳定性
2.接口不稳定,就需要单独通过接口自动化来轮询监控,可以先跑接口再 ui,而不是耦合运行

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册