【效率提升】引流录制回归实践

【关键导读】结合jvm-sandbox-repeater+diffy二次开发实系统新老版本回归对比测试

1、整体执行方案

针对repeater-console进行了二次开发,使得侵入应用服务录制请求信息到数据库存储,进而通过访问开放的回归测试api,实现将录制的流量回放到diffy的代理入口,完成diff测试的目的

2、Jvm-sandbox-repeater

官方地址:https://github.com/alibaba/jvm-sandbox-repeater

repeater的可以应用到哪些场景?

业务快速回归

  • 基于线上流量的录制/回放,无需人肉准备自动化测试脚本、准备测试数据

线上问题排查

  • 录制回放提供"昨日重现"能力,还原线上真实场景到线下做问题排查和Debug

  • 动态方法入参/返回值录制,提供线上快速问题定位

压测流量准备

  • 0成本录制HTTP/Dubbo等入口流量,作为压测流量模型进行压测

实时业务监控

  • 动态业务监控,基于核心接口数据录制回流到平台,对接口返回数据正确性进行校验和监控 目前对repeater的应用主要是业务快速回归,基于线上流量的录制存储

  • 业务实施:

step0 安装sandbox和插件到应用服务器 curl -s http://sandbox-ecological.oss-cn-hangzhou.aliyuncs.com/install-repeater.sh | sh step1 修改repeater.properties,启用远程拉取配置

step2 在NDP修改应用启动参数,指定录制应用名和环境,-Dapp.name=${录制应用名} -Dapp.env=${录制环境} ,这个会在录制的信息中存储这两个字段信息

step3 attach模式字节码增强到业务应用 attach模式下,录制应用名和录制环境这两个参数都会被默认为unknown。 # 启动命令 ~/sandbox/bin/sandbox.sh -p ${被录制应用进程号} -P ${repeater启动端口} # 关闭命令 ~/sandbox/bin/sandbox.sh -S ${被录制应用进程号}

step4 根据自己配置的协议,HTTP/Java/Dubbo进行请求录制,如录制成功在repeater.log会打出具体的TraceId,如果是本地模式同时在~/.sandbox-module/repeater-data/record/文件中会写入TraceId关联的录制数据 如果# 是否开启脱机工作模式repeat.standalone.mode=false,会将录制信息推送到远端服务进行存储

具体的数据库表信息,存储如下:

 

2.1 Jvm-sandbox-repeater架构分析图

 

3、repeater-console

基于开源简单二次开发,变更功能:

  • 通过配置中心实现配置动态变更

  • 根据录制信息实现回放diffy对比测试

3.1 动态配置变更

jvm-sandbox-repeater配置可以通过远端服务拉取的方式:

# 配置文件拉取地址 repeat.config.url=http://xxxx/facade/api/config/%s/%s

xxxx为repeater-console服务

3.1.1 录制回放配置字段说明

这个配置的解读,主要依赖com.alibaba.jvm.sandbox.repeater.plugin.domain.RepeaterConfig类以及调用到这个类中方法的逻辑的说明。

 

3.1.2 动态配置实现

基于配置中心提供的注解@ConfigNotify("repeater_config"),添加RepeatConfigListener,实现动态配置

 

3.2 回放diffy对比测试

提供api可对外访问执行回归diff测试:http://xxxx/facade/api/regress/test,参数名为appName和env,选择运行指定应用和环境下的录制请求

 

1)动态配置访问的diffy服务:String proxy = difyDomainConfigListener.getDiffyConfig().getString(appName);根据不同应用获取指定的diffy服务,因为diffy服务在启动时与应用服务是绑定的,1个应用服务目前只能对应单独的diffy

2)启动回归执行会立即返回,采用异步后台运行的方式;

3.3 diffy对比测试

3.3.1 diffy原理及部署

以下为原理图,非常清楚的说明了diffy的对比测试的原理,在此不过多阐述

 

采用rancher实现diffy容器化部署,如下所示:

CMD配置启动参数:

-candidate=xxx1:8080 -master.primary=xxx2:8080 -master.secondary=xxx3:8080 -service.protocol=http -serviceName=httpDNS-Service -proxy.port=:8880 -admin.port=:8881 -http.port=:8888 -summary.email=xxx

3.3.2 diffy回放测试效果

总体回放对比结果:

单个请求diff结果:

 

4、总结一下

1)基于diffy的对比实践中遇到一个问题,如果response data中list是随机的,那么就会出现在稳定版本及其副本对比时,也会有差异,如果降噪,会把实际需要对比的response data也给降噪掉,如果不降噪,那么久有可能每一个请求都是有差异的,进而没有达到diff快速回归的效果(面对这种服务暂时没有好的解决办法)

2)基于diffy的对比接口,为了保证不对线上业务产生影响以及脏数据,目前实施的都是读接口以及幂等写接口

3)JVM-sandbox-repeater在这个方案中只是使用了录制功能,应该要结合repeater的回放、mock等部分,完成录制回放及mock应用体系化测试

 

可以参考学习的资料:

JVM-sandbox-repeater github开源:https://github.com/alibaba/jvm-sandbox-repeater

JVM-sandbox-repeater:https://testerhome.com/topics/20868

docker diffy:https://hub.docker.com/r/diffy/diffy

diffy github开源:https://github.com/twitter/diffy

【延伸阅读】

网易数帆:【解决方案】智能UI自动化测试

网易数帆:【解决方案】性能压测及分析调优实践

网易数帆:【解决方案】1万+接口测试与管理的进阶之路

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值