1、浏览器业务接入Goblin自动化测试框架
1)传统单元测试痛点
>单元测试数据依赖复杂且无法实现数据隔离
>mock框架学习成本高,代码冗余
>基于内存实现成本高,且易出现生产环境与测试环境不同步
2)Goblin单元测试框架介绍
>基于docker与testContainers通过编程自动启动docker容器,并在测试结束后关闭容器
>保证生产环境与测试环境的一致性并且可以做到数据隔离
>可以扩展所依赖的中间件
3)浏览器业务broswer-operation-position-service
接入Goblin单元测试框架
接入流程
>引入maven依赖
>配置test.yml(配置所需要的中间件,该项目仅用到sql)
>使用占位符替换配置文件中中间件的ip和port(docker启动后会将docker内部中间件的ip与port转换为外部并替换占位符)
>在生产环境中将配置文件导入
编写单元测试过程中的痛点
>目前goblin框架仅支持单个数据库的初始化,该项目中需要用到多个数据库的多个表,需要手动进行修改(不同数据库中的表初始化到同一个数据库中)
>第三方依赖仍然需要mock
>需要理解之前的业务代码来编写单元测试
2、扩展Goblin中redis读取数据的格式
redis默认读取数据为json和xml格式,但商业化组的数据为pb格式,需要在redis读取并存储字节码的过程中进行扩展
>通过工厂模式对读取数据格式进行扩展,默认json/xml
格式
>通过添加key与value的标签,可以判断转换的格式,目前支持(string2byte、pb2byte、binary2byte)
3、浏览器业务混沌测试
测试流程
>对浏览器业务list/getlist进行混沌测试
>测试前需要通过路由标签将流量打到测试的三台服务器
>故障类型:cpu/磁盘/内存打满、第三方调用接口延迟、redis/db延迟或连接失败
>通过分析告警信息、告警策略、调用脸、接口请求成功率等信息来发现业务中存在的潜在风险
演练结果分析
>在注入resource/ad服务延迟等故障时,因为存在5s的网络延迟,故resource、ad等第三方调用接口会持续尝试不断失败。之后在调用降级策略后成功返回调用接口内容(可设置熔断机制,直接调用降级策略)
>在注入db、redis等相关故障时,接口调用耗时明显上升、成功率下降,但无db、redis相关告警信息出现。告警策略中无相关告警配置
>在注入信息流服务磁盘打满故障时,无告警信息出现。查看告警策略可知仅有磁盘io告警配置。
>在请求/feedsList/getList接口时,请求的成功率统计会包括异常和5xx,在网关熔断时,成功率仍无明显下降https://github.com/oitstack
4、Goblin中间件mongodb的container编写与接入
开源地址:https://github.com/oitstack
>通过反射加载编写好的mongodb container类
>从配置文件中读取mongodb的版本与ip/port的占位符
>启动docker拉取对应版本镜像并启动container
等待启动判断成功后,将docker container内部ip/port转换为外部可访问的ip/port,对占位符进行替换
>goblin中会存在一个damocle容器负责检测心跳,client会有一个单独的线程不断发送消息到damocle保持心跳连接,若test运行结束该线程会发送FIN报文,damocle会对现有容器进行kill,若中途kill客户端进程,damocle等待当上一次读取消息20s后未有新消息写入会自动对现有容器进行kill(结束后自动回收容器)
标签:中间件,单元测试,redis,暑期,ip,实习,docker,port,OPPO From: https://www.cnblogs.com/lyjps/p/17030536.html