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

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

一、总体执行方案

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

二、Jvm-sandbox-repeater

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

repeater的能够应用到哪些场景?docker

业务快速回归数据库

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

线上问题排查服务器

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

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

压测流量准备dom

  • 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架构分析图

 

三、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结果:

 

四、总结一下

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万+接口测试与管理的进阶之路

相关文章
相关标签/搜索