Jvm-Sandbox-Repeater的部署


1.什么是jvm-sandbox-repeater?

jvm-sandbox-repeater 是 JVM-Sandbox 生態體系下的重要模塊,它具備了JVM-Sandbox 的所有特點,插件式設計便於快速適配各種中間件,封裝請求錄制/回放基礎協議,也提供了通用可擴展的各種豐富API。jvm-sandbox 是指 JVM 沙箱容器,一種 JVM 的非侵入式運行期 AOP 解決方案。

 

2.它的核心能力是什么?

2.1 通用錄制/回放能力

(1).無侵入式錄制 HTTP/Java/Dubbo 入參/返回值錄制能力(業務系統無感知)

(2).基於 TTL 提供多線程子調用追蹤,完整追蹤一次請求的調用路徑

(3).入口請求(HTTP/Dubbo/Java)流量回放、子調用(Java/Dubbo)返回值 Mock 能力

 

2.2 快速可擴展API實現

(1).錄制/回放插件式架構

(2).提供標准接口,可通過配置/簡單編碼實現一類通用插件

 

2.3. standalone工作模式

無需依賴任何服務端/存儲,可以單機工作,提供錄制/回放能力

 

3.如何部署?

3.1 Console部署

setp1: 下載源碼

git clone https://github.com/alibaba/jvm-sandbox-repeater

 

step2: 配置數據庫信息 application.properties 及初始化數據庫相關的初始化 sql 文件地址為:

./jvm-sandbox-repeater/repeater-console/repeater-console-dal/src/main/resources/database.sql

 

step3: 在服務器上配置mvn命令

如果是配置好了yum 源,可以使用以下命令直接安裝maven

yum install maven

 

step4: 編譯並啟動console命令

cd ./jvm-sandbox-repeater
mvn install -DskipTests && nohup java -jar repeater-console/repeater-console-start/target/repeater-console.jar > console.log 2>&1 &

 

3.2 Repeater部署

setp1: 在上面的源碼下載目錄下

cd ./jvm-sandbox-repeater/bin  && sh install-local.sh

install-local.sh腳本內容如下:

