What
關(guān)于goreplay
首先什么是goreplay?
參照官方介紹
GoReplay is the simplest and safest way to test your app using real traffic before you put it into production.
GoReplay提供了重用現(xiàn)有流量進(jìn)行測(cè)試的簡(jiǎn)單想法淆两。
大致工作流程如下:
簡(jiǎn)單來說就是goreplay抓取線上真實(shí)的流量碰缔,并將捕捉到的流量轉(zhuǎn)發(fā)到測(cè)試服務(wù)器上
When
什么時(shí)候可以試用goreplay?
簡(jiǎn)單寫幾點(diǎn)場(chǎng)景,具體還是根據(jù)實(shí)際需求來。
- Case 1
上線前在預(yù)發(fā)布環(huán)境社付,使用線上真實(shí)的請(qǐng)求丧肴,檢查是否準(zhǔn)備發(fā)布的版本,是否具備發(fā)布標(biāo)準(zhǔn) - Case 2
壓力測(cè)試完成后昏苏,用線上真實(shí)的請(qǐng)求,加速后回放至測(cè)試環(huán)境,檢查是否有報(bào)錯(cuò)等問題 - Case 3
abtest
用線上的流量轉(zhuǎn)發(fā)到預(yù)發(fā)贤惯,檢查相同流量下一些指標(biāo)的反饋情況洼专,檢查核心數(shù)據(jù)是否有改善、優(yōu)化
等等
具體case還需要根據(jù)自己的需求孵构,靈活改變屁商。
How
上面大致說了goreplay是什么以及什么場(chǎng)景可以用,下面記錄一下自己的實(shí)踐過程颈墅。
首先需要線上服務(wù)器root權(quán)限蜡镶,這個(gè)需要謹(jǐn)慎使用!P羯浮官还!
1.下載安裝goreplay
參照文檔,這一步很簡(jiǎn)單
wget [https://github.com/buger/goreplay/releases/download/v1.0-rc2/gor_1.0-RC2_x64.tar.gz](https://github.com/buger/goreplay/releases/download/v1.0-rc2/gor_1.0-RC2_x64.tar.gz)
tar xvf gor_1.0-RC2_x64.tar.gz
2.一些常用的命令
-input-raw 抓取指定端口的流量 gor --input-raw :8080
-output-stdout 打印到控制臺(tái)
-output-file 將請(qǐng)求寫到文件中 gor --input-raw :80 --output-file ./requests.gor
-input-file 從文件中讀取請(qǐng)求毒坛,與上一條命令呼應(yīng) gor --input-file ./requests.gor
-exit-after 5s 持續(xù)時(shí)間
-http-allow-url url白名單望伦,其他請(qǐng)求將會(huì)被丟棄
-http-allow-method 根據(jù)請(qǐng)求方式過濾
-http-disallow-url 遇上一個(gè)url相反,黑名單煎殷,其他的請(qǐng)求會(huì)被捕獲到
實(shí)踐一下
- 捕獲2051端口的請(qǐng)求打印到控制臺(tái)
隱藏了部分敏感信息
sudo ./gor --input-raw :2051 --output-stdout
Version: 1.0-RC2
1 45aea8cbxxxxxxx61a7600f384b263bb49dd60 1551432827638974877
POST /absoxxxxlar HTTP/1.1
Host: inner-xxxxxxxx.com
Accept: */*
Content-Length: 259
Content-Type: application/x-www-form-urlencoded
{"page":1,"count":10,"group":"exp_xxxxxr08","content_id":"77769a95f43438xxxx7f2e82c742","uid":"69xxxx68","device_code":"86093xxxxx2318","register_timestamp":1xxxxx75,"sex":0,"channel":"bxxxu","flavor":"","fancy":"","district":"\u5b81\u6ce2\u5e02"}
1 1944f453259c95c1cc8b4cf1227104ed791c428c 1551432827642028761
POST /sixxxxxlar HTTP/1.1
Host: inner-xxxxxx.com
Accept: */*
Content-Length: 259
Content-Type: application/x-www-form-urlencoded
{"page":1,"count":10,"group":"expxxxx07","content_id":"9142a79e98b7xxxxxa67eaecd9de1","uid":"98xxxxx459","device_code":"868xxxx34136943","register_timestamp":15xxxx5663,"sex":2,"channel":"gdt79","flavor":"","fancy":"","district":"\u8861\u9633\u5e02"}
1 28e10318f1d512f4e57b583aec4457e25daaadb6 1551432827657153296
POST /abxxxxxilar HTTP/1.1
Host: inner-xxxxxxxx.com
Accept: */*
Content-Length: 260
Content-Type: application/x-www-form-urlencoded
- 將請(qǐng)求保存到本地文件中
sudo ./gor --input-raw :2051 --http-allow-url /recommend_you_like --output-file ./recommend_you_like.gor
只篩選recommend_you_like接口的請(qǐng)求屯伞,保存在本地文件中
這邊實(shí)際上是兩個(gè)實(shí)踐
第一個(gè):保存流量到文件
第二個(gè):抓取置頂url的流量
截圖可以看到生成了一個(gè)文件
- 轉(zhuǎn)發(fā)文件中流量至測(cè)試環(huán)境
sudo ./gor --input-file ./recommend_you_like_0.gor --output-http="http://172.1.1.1:2051"
至測(cè)試環(huán)境的服務(wù)器上,查看日志可以到流量已經(jīng)轉(zhuǎn)發(fā)過來
性能測(cè)試
sudo ./gor --input-file “./recommend_you_like_0.gor|200%” --output-http="http://172.1.1.1:2051"
將請(qǐng)求以2倍的速度發(fā)出去
同時(shí)也支持限速
10% 20%等
關(guān)于限速還有另一種方法——指定每秒的請(qǐng)求數(shù)
sudo ./gor --input-file “./recommend_you_like_0.gor” --output-http="http://172.1.1.1:2051|50"
更多參考官方文檔:https://github.com/buger/goreplay/wiki/Getting-Started