首页 > 其他分享 >OPPO暑期实习记录

OPPO暑期实习记录

时间:2023-01-06 15:12:50浏览次数:40  
标签:中间件 单元测试 redis 暑期 ip 实习 docker port OPPO

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

相关文章

  • git和git bundle: 一个有趣的实习笔试题目提交
    以下代码均为terminal中的shell指令先gitinitmkdirreshapecdreshapegitinit再gitadd所需要加入的文件gitaddReadme.mdgitaddreshape.py然后gitcommit......
  • 温故知新 - 靶机练习-Toppo
    今天闲来无事,重新做了一下以前做过的第一个靶机(https://www.cnblogs.com/sallyzhang/p/12792042.html),这个靶机主要是练习sudo提权,当时不会也没理解。开启靶机,直接告诉了......
  • 【线上实习项目】助力你的校招!
    ​【线上实习项目】助力你的校招!​23届正式秋招快要结束,可在写简历的时候,无论多努力也憋不出来一个像样的实习经历,又不敢造假,经历真实与否,HR一问就会露馅。该怎样充实自己的......
  • 【高级软件实习】蒙特卡洛模拟 | PRNG 伪随机数发生器 | LCG 线性同余算法 | 马特赛特
    ......
  • 备战实习求职的一些感想(已拿阿里offer)
    1.前言本篇为我(bigsai)的非常要好的朋友(小G)总结的一些经验,上天去南京游了老门东、夫子庙,第二天去小G那边蹭了一顿饭,然后一起逛了鸡鸣寺和玄武湖,离开前问他要了经验贴没......
  • 2022暑期实习面试
    快手一面自我介绍进程与线程的概念了解过协程嘛?没有协程是比线程更加轻量级的存在,一个线程可以有多个协程,并且不被操作系统内核所管理(用户态执行),线程......
  • 日常实习
    字节上海国际电商自我介绍面向对象相关的封装、继承、多态是否有了解可以简单介绍一下多态吗?还有吗?在Java中多态也叫动态绑定,相比于c语言的静态绑定,多态可以保证基......
  • 实习总结(第六天)
    昨天晚上得到了一些数据,今天主要的任务是把这些数据测试一下,再熟悉一下软件的具体流程。首先梳理了一下文件上传功能的bug1、在上传的时候,第一次上传通常会失败,第二次再......
  • 实习总结(第五天)
    为了更好的理解业务的逻辑以及后面对SQL语句的优化,今天我打算再把数据库的数据表详细的阅读一遍熟悉一下表与表之间的关系,以及表的结构。通过仔细地阅读,表中主要的主体有......
  • C++面向对象程序设计实训(实习)[2022-12-25]
    C++面向对象程序设计实训(实习)[2022-12-25]面向对象程序设计实训(实习)PracticalTrainingofObject-OrientedProgramming1、实习基本要求(1)学生自由组1人小组按照以下要......