在上一篇文章中,把repeater服务部署介绍清楚了,详细可见:流量录制回放工具jvm-sandbox-repeater入门篇——服务部署
今天在基于上篇内容基础上,再来分享下流量录制和回放的相关内容。
启动被测服务 克隆源码git clone https://github.com/chenhengjie123/gs-rest-service.git
这个项目是在看其他帖子看到的,是个开源的demo,我在这也引用下。
mvn install进入到项目路径:/gs-rest-service/complete,使用mvn install
命令,把项目中打好的包,放到本地仓库
出现如下界面,说明命令执行成功
在 target 目录下,可以看到,生成了一个jar包,如下所示
启动项目在 target 目录下,使用命令 java -jar gs-rest-service-0.1.0.jar
启动项目,出现如下所示内容,项目启动成功
先获取项目PID,有2种方式
方式一:在启动项目的时候,会展示PID,如上图所示
方式二:使用命令ps -ef|grep gs-rest-service-0.1.0.jar
可以获得,我这里获取到的PID是:12836,如下所示
获取到项目PID后,到 sandbox 目录 /root/sandbox/bin
下,使用命令./sandbox.sh -p 12836 -P 8002
,运行命令后,出现如下内容,说明成功
也可以通过查看sandbox日志来确定,是否有启动成功,日志如下所示:
参数说明
- p 被录制应用进程号
- P repeater启动端口,这个每个人定义的都可以不同,一定是一个未占用的端口
attach 模式下,录制应用名和录制环境这两个参数都会被默认为 unknown
attach关闭运行命令./sandbox.sh -p 12836 -S
,出现如下内容,jvm-sandbox关闭成功
该配置文件主要是控制 repeater 的日志打印路径地址以及打印等级。
一般会在需要调整日志等级的时候修改。
实际生效的配置是位于~/.sandbox-module/cfg 中的 repeater-logback.xml。
在项目的 bin 目录下也有一份 repeater-logback.xml,这份是在执行安装脚本的时候会被复制到~/.sandbox-module/cfg 下的。
每次修改这份配置,都需要重启 repeater 才能生效。
可以修改日志级别,默认是info
录制回放配置字段这个配置,主要依赖com.alibaba.jvm.sandbox.repeater.plugin.domain.RepeaterConfig类,参考之前的博文,引用下字段配置说明,如下所示:
我们通过repeater-console页面,查看对应的配置,url为:http://ip:port/regress/index.htm
服务启动,会有默认的配置,如下所示:
这里需要修改下,因为默认的配置,有些跟我们启动的项目不一样,直接编辑即可,字段说明在刚才已有讲解
在线模块以attach模式启动sandbox,环境和应用名都是unknown,如下所示:
流量录制完成上述配置后,我们来录一个请求试下,访问:http://ip:port/greeting?name=yihuqingjiu,页面返回内容,可以在启动的项目下,查看对应日志,如下所示:
验证是否有录制成功,有2种方式
页面查看直接通过repeater-console的在线流量页面查看,如果有刚操作的请求,说明录制成功,如下所示:
日志查看查看repeater日志,有相对应的成功日志,如下所示:
相对应的,可以看下数据库是否正常落值,查看record表,是有对应数据的,如下所示:
上述方式验证,说明流量录制成功了
流量回放流量回放的话,就直接点击已录制的请求,右侧有个回放按钮,直接点击即可。
我们来尝试一下,操作回放后,查看回放详情
看截图,看到回放的结果是失败的,为何失败呢,看下具体信息
因为id值不一致,所以判断回放失败,如下所示:
我自己写了个简单的demo,生成随机数的,代码中做了个mock,所以每次回放都是成功的
启动服务、修改配置、流量录制这些过程就不重复了,直接看下回放结果
回放详情如下所示:
回放差异对比如下所示:
问题每次分享内容,都会遇到些问题,所以整理下。
录制不成功录制遇到最大的一个问题,就是录制不成功,后面查日志和对比配置,是正则表达式写错的问题
repeater下的日志,如下所示:
日志中明确提示ignore this request
后面排查repeater-console页面配置管理中的正则表达式,发现正则写错,没有匹配到url的原因导致。
修改配置不生效这个问题算是上一个问题的续集,为啥这么说呢。我之前把配置修改后,再次请求去录制,发现还是不成功
后来发现,修改repeater配置,需要重启项目,attach到sandbox,只有在attach的时候,才会重新去读取配置
服务启动顺序这个点,也不算问题吧,但我也遇到过,就是服务启动的顺序。
先启动repeater-console服务
再启动被测服务
最后通过attach模式启动sandbox
如果中途有修改repeater-console配置项,上述步骤重来即可
以上就是今天分享的内容了,录制和回放只是以简单的demo来尝试了下,如果真的运用到实际项目当中,还得继续探索
我们下期再会