OPPO暑期实习记录

1浏览器业务接入Goblin自动化测试框架

1传统单元测试痛点

>单元测试数据依赖复杂且无法实现数据隔离

>mock框架学习成本高代码冗余

>基于内存实现成本高且易出现生产环境与测试环境不同步

2Goblin单元测试框架介绍

>基于dockertestContainers通过编程自动启动docker容器并在测试结束后关闭容器

>保证生产环境与测试环境的一致性并且可以做到数据隔离

>可以扩展所依赖的中间件

    3浏览器业务broswer-operation-position-service

接入Goblin单元测试框架

接入流程

>引入maven依赖

>配置test.yml(配置所需要的中间件该项目仅用到sql)

>使用占位符替换配置文件中中间件的ipportdocker启动后会将docker内部中间件的ipport转换为外部并替换占位符

>在生产环境中将配置文件导入

编写单元测试过程中的痛点

>目前goblin框架仅支持单个数据库的初始化该项目中需要用到多个数据库的多个表需要手动进行修改不同数据库中的表初始化到同一个数据库中

>第三方依赖仍然需要mock

>需要理解之前的业务代码来编写单元测试

 

2、扩展Goblinredis读取数据的格式

redis默认读取数据为jsonxml格式但商业化组的数据为pb格式需要在redis读取并存储字节码的过程中进行扩展

>通过工厂模式对读取数据格式进行扩展默认json/xml

格式

>通过添加keyvalue的标签可以判断转换的格式目前支持string2bytepb2bytebinary2byte

3、浏览器业务混沌测试

测试流程

>对浏览器业务list/getlist进行混沌测试

>测试前需要通过路由标签将流量打到测试的三台服务器

>故障类型cpu/磁盘/内存打满第三方调用接口延迟redis/db延迟或连接失败

>通过分析告警信息告警策略调用脸接口请求成功率等信息来发现业务中存在的潜在风险

演练结果分析

>在注入resource/ad服务延迟等故障时因为存在5s的网络延迟resourcead等第三方调用接口会持续尝试不断失败之后在调用降级策略后成功返回调用接口内容可设置熔断机制直接调用降级策略

>在注入dbredis等相关故障时接口调用耗时明显上升成功率下降但无dbredis相关告警信息出现告警策略中无相关告警配置

>在注入信息流服务磁盘打满故障时无告警信息出现查看告警策略可知仅有磁盘io告警配置

>在请求/feedsList/getList接口时请求的成功率统计会包括异常和5xx在网关熔断时成功率仍无明显下降https://github.com/oitstack

 

4、Goblin中间件mongodbcontainer编写与接入

开源地址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结束后自动回收容器

 

posted @ 2023-01-06 15:01  lyjps  阅读(78)  评论(0)    收藏  举报