root@beta.ep.tx1 bin # more sh install-local.sh
#!/usr/bin/env bash
# repeater's target dir
REPEATER_TARGET_DIR=../target/repeater
# exit shell with err_code
# $1 : err_code
# $2 : err_msg
exit_on_err()
{
    [[ ! -z "${2}" ]] && echo "${2}" 1>&2
    exit ${1}
}
# package
sh ./package.sh || exit_on_err 1 "install failed cause package failed"  #此處調用到了package.sh 腳本,下面會單獨分析
# extract sandbox to ${HOME}
curl -s http://sandbox-ecological.oss-cn-hangzhou.aliyuncs.com/sandbox-1.2.1-bin.tar | tar xz -C ${HOME} || exit_on_err 1 "extract sandbox failed" #下載並解壓sandbox文件包
# copy module to ~/.sandbox-module
mkdir -p ${HOME}/.sandbox-module || exit_on_err 1 "permission denied, can not mkdir ~/.sandbox-module"  #創建目錄
cp -r ${REPEATER_TARGET_DIR}/* ${HOME}/.sandbox-module  || exit_on_err 1 "permission denied, can not copy module to ~/.sandbox-module" #復制../target/repeater目錄下的所有文件到上一個命令創建的目錄下

package.sh腳本內容如下:

root@beta.ep.tx1 bin # more package.sh 
#!/usr/bin/env bash
# repeater's target dir
REPEATER_TARGET_DIR=../target/repeater  #定義變量
# exit shell with err_code
# $1 : err_code
# $2 : err_msg
exit_on_err()
{
    [[ ! -z "${2}" ]] && echo "${2}" 1>&2
    exit ${1}
}
# maven package the sandbox
mvn clean package -Dmaven.test.skip=true -f ../pom.xml || exit_on_err 1 "package repeater failed."   #編譯打包
 
mkdir -p ${REPEATER_TARGET_DIR}/plugins  #創建目錄
mkdir -p ${REPEATER_TARGET_DIR}/cfg #創建目錄
cp ./repeater-logback.xml ${REPEATER_TARGET_DIR}/cfg/repeater-logback.xml \  #拷貝文件到repeater目錄
    && cp ./repeater.properties ${REPEATER_TARGET_DIR}/cfg/repeater.properties \
    && cp ./repeater-config.json ${REPEATER_TARGET_DIR}/cfg/repeater-config.json \
    && cp ../repeater-module/target/repeater-module-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/repeater-module.jar \
    && cp ../repeater-console/repeater-console-start/target/repeater-console.jar ${REPEATER_TARGET_DIR}/repeater-bootstrap.jar \
    && cp ../repeater-plugins/ibatis-plugin/target/ibatis-plugin-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/plugins/ibatis-plugin.jar \
    && cp ../repeater-plugins/java-plugin/target/java-plugin-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/plugins/java-plugin.jar \
    && cp ../repeater-plugins/mybatis-plugin/target/mybatis-plugin-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/plugins/mybatis-plugin.jar \
    && cp ../repeater-plugins/dubbo-plugin/target/dubbo-plugin-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/plugins/dubbo-plugin.jar \
    && cp ../repeater-plugins/redis-plugin/target/redis-plugin-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/plugins/redis-plugin.jar \
    && cp ../repeater-plugins/http-plugin/target/http-plugin-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/plugins/http-plugin.jar \
    && cp ../repeater-plugins/hibernate-plugin/target/hibernate-plugin-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/plugins/hibernate-plugin.jar \
    && cp ../repeater-plugins/spring-data-jpa-plugin/target/spring-data-jpa-plugin-*-jar-with-dependencies.jar ${REPEATER_TARGET_DIR}/plugins/spring-data-jpa-plugin.jar

repeater 日志配置文件如下:

repeater的日志路徑為:~/logs/sandbox/repeater/repeater.log  --》這是由於logback.xml 配置決定的 repeater-logback.xml文件內容如下:

root@beta.ep.tx1 bin #more repeater-logback.xml 
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="10000">
    <appender name="REPEATER-FILE-APPENDER" class="ch.qos.logback.core.rolling.Ro
llingFileAppender">
        <file>${user.home}/logs/sandbox/repeater/repeater.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">        <FileNamePattern>${user.home}/logs/sandbox/repeater/repeater.log.%d{y
yyy-MM-dd}</FileNamePattern>
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <root level="info">
        <appender-ref ref="REPEATER-FILE-APPENDER"/>
    </root>
</configuration>

 

3.3 Sandbox 部署

https://github.com/alibaba/jvm-sandbox
  1. JVM-SANDBOX(沙箱)實現了一種在不重啟、不侵入目標JVM應用的AOP解決方案

  2. 操作步驟:下載最新版本的JVM-SANDBOX

wget http://ompc.oss-cn-hangzhou.aliyuncs.com/jvm-sandbox/release/sandbox-stable-bin.zip
 
# 解壓
unzip sandbox-stable-bin.zip
 
# 進入沙箱執行腳本
cd sandbox/bin
 
#在~/sandbox/bin/sandbox.sh 啟動的cfg目錄下有一個sandbox.properties文件,目錄為/root/sandbox/cfg
sandbox.properties 文件里面指定了user_module=~/.sandbox-module
 
# 掛載目標JVM進程,這里以console應用為示例來掛載,一條命令搞定:
sh ~/sandbox/bin/sandbox.sh -p `ps -ef | grep "console" | grep -v grep | awk '{print $2}'` -P 12250  【這個命令會將console JVM進程進行掛載】

~/.sandbox-module目錄下可以看到:

root@beta.ep.tx1 .sandbox-module # tree
.
├── cfg
│   ├── repeater-config.json
│   ├── repeater-logback.xml #這個repeater 啟動后的日志配置文件
│   └── repeater.properties  #把repeater.properties里面的ip and port 修改為為console 所在機器啟動的ip and port 
├── plugins
│   ├── dubbo-plugin.jar
│   ├── hibernate-plugin.jar
│   ├── http-plugin.jar
│   ├── ibatis-plugin.jar
│   ├── java-plugin.jar
│   ├── mybatis-plugin.jar
│   ├── redis-plugin.jar
│   └── spring-data-jpa-plugin.jar
├── repeater-bootstrap.jar
└── repeater-module.jar #repeater 模塊的啟動jar

Sandbox 日志配置:

#more sandbox-logback.xml 
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="10000">
    <appender name="SANDBOX-FILE-APPENDER" class="ch.qos.logback.core.rolling.Rol
lingFileAppender">
        <file>${user.home}/logs/sandbox/sandbox.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<FileNamePattern>${user.home}/logs/sandbox/sandbox.log.%d{yyyy-MM-dd}
</FileNamePattern>
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %SANDBOX_NAMESPACE %-5level %msg%n</
pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
 
    <root level="info">
        <appender-ref ref="SANDBOX-FILE-APPENDER"/>
    </root>
</configuration>

 

4.Console部署后的啟動頁面如下圖所示

 

 

歡迎關注【無量測試之道】公眾號,回復【領取資源】
Python編程學習資源干貨、
Python+Appium框架APP的UI自動化、
Python+Selenium框架Web的UI自動化、
Python+Unittest框架API自動化、
資源和代碼 免費送啦~
文章下方有公眾號二維碼,可直接微信掃一掃關注即可。

備注:我的個人公眾號已正式開通,致力於測試技術的分享,包含:大數據測試、功能測試,測試開發,API接口自動化、測試運維、UI自動化測試等,微信搜索公眾號:“無量測試之道”,或掃描下方二維碼:


添加關注,讓我們一起共同成長!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM