面试可能会问到的问题
一、性能篇
1.性能测试流程如何展开?
1)性能需求分析; 下来一个需求前先分析能不能实现,该用何种方式实现,在脑海里有个基本的概念。
比如如果需求要求你在功能测试之前就做性能测试,这点就是不现实的,性能测试只能在系统稳定之后进行,否则得出的指标很可能是错误的。
2)计划测试:包括用户场景分析,业务建模,确定性能目标,制定测试方案等
3)性能脚本开发:包括测试环境设计,根据业务建模设计测试场景,根据测试场景进一步细化为测试用例,根据用例开发具体的性能脚本。
4)测试执行:按照脚本开发阶段设计测试环境,由运维部署好对应的环境,同时保证测试环境的干净和稳定,避免受到其他外来性能因素的影响而导致测试精度有误;运行脚本并记录测试结果以供进行测试分析
5)测试分析:根据执行测试得到的结果(曲线,性能图表等),经过对比和计算确定是否达到目标,如果未达到,根据具体情况进行进一步分析,并给出结论。
2.Jmeter的常用函数
比较重要的,_V 拼接函数 _P 获取属性函数,set p设置属性函数
一般重要的,radom 随机数函数;time 时间函数 counter 计数器函数
3.压测的关注点是什么?TPS上不去可能会是什么原因?
TPS上不去可能的原因:
首先检查自己脚本的原因,比如高并发情况下,单负载压力机压力有限,如果需要模拟的并发数超过了其负载极限,则会影响TPS(可以通过设置奴隶机进行分布式压测)
排除完脚本的问题后,可以结合监控平台观察分析是否是网络或硬件资源的问题,比如CPI、内存、IO等是否超高,如果是需要操作数据库读写的接口,需要考虑数据库量过大的问题,则需要进一步对数据库进行分析。
最后可以与开发沟通,结合目标接口进一步排查代码问题
4.什么是瞬间并发?如何测试?
瞬间并发就是字面上的意思,在一秒种甚至更短的时间内对某一接口或者某一服务进行的多次请求;测试分为两个情况,已知当前系统的并发量和未知当前系统的并发量,如果已知,就按已知并发量直接测试就行了,如果超过2000则要用分布式进行压测
如果未知,则要先用阶梯线程组测出并发量,在进行瞬间并发测试。
5.什么是超大并发?如何测试?
6.数据库常用的调优方式?
可以通过建立索引 ,分析慢sql以及慢sql调优的方式来进行优化
7.线程组里常用哪些组件?
http请求处理器、函数助手、cookie管理器、循环控制器、jdbc连接配置等
8.有一个活动页面,要求1秒钟能支持5000个访问请求,你如何做性能测试?
1)梳理业务场景,建立业务模型:确定好访问活动页面的前置操作(如登录,用户是否符合活动条件等),根据用户实际操作场景建立业务模型,并设计脚本。
2)脚本开发:按照业务模型设置线程组,处理好各个接口关联以及传参,设置好相关图表以供性能分析
3)测试执行:1秒钟5000并发为高并发,需要用分布式部署来进行测试。具体做法是编写好具体脚本后,除本地机器外,额外准备两台压测机器,装上jmeter设置为奴隶机,来一起进行压测。
4)性能分析:分析执行完后的结果,观察是否达到需求,若没有达到需求,需要给出目前支持的最大并发数,并找到可能影响性能的原因。
9.linux服务器数据监控常用到的命令有哪些?分别是做什么的?
- Top:查看系统进程资源使用情况
- vmstat:可对虚拟内存,进程,cpu进行监控
- vmstat 3 10:每3秒展示一次数据总共展示10次
- mpstat:查看cpu的相关数据,需要安装sysstat
- mpstat 1 5 : 每一秒展示一次数据,一共展示5次
- mpstat -P ALL 2 5:每2秒展示一次所有数据,一共展示5次
- pidstat:能看磁盘、内存、cpu的数据,主要看cpu的上下文数据
- pidstat -u -w 1 5:u查看cpu的数据,w查看cpu上下文数据
- netstat:检验本机各端口网络连接情况
- netstat -ant |grep 端口号:在所有端口里面查询某个端口的连接情况
- dstat:以上命令的集合
- 需要安装dstat
10 能否写出10个linux常用命令?
- 命令
- 解压:tar –xzvf ****.tar.gz
- 创建文件夹:mkdir name
- 删除文件夹:rm name
- 设置权限:chmod 777 file
- 查看某个进程:ps –ef | grep XXX
- 安装:make install yum install XXX –y
- 卸载:make uninstall
- 创建docker容器并运行:dicker yun
- 创建docker容器:docker create
- 下载docker镜像:docker pull
- 查看docker容器:docker ps –a
- 进入docker容器:docker exec –it name /bin/bash
- 杀掉docker容器:docker kill name
- 停止docker容器:docker stop name
- 重启docker容器:docker restart name
- 复制docker文件:docker cp 容器名称:文件路径/文件 本地路径(当前文件:$PWD)
- 查看docker镜像:docker images
- 删除docker容器:docker rm name(只能删除停止的容器 docker rm –f XX强制删除)
- 删除docker镜像:docker rmi name(只能删除停止的镜像 docker rmi –f XX强制删除)
- 查看docker日志:docker logs name
- 启动:systemctl restart XXXX ./XXXX
- 自动启动:systemctl enable XXXX
- 进入mysql:mysql –uroot –p
- 复制:cp 文件 路径
- 移动:mv 文件 路径
- 测试网络联通:ping IP
- 远程登录:telnet Ip port
- 查看更目录下的所有文件:tree –L 1 /
- 改变权限:chomd
- 后台运行:nohup ./prometheus &
- 查看内存:free –h
- 杀进程:kill -9 进程号
- 磁盘使用情况:df –h
- 查看当前端口占用数:netstat -ano | grep "TCP" | wc –l or ss-s
- 查看某个进程打开的文件:lsof -p pid |wc -l
- 查看系统打开的所有文件:lsof |wc –l
- 查询:find / -name ****(find 路径 查询属性 文件名)
二、自动化篇
1.冒泡排序:
def bubblesort(arr): n = len(arr) for i in range(n): for j in range(0, n - i - 1): if arr[j] > arr[j + 1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] return arr
2.99乘法表:
for i in range(1, 10): for j in range(1, i + 1): print("{}*{}={}\t".format(j, i, i * j), end='') print()
3.你们现有自动化框架是怎么处理接口传值的:
目前是使用一个专门的yaml文件进行传值的