背景
校驗系統的正確性和可靠性時,僅靠用例場景無法覆寫全生產環境下的所有場景,需要一套引流工具,在系統正式上線前用線上的請求測驗待上線系統,在正常請求下了解是否有報錯、在數倍請求下了解系統的性能瓶頸,常用的引流工具有GoReplay、tcpcopy等,
豬齒魚效能平臺自動化測驗模塊流量回歸測驗功能,主要使用GoReplay錄制產品界面中的操作產生的HTTP請求及回應用于生成流量檔案,然后將其匯入Choerodon平臺生成用例進行管理與執行,本文通過GoReplay的介紹及GoReplay在豬齒魚效能平臺中的實踐,幫助大家理解豬齒魚流量回歸測驗的概念及使用,
關于GoReplay
GoReplay,原名叫gor,因為其易上手,且功能比較全所以我們使用GoReplay進行流量錄制,GoReplay是在投入生產之前使用真實流量測驗應用程式最簡單和最安全的方式,
隨著應用程式的增長,測驗所需的作業量也呈指數增長,GoReplay提供了重復使用現有流量進行測驗的簡單想法,這使得它非常強大,可以分析和記錄應用程式流量,且不影回應用,消除了將第三方組件置于關鍵路徑中帶來的風險,

GoReplay的安裝
-
下載地址:https://github.com/buger/goreplay/releases
-
然后在環境中輸入指令:
--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壓縮檔案,,
- 然后對其解壓輸入指令:
--tar vxf gor_1.1.0_x64.tar.gz
檔案解壓過分我們得到了一個gor檔案;我們將gor檔案移動到path環境下,這樣我們就可以使用gor命令進行流量錄制了,
GoReplay的基本指令
--input-raw- 用于捕獲HTTP流量,您應該指定IP地址或介面和應用程式埠,--input-file- 接受之前使用的檔案--output-file,--input-tcp- 如果您決定將來自多個轉發器Gor實體的流量轉發給它,則由Gor聚合實體使用,
可用輸出:
-
--output-http- 重放HTTP流量到給定的端點,接受基礎URL, -
--output-file- 記錄傳入的流量到檔案, -
--output-tcp- 將傳入資料轉發給另一個Gor實體, -
--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是gor程式的行程PID,在我們錄制完成后可以利用此PID進行終止gor,
1.4 這時gor已經開始進行流量錄制了,此時測驗人員可以開始在被測系統進行測驗,此段時間的測驗發出的請求會被錄制,
測驗人員在正式錄制相關的功能之前,建議重繪頁面以請求 self 介面獲取當前用戶資訊,這個介面的回應便于之后匯入流量檔案時決議用例,如果既沒有錄制到 self 介面,也沒有在匯入時提供用戶資訊獲取介面,則在無法決議請求所屬用戶的情況下,請求生成的用例會被忽略,
1.5 在錄制一段時間的流量后,我們執行以下命令終止gor的錄制輸入一下命令:
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.通過搜索欄中的各個選項定位到目標用例,
此處的一般步驟為: - 在快速篩選的搜索欄中選擇
含數值用例,先篩出所有含有數值的用例, - 在具體欄位中,選擇為:POST,以篩出目標用例, - 選擇想要處理的功能塊所在的選單,或在搜索條件中輸入相關內容,來進一步縮小搜索的范圍, - 最后,在篩出的用例請求中逐一找出目標用例,
? 2.勾選出一個目標用例,點擊下方的添加變數提取的按鈕,右側會彈出變數提取的界面,
選擇提取的來源:一般為回應體JSON,此處需根據提取的目標變數的位置與格式而定;支持選擇回應體JSON、回應體XML、回應體文本與回應頭,
輸入變數名稱:此處輸入的變數名稱,會作為后續用例參考的變數,
選擇器:需通過選擇器定位到提取的變數所在的位置,
變數提取成功后,還需要對請求中使用了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
本文由豬齒魚技術團隊原創,轉載請注明出處
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/378143.html
標籤:其他
