引流工具GoReplay簡介和在豬齒魚效能平臺中的應用

豬齒魚效能平臺發表於2021-10-18

背景

校驗系統的正確性和可靠性時,僅靠用例場景無法覆蓋全生產環境下的所有場景,需要一套引流工具,在系統正式上線前用線上的請求測試待上線系統,在正常請求下了解是否有報錯、在數倍請求下了解系統的效能瓶頸。常用的引流工具有GoReplay、tcpcopy等。

豬齒魚效能平臺自動化測試模組流量回歸測試功能,主要使用GoReplay錄製產品介面中的操作產生的HTTP請求及響應用於生成流量檔案,然後將其匯入Choerodon平臺生成用例進行管理與執行。本文通過GoReplay的介紹及GoReplay在豬齒魚效能平臺中的實踐,幫助大家理解豬齒魚流量回歸測試的概念及使用。

關於GoReplay

GoReplay,原名叫gor,因為其易上手,且功能比較全所以我們使用GoReplay進行流量錄製。GoReplay是在投入生產之前使用真實流量測試應用程式最簡單和最安全的方式。

隨著應用程式的增長,測試所需的工作量也呈指數增長。GoReplay提供了重複使用現有流量進行測試的簡單想法,這使得它非常強大。可以分析和記錄應用程式流量,且不影響應用,消除了將第三方元件置於關鍵路徑中帶來的風險。

GoReplay的工作原理框圖:

GoReplay的安裝

  1. 下載地址:https://github.com/buger/goreplay/releases
  2. 在環境中輸入指令:

--wget https://github.com/buger/goreplay/releases/download/v1.1.0/gor_1.1.0_x64.tar.gz

這樣我們就能獲取到gor_1.1.0_x64.tar.gz壓縮檔案,。

  1. 然後對其解壓輸入指令:

--tar vxf gor_1.1.0_x64.tar.gz

檔案解壓過分我們得到了一個gor檔案;我們將gor檔案移動到path環境下,這樣我們就可以使用gor命令進行流量錄製了。

GoReplay的基本指令

  • --input-raw- 用於捕獲HTTP流量,您應該指定IP地址或介面和應用程式埠。
  • --input-file- 接受之前使用的檔案--output-file
  • --input-tcp- 如果您決定將來自多個轉發器GoReplay例項的流量轉發給它,則由GoReplay聚合例項使用。

可用輸出:

  • --output-http- 重放HTTP流量到給定的端點,接受基礎URL。
  • --output-file- 記錄傳入的流量到檔案。
  • --output-tcp- 將傳入資料轉發給另一個GoReplay例項。
  • --output-stdout- 用於除錯,輸出所有資料到stdout。

GoReplay在豬齒魚效能平臺中的實踐

1.錄製流量

1.1 首先我們先在伺服器中安裝Gor_1.1.0

1.2 然後輸入命令以下命令:

sudo nohup gor --input-raw :8080 \ # 監聽服務的埠(預設閘道器的埠為8080) -http-allow-method GET \ # 只錄制GET,POST,PUT,DELETE四種方法的請求 -http-allow-method POST\
-http-allow-method PUT\
-http-allow-method DELETE\
-input-raw-track-response \ # 捕獲響應報文 -input-raw-timestamp-type PCAP_TSTAMP_HOST \ # 指定時間戳格式 -input-raw-buffer-size 32mb \ # 控制用於持有TCP包的系統快取大小 -prettify-http \ # 自動解碼 Content-Encoding:gzip 和 Transfer-Encoding:chunked的請求和響應 -output-file-append \ # 追加到檔案,使得最終只生成一個.gor檔案 -output-file requests.gor & # 指定結果檔名稱。

這些命令的含義是監聽服務的埠並開始錄製指定的請求型別的請求,例如這裡錄製的請求型別是:GET,PSOT,PUT和DELETE。捕獲響應報文並把這些請求追加到檔案,像這裡生成的檔名叫“requests.gor”。

1.3 在命令執行後,輸出如下:

這裡顯示的【1】19436是GoReplay程式的程式PID,在我們錄製完成後可以利用此PID進行終止GoReplay。

1.4 這時GoReplay已經開始進行流量錄製了,此時測試人員可以開始在被測系統進行測試,此段時間的測試發出的請求會被錄製。

測試人員在正式錄製相關的功能之前,建議重新整理頁面以請求 self 介面獲取當前使用者資訊,這個介面的響應便於之後匯入流量檔案時解析用例,如果既沒有錄製到 self 介面,也沒有在匯入時提供使用者資訊獲取介面,則無法解析請求所屬使用者、請求生成的用例也將被忽略。

1.5 在錄製一段時間的流量後,我們執行以下命令終止GoReplay的錄製輸入一下命令:

