一、基础问题
1.1、请做下简单的自我介绍
回答:【围绕基本信息+项目介绍】
面试官您好,我叫张三,来自番茄市,在软件测试行业有 3 年的工作经验,做过 Web/APP及小程序项目的测试工作,有独立负责整个项目的测试经验。
最近做个的项目是 xxx,这是一款基于(B/S 或 C/S)架构的 xxx 产品,在该项目中我主要负责 xxx 业务和 xxx 业务及 xxx 模块和 xxx 模块的功能,接口,及自动化测试。
在功能测试中主要运用到 xxx 测试工具和 xxx 缺陷管理系统。
在接口测试中主要使用到 xxx 共具。
自动化测试是基于 Python+Requests+pytest+Jenkins 实现的测试框架搭建和测试实现。
以上是我的个人介绍
1.2、 你们这项目做了多久?多久做一次版本迭代?写了多少用例?发现了多少Bug?你们的团队规模是怎么样?具体的人员配置请详细说一下。
回答:
● 项目周期:
○ 中小型项目:3-6个月
○ 中大型项目: 6-12个月
● 多久做一次版本迭代?
○ 互联网项目: 1-2周一个迭代
○ 传统项目: 3-4周一个迭代
● 迭代内容:
一般分大版本和小版本:
○ 大版本主要是产品规划的新功能、新业务,大版本一般2-3个月有一次
○ 小版本主要是一些历史功能优化和缺陷修复版本,小版本每周/两周有一次
● 写了多少用例? —— 数测试点
● 发现了多少bug? —— 用例数的20%-30%
● 团队规模:
互联网项目:
○ 测试开发比: 1:3 —— 1:5 甚至1:7
○ 小项目:1-3个测试人员,开发人员大概为4-15人,产品经理与测试基本一致(基本1-3人)
○ 中项目:测试人员5人以上
传统项目:
○ 银行类型的项目:(人员密集型)测试开发比: 1:3左右
二、Linux命令
2.1 如何查看 Java 进程并杀死进程
回答:
# 查看所有 Java 进程信息(包含进程ID)
ps -ef | grep java
# 停? Java 进程
kill -9 进程ID
# 扩展:?条命令实现($2 获取第 2 列的值)
ps -ef | grep java | awk ”{print $2}” | xargs kill -9
2.2 如何解决端口占用
回答:
# 方案 1
# 获取程序相关信息(PID:进程ID)
netstat -anptu
| grep 程序名
或
netstat -anptu | grep 端口号
# 结束程序运行
kill -9 PID
# 方案 2
# 获取程序相关信息(PID:进程ID)
lsof -i:端口号
# 结束程序运行
kill -9 PID
# 注意:以上命令都需要使?用root 用户
三、数据库
3.1 请用一条语句统计: 2023 年 10 月份所有员工的请假天数
回答:
Select sum(l_days) from e_info as einner join leave_info as l on e.e_id=l.e_id
where l_date between "2023-10-1" an d "2023-10-31"
3.2 什么是关系型数据库,主键、外键、索引分别是什么
回答:
关系型数据库是指:存储数据时有多个数据表格,表格之前有关联信息。
常用关系数据库有:
Oracle:在大型项目中使用,例如:银行、电信等项目
MySQL: Web 项目中使用最广泛的关系型数据库
Microsoft SQL Server:在微软的项目中使用
主键:数据库表唯一标识,不能为空
外键:表与表之间关联的字段
索引:对数据库表中一列或多列的值进行排序的一种结构(相当于图书的目录)作用是快速访问数据库表中的特定信息
四、功能测试
4.1 请简述下你现在这家公司的功能测试流程。
回答:
1、接到项目之后,由项目经理、需求人员、测试经理和客户进行沟通,分析需求,需求人员编写需求问档,编写之后需求评审(看看有没有不能完成或者有必要增加或者修改的地方)。
2、评审过后,输出评审通过的需求规格说明书;
- 开发人员根据需求说明书,设计说明进行软件开发。
- 这时我们测试人员要了解客户需求,根据需求规格说明书编写测试用例,编写好之后对测试用例进行评审,在评审中注意有?遗漏或有误的地方,再进行修改。
3、测试用例评审通过,开发人员把项目写好,搭建好测试环境,我们首先进行冒烟测试,看看软件关键功能可不可以正常使用,环境通不通。
然后我们根据测试用例进行测试,在测试过程中遇到bug,在缺陷管理工具中提交,并根据缺陷管理周期跟踪bug,复测通过之后关闭bug。
4、所有测试用例执行完毕,缺陷也关闭了,然后测试人员编写测试报告,完成后进行运行维护阶段。
4.2 在测试过程中有没有发现过让你记忆犹新的BUG
回答:
这个问题不一定难,重点体现真实。
问题描述:购物车合计金额和订单的商品合计金额偶尔出现相差0.01
需求描述:基于商品合计?额结果四舍五入
购物车合计金额 = sum(购买量 * 单价 * 会员折扣率)
订单的合计金额 = sum(购买量 * 单价 * 会员折扣率) + 物流费 - 优惠券 - 积分抵扣
分析问题:找到对应购物车研发人员确认其计算的方式,每次计算完一个乘法四舍五入 订单的开发人员计算方式是乘法计算完之后再对于最终结果进行四舍五入,导致偶尔出现相差0.01的情况。
解决方式:找产品确认最终确认进位方式 这里就提供一个,大家在实际学习过程中也会遇到一些缺陷。可以进行记录和分析。
五、Python基础
5.1 请用Python 实现一个九九乘法表
回答:
for i in range(1, 10):
for j in range(1, i+1):
print(”{}x{}={} ”.format(j, i, i*j), end=””)
print()
5.2 在 pytest 在如何运行指定用例?例如:一个电商共有 2000 条用例,只想运行和下单业务相关的用例,该怎么做?
回答:
学过的:在 pytest.ini 配置文件中修改运行模块 -> 根据业务去建的 py 文件,在配置文件中修改指定文件名。
面试官想听的: @pytest.mark.标记。
运行方法: pytest -m 标记。
六、接口测试
6.1 系统出现500或白屏,你会如何分析问题?
回答:
1、查看系统服务器资源是否占满:磁盘、内存;
2、通过查看磁盘占用状态: df -h;通过写入缓存信息,导致硬盘空间不足;
3、查看内存的使用情况: top;
- 内存泄漏:由于开发编写代码过程对于已经分配内存资源使用完毕之后,并不释放内存的资源,导致后面同样业务处理所占用内存逐步累加,最终导致内存不足。
- 内存溢出:现有空闲内存不足以提供服务器处理客户请求。
作为测试需要定位信息:基于内存泄漏,需要找到占用了资源而不释放具体使用功能是哪个,然后基于功能找到请求地址。
6.2 你怎么使用的 Postman 实施的接口测试
回答:
1.之前说到一般是在开发整体提交SIT测试前,测试人员会有比较充裕的时间,会使用 Postman 快速的对本次测试范围的核心接口进行测试。
2.使用的方式:
第一,我们会依据接口文档,在 Postman 中划分功能目录结构,方便区分接口功能模块。
第二,依据接口文档在 Postman 中创建好对应的 Request 请求用例,配置好请求地址、 Request Header、 Body,确认正常请求能跑通后。
第三,优化接口测试点,基于多参数、少参数、错参数进行测试点配置,利用全局变量以及参数化方式。
七、自动化测试
7.1 在你的项目中做过 UI 自动化,简单说说你是如何做的?
回答:[该问题根据自己的实际所学情况选择实施的程度]
在*** ***项目中,由于经常有版本迭代,回归测试任务还是比较多的。 项目中,由于经常有版本迭代,回归测试任务还是比较多的。
- 部分核心的功能模块界面也比较稳定,为了提供回归测试效率,团队采用了 UI 自动化测试技术来解决回归测试的问题。
- 我们使用的实现技术框架为: pytest + Selenium/Appium + PO 模式 + Allure 的框架来实现的 UI 自动化。
- 整个项目过程中, 也没有专门规划一段时间去一次性完成整体的自动化,而是测试经理规划好整体实现框架后,在版本迭代空闲时间,分配一些脚本编写的任务。
- 在我离开公司时, UI 自动化测试用例库已经基本覆盖到了项目核心功能点和流程。例如: *** ***流程、 *** ***功能模块。其中功能模块。其中 *** *** 是我编写的。
7.2 UI自动化解决了什么问题?你觉得其价值大不大?主要体现在哪?
回答:
个人觉得 UI 自动化测试核心解决的问题还是解决手工回归测试,基于历史功能或流程进行回归,代替绝大部分的回归测试工具,缩减测试工程的重复的工作。
UI 自动化的脚本还可以通过运行来准备测试数据,例如:要测试生成订单后的各种流程,就可以通过运行生成订单的测试用例。
我觉得 UI 自动化测试脚本如果编写的比较全面的话,价值还是很大的。就如上面说的回归测试和构造数据,不过前提是项目适合做 UI自动化测试,否则就没有任何价值了。
八、性能测试
8.1 有没有做过性能测试?简单的描述一下当时是怎么测试的
基于操作层面级别的回答:
1、有的,我在之前的项目测试过程中,对于项目核心的功能模块有按项目要求对于核心的功能模块实施过性能测试。
如电商(商品搜索相关接口、购物车查询、提交订单等场景),这里需要自己根据自己的项目来进行功能模块的挑选。
2、确认好后,会制定好性能测试场景,如单接口并发、压力测试场景。
3、然后部署好的性能测试环境,和生产环境等资源搭建。
4、使用JMeter工具,配置对应接口场景,设定好对应场景所用的的定时器,使用 PerfMon 监控硬件资源, JMeter 的聚合报告查看软件指标。
5、最后总结性能结果产出报告即可。
8.2 有没有测试过百万级用户以上的性能测试场景?简单的描述下
回答:
没有测试过,但是有思路(量力而行)。
百万级用户对应信息有哪些,第一个用户量大,第二个数据量大。
如果让我去测试的话,首先需要想清楚如何解决模拟庞大用户量的问题,其次数据如何构造的问题。
针对第一个问题,基于测试环境也是无法满足测试的要求,可以适当的等比降低服务器,那同样的并发用户数也会降低。
JMeter 的常规情况下在我们普通的执行机上也就2000并发了,可以通过分布式的方式提高一下并发数量。当然也可以使用其它的方式如: Ignareo、 IOCP等解决方案。
针对第二个大批量测试数据的准备,可以通过编写存储过程的方式,也可以直接导入生产环境数据来进行的方式。
数据库的层面的话,通常都会有缓存机制。这些问题解决了之后,其实后续测试执行过程个人觉得大同小异。
九、人事问题
9.1 如果公司录用你,你将怎样开展工作?
思路:
很多企业在招聘开发人员时很看重是否能够尽快上手,所以回答这个问题时要“实打实”的回答,在回答中最好强调能够“尽快”投入开发工作中,这样领导就放心了,会觉得你不是一个只会盲目工作的人,而是一个按部就班,稳打稳扎的人。
回答范例:
我对咱们公司的具体情况只有一个大概了解,在这个职位的?作性质仅仅是我自己的一个理解。作为这个职位而言,我想我首先要对本公司的主营业务要有一个了解,了解公司的业务组成部分、业务的发展方向、我们面向的客户性质等。
第二我要了解所属部门在公司中的地位,以及部门的工作目标,从而确定自身的工作努力方向。
第三,了解我参与项目的开发方式,架构方式,紧密配合领导工作,尽快投入具体的开发工作中。
这就是我开展工作的计划。
9.2 你工作经验欠缺,如何能胜任这项工作?
常规思路:
①如果招聘单位对应届毕业生的应聘者提出这个问题,说明招聘公司并不真正在乎“经验”,关键看应聘者怎样回答。
②对这个问题的回答最好要体现出应聘者的诚恳、机智、果敢及敬业。
③如“作为应届毕业生,在工作经验方面的确会有所欠缺,因此在读书期间我一直利用各种机会在这个行业做兼职。我也发现,实际工作远比书本知识丰富、复杂。但我有较强的责任心、适应能力和学习能力,而且比较勤奋,所以在兼职中均能圆满完成各项工作,从中获取的经验也令我受益匪浅。请贵公司放心,学校所学及兼职的工作经验使我一定能胜任这个职位。 ”
点评:这个问题思路中的答案尚可,突出自己的吃苦能力和适应性以及学习能力(不是学习成绩)为好。
十、总结面试注意事项
1,在面试官面前千万不要抖脚,手脚不要动来动去,不能有小动作。
2,在面试过程中,千万不要跟面试官去争论,说话太冲,太能说、抢话说、乱说都不好,遇到难题,先思考一下,切记心浮气燥,表达时口气温和,谦虚。
3,如果面试过程中都不错,谈的也很好,之后却没有给Offer,完全是自己意料之外的情况,这个很 有可能,或许是因为公司有了其他的人选,不用介意,更不要沮丧。
4,在面试过程中,切忌问关于公司计划、商业机密等相关的东西,不要打探公司的内幕,机密敏感性的问题不要问东问西。
5,千万要注意仪容仪表,要有礼貌,最好不要有口吃,口头表达,逻辑思维很重要,不要让面试官 觉得你很幼稚,太过小孩子气,显的不够稳重踏实。
6,在去面试之前,要熟悉自己的简历,特别是工作经历,准备好关于一些离职原因、职业规划方面的问题的回答方式。
7,在面试过程中, 80%的面试官会让做自我介绍,所以提前要准备一下,说出的内容既要和简历相符,又要有重点有突出的地方,不能像背简历一样。
8,面试完后,如果等待的时间较长,没有回应,就可能没有什么希望了,自己可以打电话去了解情况。
9,在面试过程中,谈到薪资的时候,如果没有说明是税后工资就是税前,假如是税前6000这里面就包括了公司给交的公积金,还有其他五险要交的费用,拿到手差不多4000左右。