通用流量錄製回放工具 jvm-sandbox-repeater 嚐鮮 (四)——新版帶介面 console 的使用
前言
在去年repeater剛出來的時候,就已經簡單體驗了一下,也有在公司試用。但由於各種原因,最終沒有落地。現在剛好有機會再研究一下,看官方記錄 console 終於加上了介面,所以也試用並記錄下來。
其它文章連結傳送門:
通用流量錄製回放工具 jvm-sandbox-repeater 嚐鮮記錄 (0716 跑通基於 console 的錄製回放)
通用流量錄製回放工具 jvm-sandbox-repeater 嚐鮮 (二)——repeater-console 使用 (已完成)
通用流量錄製回放工具 jvm-sandbox-repeater 嚐鮮 (三)—— repeater plugin 開發 (完成度 50%)
步驟
由於官方原始碼有做了比較多調整,所以這次記錄還是從零開始。
- 1、安裝 repeater
執行官方倉庫下的 bin/install-repeater.sh
即可
- 2、調整 repeater 模式配置,改為用 console
修改 ~/.sandbox-module/cfg/repeater.properties 的值,repeat.standalone.mode 改為 false
- 3、調整 console 工程中對應配置
在 repeater-console/repeater-console-start/src/main/resources/application.properties
,調整 mysql 相關配置,改為和自己本地 mysql 資料庫一致
同時請初始化資料庫內容,初始化的sql檔案在:repeater-console/repeater-console-dal/src/main/resources/database.sql
初始化成功,應該會建立了 repeater 這個資料庫,且包括下面四個表:
- 4、啟動 console 和被測服務
啟動被測服務:
4.1、下載示例專案:https://github.com/chenhengjie123/gs-rest-service
4.2、啟動示例專案:
# 在示例專案 clone 後的根目錄中執行
cd complete
mvn install && java -jar target/*.jar
啟動成功後,應該有類似如下日誌:
...
2020-12-28 07:40:45.949 INFO 32158 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2020-12-28 07:40:45.952 INFO 32158 --- [ main] hello.Application : Started Application in 2.062 seconds (JVM running for 2.448)
4.3、修復官方倉庫裡 console 一些程式碼問題。
4.3.1、把 repeater-console/repeater-console-start/src/main/resources/velocity
下面的所有檔案,查詢 #parse("/blocks
,統一改替換為 #parse("blocks
。原有程式碼最前面帶上 /
會導致引用找不到報錯
4.3.2、修改 repeater-console/repeater-console-start/src/main/java/com/alibaba/repeater/console/start/controller/page/ReplayController.java
中的 return "/replay/detail";
,改為 return "replay/detail";
,去掉雙引號裡面第一個 /
4.3.3、修改 repeater-console/repeater-console-start/src/main/java/com/alibaba/repeater/console/start/controller/test/RegressPageController.java
中的 return "/regress/index";
,改為 return "regress/index";
,去掉雙引號裡面第一個 /
4.4、啟動 console:
# 在 repeater 專案根目錄進行
mvn install -DskipTests && java -jar repeater-console/repeater-console-start/target/*.jar
啟動成功,應該出現類似下面的日誌:
...
2020-12-28 07:40:27.259 INFO 32116 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8001 (http)
2020-12-28 07:40:27.265 INFO 32116 --- [ main] c.a.repeater.console.start.Application : Started Application in 7.532 seconds (JVM running for 8.065)
- 5、使用介面化的 console 進行錄製回放
開啟此 url 即可開啟 console 的介面:http://127.0.0.1:8001/regress/index.htm
現在,藉助介面來做一次錄製回放吧。基本套路還是一樣的:
5.1、在 console 增加配置,用於對接應用(注意這個和之前純命令列有點不同,命令列是先完成第二步)
5.2、讓 repeater 注入到被測應用,上報資料到 console
5.3、在 console 中操作,進行錄製和回放
接下來,一步一步操作。
5.1、在 console 增加配置,用於對接應用
點選左側的 【配置管理】,新增如下配置:
應用名:unknown
環境:unknown
配置資訊
{
"useTtl" : true,
"degrade" : false,
"exceptionThreshold" : 1000,
"sampleRate" : 10000,
"pluginsPath" : null,
"httpEntrancePatterns" : [ "^/greeting.*$" ],
"javaEntranceBehaviors" : [ {
"classPattern" : "hello.GreetingController",
"methodPatterns" : [ "greeting" ],
"includeSubClasses" : false
} ],
"javaSubInvokeBehaviors" : [],
"pluginIdentities" : [ "http", "java-entrance", "java-subInvoke", "mybatis", "ibatis" ],
"repeatIdentities" : [ "java", "http" ]
}
點選【儲存】,存下配置
5.2、讓 repeater 注入到被測應用
sh ~/sandbox/bin/sandbox.sh -p `ps -ef | grep "target/gs-rest-service-0.1.0.jar" | grep -v grep | awk '{print $2}'` -P 12580
然後進入 console 的【線上模組】,應該能看到增加了當前這個被測應用的心跳記錄:
5.3、開始錄製。給這個被測應用輸送一些流量
# 手動發出2條請求
$ curl -s 'http://localhost:8080/greeting'
{"id":1,"content":"Hello, World!"}%
$ curl -s 'http://localhost:8080/greeting?name=User'
{"id":2,"content":"Hello, User!"}%
然後開啟 console 的【線上流量】,能看到剛發出的兩條請求已經錄製下來了:
5.4、回放請求。直接點選第一行末尾的回放按鈕,進行回放:
然後,就可以看到回放結果了。稍等幾秒後重新整理下回放結果介面,就能看到執行結果
由於被測應用實際上 id 自增邏輯沒有依賴任何外部服務,每次請求都會自動 +1 ,所以回放記錄是失敗的。
總結
官方的文件還是一如既往的少,程式碼裡面也有點坑(對 velocity 不熟悉,上面的程式碼只是按自己理解改的,如果有更正確的修改姿勢歡迎分享),介面和技術棧都用的比較小眾和比較久遠的的(spring-boot 17年已經去掉對 velocity 模板引擎的支援了)。 而且一個批量回放功能還是隻有按鈕實際沒做的。。。
不過也算是給到大家一個真正示例控制檯該有的樣子,把需要的元素和介面設計都基本給出了。如果想要開箱即用,對 http 介面進行簡單的錄製回放,可以使用這個帶介面的 console 來試用一下。
附錄:過程中的報錯及解決
1、注入 repeater 到被測應用後,console 報錯:
2020-12-28 23:37:28.822 ERROR 39333 --- [nio-8001-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException: null
at com.alibaba.repeater.console.start.controller.api.ConfigFacadeApi.getConfig(ConfigFacadeApi.java:34) ~[classes!/:na]
at sun.reflect.GeneratedMethodAccessor77.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_25]
原因:上報心跳包後,appName 和 environment 和配置對不上。
解決:請確認有至少一個配置,appName 和 environment 都是 unknown
2、報錯 org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource '/blocks/pager.vm'] with root cause ,且介面打不開
原因:沒有按照前面所述修改 console 原始碼,導致引用其他模板的部分根目錄不正確。
解決:按照前面描述,把 #parse("/blocks
,統一改替換為 #parse("blocks
即可。
相關文章
- 流量錄製回放工具jvm-sandbox-repeater入門篇——錄製和回放JVM
- 流量錄製回放工具jvm-sandbox-repeater入門篇——服務部署JVM
- 流量回放框架 jvm-sandbox-repeater 實踐二框架JVM
- 流量錄製與回放在vivo的落地實踐
- Flutter新版本 Web App 嚐鮮FlutterWebAPP
- 【穩定性平臺】GOREPLAY流量錄製回放實戰Go
- 流量回放系統的設計與實現--流量錄製模組
- 嚐鮮:Gradle構建SpringBoot(2.3.1最新版)GradleSpring Boot
- Julia 嚐鮮
- 訂單流量錄製與回放探索實踐|得物技術
- Vue嚐鮮快速、零配置的打包工具—parcel~Vue
- 月光寶盒(vivo流量錄製回放平臺)正式對外開源
- React Loops 嚐鮮ReactOOP
- React Suspense 嚐鮮React
- .Net8 Blazor 嚐鮮Blazor
- Vue.js 2.6嚐鮮Vue.js
- Go 1.17 泛型嚐鮮Go泛型
- Windows 10 週年版嚐鮮Windows
- 利用Conda嚐鮮Python 3.10Python
- 鴻蒙系統嚐鮮鴻蒙
- win10自帶錄製工具如何錄製桌面_win10自帶錄屏怎麼錄桌面Win10
- 12.3 實現模擬滑鼠錄製回放
- TiDB 4.0 新特性嚐鮮指南TiDB
- 如何讓線上錄製回放落地的具體思路
- UI 自動化錄製與回放系統UI
- HTML5中dialog元素嚐鮮HTML
- Spring Cloud Gateway 閘道器嚐鮮SpringCloudGateway
- Oracle 19c 安裝嚐鮮Oracle
- Linux終端回話記錄和回放工具 - asciinema使用總結LinuxASCII
- UI 測試的作業系統級別的錄製 / 回放UI作業系統
- 嚐鮮少程式碼高效能的Svelte框架框架
- 錄製回放模式建立測試用例 - Katalon Studio模式
- 【轉】Kinect嚐鮮(1)——第一個程式
- ent orm筆記1---快速嚐鮮ORM筆記
- Webpack5.0 新特性嚐鮮實戰 ??Web
- 自動化測之各流量回放技術工具對比
- [jvm-sandbox-repeater 學習筆記][原理說明篇] 1 錄製流程JVM筆記
- TCPCopy 線上流量複製工具TCP