sudo kill -15 ${gor`程式PID}`

像我們這裡的輸入sudo kill -15 ${19436}命令就可以終止gor程式。

1.6 此時,可以看到執行錄製指令的目錄下,得到一份檔名為 requests.gor 的流量檔案。到此,錄製完畢。

2.匯入流量檔案

2.1 我們進入豬齒魚流量回歸測試頁面:

2.2 點選流量回歸測試右上方的匯入流量檔案,進入流量匯入介面:

2.3選擇用於放置生成用例的目錄,我們這裡選擇的是測試合集目錄,點選上傳按鈕,上傳我們剛才錄製的requests.gor檔案,確定上傳檔案後,下方會立刻生成一條檔案的匯入記錄。

如果匯入用例為0條,可能有以下原因: ①__錄製期間,被測系統未關閉主鍵加密功能; ②__錄製期間,未請求 self 介面獲取使用者資訊,且匯入時未提供使用者資訊獲取介面; ③__提供使用者資訊獲取介面,但是錄製的流量檔案時間過長,超過了使用者的 Token 過期時間,導致流量檔案中涉及到的請求的認證資訊已經過期了,無法識別使用者,所以無法生成用例; ④__所有的請求都不是 json 型別的請求 ⑤__所有的請求的方法都不是 GET、POST、PUT或DELETE。

2.4 待檔案匯入成功後,所選的目錄下將會生成對應的用例。列表中會展示各個用例對應的路徑、請求方式、選單、使用者以及請求時間。

  • 路徑:即用例中請求的路徑。
  • 請求方式:即用例中請求的請求方式。
  • 選單:即用例中對應請求所屬的選單。
  • 使用者:即在錄製過程中,執行此次請求的使用者名稱。
  • 請求時間:即錄製過程中,該請求對應的執行時間。

3.用例批量處理

3.1 由於我們通過匯入流量檔案得到的用例內,各個請求使用的ID引數在之後的執行過程中會產生變化。因此我們需要通過用例批量處理的功能將用例內各個請求路徑、請求引數、請求體中的ID引數替換為變數。

在此之前,我們還需要選擇一個POST型別的請求,將其響應體中生成的ID作為變數提取出來,以供後續的用例進行引用。

首先在頁面左側的樹結構內選中一個流量回歸集合,而後點選頂部的用例批量處理按鈕,右側會出現批量處理的頁面。

3.2使用搜尋欄進行用例篩選,支援的搜尋方式有:

  • 輸入搜尋條件查詢:可搜尋任意內容,下方的列表中將會顯示出路徑、請求與響應中含有搜尋值的對應用例。
  • 快速篩選:預置的快速篩選為含數值用例,可直接搜尋出路徑、請求與響應中含有數值的所有用例,用於幫助進一步縮小ID查詢範圍。同時,儲存的自定義篩選條件也將存放到快速篩選的下拉框中。
  • 請求方式篩選:允許篩出GET、POST、PUT與DELETE型別的用例請求。
  • 用例狀態篩選:支援篩選出處理完成未處理狀態的用例請求。
  • 正則篩選:支援使用正規表示式來篩選出滿足條件的用例請求。
  • 目錄篩選:支援篩選出各個目錄下的用例請求。
  • 選單篩選:支援篩選出對應選單下的用例請求。
  • 具體欄位:用於指定搜尋值的定位生效區域。支援定位到:路徑、請求頭、請求引數、請求體、響應頭與響應體。

​​​​​​​

3.3提取頁面中的變數,在此介面中,需要將生成ID的用例請求找到,並將其響應體中的ID引數作為變數提取出來。具體步驟如下:

  1. 通過搜尋欄中的各個選項定位到目標用例。
  2. 此處的一般步驟為: - 在快速篩選的搜尋欄中選擇含數值用例,先篩出所有含有數值的用例。 - 在具體欄位中,選擇為:POST,以篩出目標用例。 - 選擇想要處理的功能塊所在的選單,或在搜尋條件中輸入相關內容,來進一步縮小搜尋的範圍。 - 最後,在篩出的用例請求中逐一找出目標用例。
  3. 勾選出一個目標用例,點選下方的新增變數提取的按鈕,右側會彈出變數提取的介面。
  4. 選擇提取的來源:一般為響應體JSON,此處需根據提取的目標變數的位置與格式而定;支援選擇響應體JSON、響應體XML、響應體文字與響應頭。
  5. 輸入變數名稱:此處輸入的變數名稱,會作為後續用例引用的變數。
  6. 選擇器:需通過選擇器定位到提取的變數所在的位置。

變數提取成功後,還需要對請求中使用了ID引數的用例進行批量的ID替換,將其替換為提取出的變數。使用此功能,可以批量地將可以配置的引數提取為變數,例如提取請求中常見的專案ID、租戶ID或者其它的資源ID。

  • 值替換功能:

    • 選擇替換區域:支援選擇路徑、請求引數、請求頭、請求體、響應頭、響應體;用於定位所有選中的用例需要進行替換的具體區域。
    • 輸入源值:即之前的ID引數的準確值。後續會將這個ID數值替換為已經提取出的變數。
    • 輸入替換值:在此輸入需要引用的變數即可。

例:之前提取出的變數名稱為id,此處就輸入:${id}

  • 用例狀態替換:直接在下拉框中選擇需要將所選的用例請求變為的目標狀態;對於已經處理完成的用例請求,直接批量將其置為處理完成的狀態即可。回到列表之後,這些用例的狀態就變為了處理完成

總結

豬齒魚全場景效能平臺流量回歸測試通過GoReplay批量錄製產品介面操作,並將得到的用例進行集中管理,便於後續進行批量的迴歸測試,從很大程度上減輕了測試人員編寫指令碼、收集測試資料等重複且耗時的工作,提升團隊的測試效能。

參考資料

https://www.cnblogs.com/sunsky303/p/9072871.html

https://blog.csdn.net/xqtesting/article/details/109722583


本文由豬齒魚技術團隊原創,轉載請註明出處:豬齒魚官網

關於豬齒魚

豬齒魚Choerodon全場景效能平臺,提供體系化方法論和協作、測試、DevOps及容器工具,幫助企業拉通需求、設計、開發、部署、測試和運營流程,一站式提高管理效率和質量。從團隊協同到DevOps工具鏈、從平臺工具到體系化方法論,豬齒魚全面滿足協同管理與工程效率需求,貫穿端到端全流程,助力團隊效能更快更強更穩定。戳此處試用豬齒魚

相關文章