一、基础内容
1、测试基础
测试流程:需求评审 → 工时评估&排期 → 技术评审 → 用例编写&评审 → 提测演示 → 用例执行 → 验收测试 → 项目上线 → 线上监控
2、线上bug分类
产品类:产品优化建议、产品设计缺陷、需求变更
系统类:代码错误(常见:代码逻辑错误、边界值错误)、数据错误
配置类:商品数据/规则配置类错误
3、开发语言
java,常用语法、数据类型,集合
python,列表、元组、字典,集合
4、UI自动化(python+appium)
appium(原理:是一个基于C/S设计模式的自动化框架,服务端通过webdriver协议进行数据格式处理,再通过BootStrap.jar翻译成UIAutomator可执行的指令,然后通过UIAutomator处理并操作APP)
①客户端运行脚本的时候,调用任何的appiumAPI,都会向Appium Server端post一条HTTP请求,请求内容就是根据webdriver wire protocol协议规定的一条JSON格式的数据;
②当开启appium服务器的同时就开启了监听端口,Appium Server端接收到请求后,解析出JSON数据并发送到手机端;
③手机端上已经由BootStrap.jar(iOS为BootStrip.js)开启的socket服务器监听相应的端口,BootStrap.jar在appium每个session第一次访问手机端的时候会自动安装;
④手机端接收到对应的请求后,通过BootStrap.jar翻译成UIAutomator能执行的命令,然后通过UIAutomator处理并操作APP完成测试。
定位方式:xpath、id、css、resource id等
遇到的问题以及解决方法
如何实现断言:页面元素判断是否存在(显/隐加载方式)
appium服务未启动、会话冲突、设备未连接
框架设计设计模式:page/object模式,页面元素和方法分离
测试数据如何处理:需要输入的数据通过yaml文件存储,通过读取yaml文件获取不太参数
落地规模:家服核心通路页面(首页、商品介绍页、填单页)覆盖率100%,用例条数200+,累计发现bug数20+(非本次需求范围的代码影响问题、入口路由配置跳转问题等缺陷),回归测试时效降低1d
5、接口自动化
框架一:python+pytest+allure+Jenkins
pytest框架:请求封装(get/post)、装饰器(xfail、skip、mark)、allure报告生成配置、jekins持续集成
问题:场景化接口如何实现自动化,通过装饰器接口分类执行、跳过操作,mark参数化数据
框架二:java+testng+Jenkins
落地规模:家服核心应用接口覆盖率100%,用例条数300+,累计发现bug数50+(接口测试阶段),测试时间降低1pd
数据存储:通过excel进行接口管理(地址、入参、请求方式、期望结果)、测试数据通过yaml文件进行管理
问题:场景化接口如何实现自动化,通过testng的注解实现前后接口的数据依赖、业务逻辑依赖
6、算法基础
常见算法题:数组排序、hashmap、双指针、滑动窗口、反转链表
7、专项测试能力
移动端专项:性能、稳定性、崩溃率,app测试和发包流程
服务端专项:压测(通过jmeter进行压测,关注qps、响应时长、内存、cpu、io等指标数据)、混沌测试(中间件故障演练测试Redis、MongoDB)
测试环境治理:
环境依赖影响:规范化单拉研发分支进行开发,提测前本地解决冲突再合并;泳道多分支处理方式
测试数据难造:造数据工具集、mock数据
上下游数据依赖:mock接口、mq消息等
三方接口依赖:mock接口数据
8、项目业务经验
跨团队项目组织协调/沟通,质量数据度量
9、通用
数据库:mysql、Redis、MongoDB,基本sql
Linux:基础操作命令(grep、tail、cat等)、awk(!!!)
10、其他(细节)
java中final(定义静态变量)和finally(try语句中最终需要执行的代码块)
Redis五种数据类型:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)
springboot注解:appscan、test等
中间件
一、MQ
1、3个核心功能:解耦、异步、削峰
2、3类常见MQ:RabbitMq、RocketMq、Kafka
3、RabbitMq如何保证消息不丢失
1)确保消息到MQ:发送方的确认模式
2)确保消息路由到正确的队列:路由失败通知
3)确保消息在队列正确的存储:交换器、队列、消息都需要持久化
4)确保消息从队列中正确的投递⾄消费者:手动确认->交给消费者来确认
4、如何解决MQ消息重复
1)MVCC(多版本并发控制),乐观锁的一种实现,通过版本号进行数据重复判断
2)去重表,构建唯一性索引
二、ES
1、倒排索引:通过分词策略,形成了词和文章的映射关系表,这种词典+映射表即为倒排索引
2、在并发情况下,Elasticsearch 如果保证读写一致?
1)可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖,由应用层来处理具体的冲突;
2)另外对于写操作,一致性级别支持 quorum/one/all,默认为 quorum,即只有当大多数分片可用时才允许写操作。但即使大 多数可用,也可能存在因为网络等原因导致写入副本失败,这样该副本被认为故障,分片将会在一个不同的节点上重建。
3)对于读操作,可以设置 replication 为 sync(默认),这使得操作在主分片和副本分片都完成后才会返回;如果设置 replication 为 async 时,也可以通过设置搜索请求参数_preference 为 primary 来查询主分片,确保文档是最新版本
redis常见故障原因:Redis缓存命中率下降,请求直接打到了数据库
1、穿透
指用户查询数据时,数据库中没有(缓存中自然也没有),导致每次查询先查缓存为空、再查数据库为空,相当于进行了两次无用查询
模拟:客户端发送大量不可响应的请求,例如查询数据库没有的用户数据
解决方式:空值缓存、实时监控、接口校验(类似用户权限拦截)
2、雪崩
原缓存失效,新缓存未到时间,访问都到了数据库,数据库cpu和内存压力过大
模拟:设置大量key集体过期
解决方式:失效是随机分散配置、使用多层级缓存(Nginx、Redis、其他)、设置缓存标记(过期预警更新)、锁和队列
3、击穿
某个key非常热,在高并发情况下key失效,缓存被击穿,直接访问数据库
模拟:设置某个热点key过期,大量高并发访问该key
解决方式:提前对热点key继续设置、监控并调整热点key过期时长、使用互斥锁
附:
【字节一面】
1、自我介绍
2、做过什么自动化技术?
UI自动化深入说一下
接口自动化深入说一下
平台工具深入说一下
3、目前工作占比
管理、技术、沟通
4、算法
无重复字符的最长子串
【神州租车一面】
1、自我介绍
2、接口自动化实现?
3、直线带人绩效如何管理?
4、单链表算法,给定值a,链表中与a相等的删除,并输出更新后的链表
【快手一面】
1、自我介绍
2、接口自动化
3、UI自动化
4、遇到的问题?怎么解决?
5、OKR怎么进行管理?
6、混沌工程相关
7、shell基础和算法(大文件中截取邮箱前缀)
【快手二面】
1、自我介绍
2、业务介绍(业务流程、技术架构、数据怎么流转)
3、Redis缓存常见问题(击穿、雪崩、穿透)
4、团队管理
5、怎么培养掉队较多的员工
6、期望工作内容和类型