面试题:
有无复杂逻辑业务测试
支付如何掉第三方接口
业务流程长如何高效完成测试
聚合报告的关注指标(中位数)[jmeter]
将所有请求的响应时间先从大到小进行排序,计算指定比例的请求都是小于某个时间。该指标统计 的是大多数请求的耗时。 Tp90(90%响应时间):90%的请求耗时都低于某个时间 Tp95(95%响应时间):95%的请求耗时都低于某个时间 Tp99(99%响应时间):99%的请求耗时都低于某个时间
软件质量的六大特性
性能测试关注的指标[loadrunner]
吞吐量、响应时间、每秒点击次数、并发用户数、报错信息、http响应数、cpu内存占用、网络延迟时间
深拷贝和浅拷贝区别[copy]:
对象拷贝、拷贝包括引用对象
微服务架构:springcloud/springboot+grpc+消息队列
微服务架构原理:主要面向SOA理念,更细小粒度服务的拆分,将功能分解到各个服务中,从而降低系统的耦合性,并提供更加灵活的服务支持
注册中心原理:
什么是微服务?
将项目的子模块拆分成单独的子系统
微服务的优缺点?
springcloud核心组件
微服务:解耦
redis数据类型:string、list、set、hash
redis的两种持久化机制:
rdb【定时存储】:在指定的时间间隔内将内存中的数据快照写入磁盘
优点:性能最大化、如果数据集很大,RDB的启动效率会更高
缺点:数据安全性较差
aof【】:以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录
优点:数据安全性较高
缺点:对于相同数量的数据集而言,aof文件通常要大于rdb文件。恢复数据慢
装饰器原理
装饰器就是给已有函数增加额外功能的函数,它本质上是一个闭包函数
特点:
1、不修改已有函数代码
2、不修改已有函数的调用方式
3、给已有函数增加额外的功能
list如何去重?
1、set集合去重
2、字典去重
==和is区别
is:比较两个对象是不是指向同一个内存地址
==:比较两个对象指向的内存地址的值是不是相等
is 用于判断 两个变量 引用对象是否为同一个 == 用于判断 引用变量的值 是否相等
自我介绍
1、sql如何查询重复的数据
select count(字段名) count as from表名where count>=2
2、http与https区别(应用层)tcp(传输层)
http无状态[cookie(客户端)/session(服务端)]、无连接[keep-Alive]
3、get与post区别
4、linux
查看java进程:ps-ef|grep java
磁盘空间:df-ah
查看目录大小:du -lh/du-sh
查看ip:ifconfig
查看服务器是否可用:ping ip地址
查看服务器端口是否可用:telnet ip地址
查看pid所占用的端口号:netstat-nap|grep进程ID
查看系统磁盘使用情况:df-h
查看实时占用资源:top
sed:替换文件内容
grep:搜索、过滤文件
awk:数据分割
压缩和解压缩:
1、tar文件 tar -zcvf打包/tar -xvf解压
2、zip文件zip -r打包/unzip解压
查看被占用端口号:netstat -anp | grep 800 查看cpu:lscpu 查看文件个数:ll |grep wc -l
消息队列?
1、为什么要用消息队列?(消息队列的应用场景?)
消息队列是一种先进先出的数据结构
常见的应用场景:解耦、异步、削峰(流量削峰)
2、各种消息队列产品的比较?
ActiveMQ:早起使用的较多,没经过大规模吞吐两场景的验证,不推荐
RabbitMQ:追求性能和稳定性,推荐使用(不考虑二次开发)
RocketMQ:稳定性和性能均不错,可二次开发
kafka:大数据领域日志采集等业务推荐使用
3、消息队列的优点和缺点?
缺点:
系统可用性降低——》如何保证MQ高可用?
?
系统复杂度提高——》消息丢失怎么办?重复消息怎么处理?如何保证消息传递的顺序性?
一致性问题——》如何保证消息数据处理的一致性
4、如何保证消息队列的高可用?
RabbitMQ高可用-普通集群
特点:
1、没有真正做到高可用
2、有数据拉取的开销和单实例的瓶颈问题
RabbitMQ高可用-镜像集群
在多台机器上分别启动rabbitMQ实例;
多个实例之间可以相互通信;
每次生产者写消息到queue的时候,都会自动把消息同步到多个实例的queue上。每个RaabitMQ节点上都有Queue的消息数据和元数据;
某一个节点宕机,其他节点依然保存完整数据,不影响客户端消费;
RocketMQ高可用-双主双从
生产者通过NameSever发现Broker;
生产者发送队列消息到2个broker主节点;
Broker主节点分别和各自从节点同步数据;
消费者从主或者从节点订阅信息
5、如何保证消息不丢失?
消息丢失原因:
消息生产者没有成发送到MQ Broker;
消息发送给MQ Broker后,Broker宕机导致内存中的消息数据丢失;
消费者获取到消息,但消费者还没有来得及处理宕机了,但此时MQ中消息已经删除,消费者重启后不能再消费之前的消息;
解决处理:
消息发送者发送给MQBroker后,MQBroker给生产者(confirm确认)确认收到;【发送方可靠发送】
MQ收到消息后进行消息持久化;【MQ进行消息持久化】
消费者收到消息处理完毕后手动进行ack确认;【消费方消费完毕进行ACK确认,MQ收到消费方的ACK确认再删除本地消息】
MQ收到消费者ack确认后删除持久化的消息;
6、如何保证消息不被重复消费?(幂等性)
消息重复的根本原因是网络不可达;
发送时消息重复;
消费时消息重复;
解决方案:
消费发送者发送消息时携带一个全局唯一的消息id;
消费者获取消费后先根据id在redis/db中查询是否存在消费记录;
如果没有消费过就正常消费,消费完毕后写入redis/db;
如果消息消费过就直接舍弃
备注:幂等性是重复消息处理一次和多次结果一样,不影响业务
【消息携带全局ID,消费方接到消息时先查再处理,根据全局ID做判重操作】
7、如何保证消息消费的顺序性?
消息有序指的是可以按消息的发送顺序来消费【消息消费顺序和发送顺序一样】分为全局顺序消费和局部顺序消费
如何解决:
全局顺序消息:生产者:MQSever:消费者=1:1:1
局部顺序消息:
生产者将同一组信息发送到单个队列;
多个消费者并行对消息进行消费;
Queue通过分段锁保证消息消费的顺序性
8、基于MQ的分布式事务实现?
分布式事务是为了保证不同数据库的数据一致性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UTgTyO3m-1629200368592)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210809161104069.png)]
消息发送发:
1、处理业务逻辑
2、保存消息到本地数据库
3、发送消息给MQ
4、监听MQ消息方通知消息,更改消息状态为已处理
5、定时任务长期未处理消息重新发送到MQ
消息消费方:
1、监听MQ中间件消息
2、判断消息是否重复,重复就丢弃
3、消息未重复,执行本地业务
4、业务处理完毕,写消息记录到本地数据库
5、发送通知消息到MQ
接口自动化测试:
接口:是为系统提供服务的一种形式
前端发送的请求内容——网络协议——服务端接收请求(接口)——进行处理产生响应结果——网络协议——返回响应
请求(ququest):用户下发
网络协议:传输渠道,目前业内最为核心的http协议
接口:接收从传输渠道传递过来的请求数据,不同接口对应不同的数据
响应:接口运算的结果,会在执行之后返回至前端
实际请求下发时不需要经过前端界面
登录操作:
? 输入账号密码——提交表单——校验是否正确——返回成功或失败
? 开展接口测试的原因:
? 1、为了确保系统的安全
? 2、能够更早介入测试工作,从而降低缺陷的修复成本
? 3、尽可能多地发现系统中存在的问题
? 4、接口测试是比较重要的测试手段
如何实现接口测试:
? 模拟请求,直接下发至接口,获取返回响应,校验响应内容是否正确
网络协议:http是核心的协议
? 1、规范
? url=网络协议://ip:port/path?args1=&args2=
? http默认端口号:80
? https默认端口号:443
2、请求的方法:
? get和post是核心,选择何种请求方法,是依据接口来规定的
? 响应状态码
? 2**:成功
? 3**:重定向
? 4**:路径错误
? 5**:服务端错误
3、接口的数据规则都是基于接口本身的要求来的,不是一个通用性内容
Request库的二次封装:
? 测试框架值关键字驱动设计模式
? 常用的接口自动化测试是post和get,将频繁调用的这两个方法进行封装
网络协议:
http/https—无状态连接和长连接(2版本以上) ——鉴权
http:请求下发——数据传递——响应生成——返回响应结果
请求定式:
? url,统一资源定位符,用于定位到指定接口
http通信原理:
1、浏览器基于URL的域名解析出ip地址
2、基于ip地址与服务器进行链接
3、客户端构造HTTP请求。头部信息和通信数据
4、服务器生成响应结果
5、将响应结果原路返回
6、基于前端渲染,进行展示
请求方法:
get:潜规则中get请求的参数是在url中明文显示的
获取数据
url长度有限制,get强求有长度限制
post:
请求参数放在body中
提交数据
参数在body中,url不会超长
http请求是默认无状态【cookie/session/token】连接,在请求头中可看到keep-alive【tcp】(保持连接)的设置
考虑到资源的使用以及请求的效率,所以http被设计成无状态无连接模式。
tcp主要应用在C/S架构,端游,微信、qq、在线客服等及时通信。
第一次访问将部分资源保存的本地cookie浏览器缓存中
交互会话产生session临时会话(sessionid)
授权身份令牌(token)的模式,用于鉴别客户端是否有会话权限
无连接——keep-alive
rpc+微服务
自动化测试
web自动化
页面元素定位8种方法
id,name,tagname,classname,linktext,paryaillinktext,xpath,cssselector
关键字:contains,start-wih,text
如何管理页面元素?
解决元素问题一般会选择套用设计模式进行管理
1、基于关键字的形态,所有的元素信息保存在文件中
关键字驱动:
? 1、关键字驱动+数据驱动的实现模式
? 2、关键字驱动核心的理念[代码的封装,面向对象]
? 3、关键字的设计如何实现?
数据驱动:
在测试框架中,一定会讲究代码与数据的分离
数据格式excel,Yaml,json,py
2、基于POM的形态,所有的元素信息与页面对象关联
app自动化:
? appnium自动化测试adb
接口自动化:
? 网络协议:
? 接口关联:
? 1、鉴权机制的处理,关联数据的传递方式
? 2、mock数据(mockserver)
框架的设计:
? 测试工具
? 测试框架
? 测试平台
框架的配置
? 环境配置
? 日志配置
? 持续集成:邮件信息、内容模板、报告模板
自动化测试:
1、用例维护
2、自动化测试用例执行
3、自动化的结果分析
测试开发:
1、研发测试框架
2、维护测试框架
3、研发测试工具
【工行复试】
UI自动化核心技术:
POM设计模式:最主流uI自动化设计模式,基于页面对象来实现自动化测试模式
? 1、结构本身:
? 基类:关键字驱动封装的底层类
? 页面对象类:提供不同页面的对象。在实际测试中通过调用页面对象实现自动化测试流程
? 测试用例类:unitest/pytest
? 测试数据类:Yaml/excel
2、源码
? 接口自动化驱动模式:所有接口在进行关联的时候是通过鉴权机制来实现互通
? 实现核心技术:
? 1、单接口多条件的覆盖
? 2、链路测试
? excel数据驱动(单接口)
? Yaml数据驱动(关联接口)
测试环境的配置
unitest用例按固定顺序执行
? 1、ddt
? 2、测试套件
? 3、HTMLTestRunner
pytest自由性更强(pytestini配置文件)
? 1、pytest.ini
? 2、conftest.py
? 3、pytest+alure
框架关联的持续集成技术
单元测试框架:
|