V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
bobchengbin
V2EX  ›  分享创造

分享一个小工具 Boast:如何从服务端跟踪所有 HTTP 请求,并方便回放?

  •  
  •   bobchengbin ·
    dcb9 · 2017-03-31 16:22:58 +08:00 · 2596 次点击
    这是一个创建于 2793 天前的主题,其中的信息可能已经有所发展或是发生改变。

    客户端工程师:“ xxx 接口坏了,我的程序都没动过”,后端经常会收到这样的质问,但是我们现在如何重现这个问题?有以下几种情况:

    一、后端测试了一下发现没有问题

    “我这里测试了是好的啊”,就只能让客户端工程师再操作一遍,亲眼看到错误之后就肯定是有问题了,就得去找问题,这时候这台手机,以及这台手机里面的数据都非常重要,因为这些数据可以让 Bug 重现。

    二、测试了也有问题

    这时候后端就去修改程序了,但是每一次的测试是否有问题都需要在客户端中操作,有时候的操作非常的复杂,在这上面花的时间会比较多。最后使了各种神通才终于找到问题,原来是这个用户的某某数据有异常才会出现这种情况。

    以上这种情况屡见不鲜,最麻烦的点就在于,每次都要以出现 Bug 的相同参数去请求,有时候你知道这些请求的参数,可以把它们放到 Postman 这种工具里面,但大部分时候你并不知道它对应的参数 (token)

    如果我们可以在服务端跟踪所有的请求:接口地址, Header , Body ,后端返回的 Header 、 Body ,这样我们就能查到对应的请求参数和返回值,可以直接填到 Postman 里面,要是还能一键重新请求就好了,因为我们不想修改请求的参数,只是想再以相同的参数请求一遍,这样我们来调试对应的程序。

    正好以前用过 ngrok ,发现它有一个非常好的 debug 界面,可以达到以上的要求,但现在不需要它的内网穿透功能,于是只能自己写一个程序,只包含以下功能:

    • 记录接口所有的 Request 和 Response
    • 可以一键重新请求某个 Request

    基本工作原理

    HTTP 客户端                   Boast                       Web 服务器
    | GET http://localhost:8080/   | 记录请求并进行反向代理      | Response 200 OK
    | ---------------------------> | --------------------------> | ------┐
    |                              |                             |       |
    |                              | 记录返回信息并转发给客户端       |  <----┘
    | <--------------------------- | <-------------------------- |
    
    ┌----------------------------------------------------------------------------┐
    | url: http://localhost:8081                                                 |
    | ---------------------------------------------------------------------------|
    | All Transactions         ┌ - - - - - - - - - - - - - - - - - - - - - - - ┐ |
    | ----------------------   | time: 10 hours ago  Client: 127.0.0.1         | |
    | |GET / 200 OK 100 ms |   |                                               | |
    | ----------------------   | Request                      [ Replay ]       | |
    |                          | -   -   -   -   -   -   -   -   -   -   -   - | |
    |                          | GET http://localhost/ HTTP/1.1                | |
    |                          | User-Agent: curl/7.51.0                       | |
    |                          | Accept: */*                                   | |
    |                          |                                               | |
    |                          | Response                                      | |
    |                          | -   -   -   -   -   -   -   -   -   -   -   - | |
    |                          | HTTP/1.1 200 OK                               | |
    |                          | X-Server: HTTPLab                             | |
    |                          | Date: Thu, 02 Mar 2017 02:25:27 GMT           | |
    |                          | Content-Length: 13                            | |
    |                          | Content-Type: text/plain; charset=utf-8       | |
    |                          |                                               | |
    |                          | Hello, World                                  | |
    |                          └ - - - - - - - - - - - - - - - - - - - - - - - ┘ |
    |                                                                            |
    └----------------------------------------------------------------------------┘
    

    最近正在学习 Go ,正好拿它来完成这个小程序,取名为 Boast 为了让我们在重现 Bug 上更为主动和方便,以及更快地修复,好多花点时间来造轮子!

    Boast 项目地址

    Go 和前端都是现学现卖,欢迎大家拍砖。

    第 1 条附言  ·  2017-04-01 09:08:42 +08:00
    准备再加个功能,就是导出 Postman 能识别的格式,这样如果要基于某个请求去修改请求数据就变得非常方便了。
    7 条回复    2017-04-04 20:45:46 +08:00
    cai314494687
        1
    cai314494687  
       2017-03-31 18:13:03 +08:00   ❤️ 1
    点赞
    lj61785636
        2
    lj61785636  
       2017-03-31 19:16:16 +08:00 via iPhone   ❤️ 1
    支持一下
    bobchengbin
        3
    bobchengbin  
    OP
       2017-03-31 19:33:45 +08:00
    @cai314494687 @lj61785636 灰常感谢, :)
    mingyun
        4
    mingyun  
       2017-03-31 23:11:42 +08:00   ❤️ 1
    star + 1
    fhefh
        5
    fhefh  
       2017-04-03 10:26:43 +08:00   ❤️ 1
    nice mark
    nnfish
        6
    nnfish  
       2017-04-04 19:47:58 +08:00   ❤️ 1
    star
    bobchengbin
        7
    bobchengbin  
    OP
       2017-04-04 20:45:46 +08:00
    @mingyun @fhefh @nnfish 感谢支持
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   930 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:36 · PVG 05:36 · LAX 13:36 · JFK 16:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.