分享一個小工具 Boast:如何從服務端跟蹤所有 HTTP 請求,並方便回放?

dcb9發表於2017-03-31

原文連結:http://blog.phpor.me/note/2017/03/31/track-and-replay-http-request.html 客戶端工程師:“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 和前端都是現學現賣,歡迎大家拍磚。

相關文章