日常大部分的測試工作都是在測試環境下,通過模擬使用者的行為來對系統進行驗證,包括功能以及效能。在這個過程中,你可能會遇到以下問題:
使用者訪問行為比較複雜,模擬很難和使用者行為一致,模擬不夠真實;
線下模擬場景有限,會出現業務覆蓋不全的情況。
引流測試的出現就是為了解決以上問題,它的本質是:通過把線上的真實流量複製到線下環境,解決測試環境模擬不夠真實,或覆蓋不夠全面的問題。
目前不少公司對引流測試進行了實踐探索,常見的有以下4種引流方式(不限):
上述的幾種引流方式各有利弊,有的是需要自己開發相應的工具來支援。而今天給大家介紹的是另外一款簡單易用,學習成本低的引流工具gor。
gor,又稱為goreplay,是採用golang 編寫的乙個開源的 http 實時流量複製工具。它只需要在 lb 或者 varnish 入口伺服器上執行乙個程序,就可以把生產環境的流量複製到任何地方,比如 staging 環境、dev 環境。常用於壓測及線上問題復現。
注:golang 是採用gor 實現且開源的,意味著可以方便的整合到自己的架構中,可以用在壓力測試平台、實時流量分析、應用層防火牆等方面。監聽伺服器捕獲http流量並將其傳送到重放伺服器或儲存到檔案,重播伺服器將流量**給給定的位址。
注:gor不是**人,不需要將第三方工具放到關鍵路徑上。相反,gor只是默默地分析你的應用程式的流量,並不影響本身程式。1、gor 支援流量的放大和縮小、頻率限制,這樣不需要搭建和生產環境一致的伺服器集群也可以正確測試。2、gor 還支援根據正規表示式過濾流量,這意味著可以單獨測試某個 api 服務。
3、gor還可以修改 http 請求頭,比如替換 user-agent, 或者增加某些 http header 。
4、gor 還可以把請求記錄到檔案,以備回放和分析。gor 支援和 elasticsearch 整合,將流量存入 es 進行實時分析。
可用輸入:
–input-file- 接受之前使用的檔案–output-file。更多關於儲存和從檔案重播
–input-tcp - 如果您決定將來自多個**器gor例項的流量**給它,則由gor聚合例項使用。閱讀關於使用aggregator-forwarder設定。
可用輸出:
–output-file - 記錄傳入的流量到檔案。更多關於儲存和從檔案重播
–output-stdout - 用於除錯,輸出所有資料到stdout。
更多引數,可查閱官網文件。
1、流量實時複製引流(–input-raw 攔截埠配合–output-http輸出),例如將本機80埠的http流量實時複製到targer_server:8080。
2、如果目標伺服器使用的庫與線上機器一樣,且只需要引流get方法的請求。
3、當需要對線上服務進行整體效能壓測時,可將線上請求擴大n倍,進行引流,將請求擴大1倍,也可縮小,調整"|"後面的百分比即可。
4、只複製某個url請求,–http-allow-url引數,-http-allow-url引數可用正規表示式(–output-http-url-regexp在gor 0.16已經過期,使用–http-allow-url代替)。
5、多目標伺服器的流量複製引流,有點類似nginx的mirror。
6、將流量**到多個端點,預設情況下,它會將相同的流量傳送到所有輸出。
7、將相同的流量傳送到多個站點,並且平分所有流量。
8、http超時,預設情況下,http請求和響應的超時時間為5秒。你可以像這樣覆蓋它:
9、基本身份驗證,如果您的開發或登台環境受基本身份驗證保護,那麼可以在重放期間注入這些憑據:
可以將流量複製到檔案,然後再對他們進行回放。回放的時候,流量會維持原始的時間間隔。如果你使用了百分比來進行速率限制,那麼回放的速率會相應的增加或減少。有了這種速率限制,gor就可以用來進行壓力測試。
目前,input-file僅在使用基於百分比的限制器時才支援此功能。與預設限制器不同input-file,它不會降低請求速度,而會減慢速度或加速請求發射。
./gor --input-raw :8000 --output-file=requests.gor
執行錄製命令後,將會建立新檔案並不斷向其寫入所有捕獲的請求。
您應該看到所有記錄到http://localhost:8001的請求,並且它們將以相同的順序重播,並且與錄製的時間完全相同。./gor --input-file requests.gor --output-http="http://localhost:8001"
gor的用法也遠不止上述提到的這些,更多的應用測試場景,還請讀者自行挖掘。
簡單易用的leetcode開發測試工具(npm)
最近在用es6解leetcode,當問題比較複雜時,有可能修正了新的錯誤,卻影響了前面的流程。要用通用的測試工具,卻又有殺雞用牛刀的感覺,所以就寫了個簡單易用的leetcode開發測試工具,分享與大家。npm i leetcode test codes let test require leetco...
簡單易用的leetcode開發測試工具(npm)
最近在用es6解leetcode,當問題比較複雜時,有可能修正了新的錯誤,卻影響了前面的流程。要用通用的測試工具,卻又有殺雞用牛刀的感覺,所以就寫了個簡單易用的leetcode開發測試工具,分享與大家。npm i leetcode test codes let test require leetco...
Web 應用效能和壓力測試工具 Gor
web 應用壓力測試工具有很多,比如 apache ab,node ab,apache jmeter,loadrunner,httperf。但是這些工具都沒能解決乙個問題 如今 web 應用的架構變得非常複雜,內部包含複雜的各種負載均衡 服務和 rpc 呼叫關係,簡單的傳送 get 請求到某些 ur...