一:前言:浅谈软件测试工程面试
二、数据库和LINUX最常见面试题(重点)
三、功能测试以及项目相关的常见面试题(重点)
四、接口测试常见面试题
五、Python以及自动化测试常见面试题(重点)
六、性能测试常见面试题
七、App常见面试题
八、面试题:总结
本文是笔者就职于某知名培训机构时内部绝密文件!绝密文件!绝密文件!
2020年是以往10年中最差的一年,是往后10年终最好的一年,这句话不知道是谁讲的,好像是罗胖的跨年演讲,虽然有点夸张,但是确也能反映一定的问题,特别是开年的【新冠】黑天鹅事件更是雪上加霜,找工作,找更好的工作,永远是职场人士特别是互联网这个人才流动性巨大行业的永恒话题。
提到找工作,则又离不开对于面试的探讨。网上存在着诸多面试相关的文章攻略,不过对于测试工程师来说很全面的却很少。忽悠或复制粘贴的倒是有很多,本文是笔者就职于某知名培训机构时的软件测试工程师面试的绝密文件,这里无偿分享给大家,真心希望能够给大家带来一些帮助!
阅读前提醒:本文中的连接绝对不可以忽略!本文中的连接绝对不可以忽略!本文中的连接绝对不可以忽略!
笔者来自公众号:软测之家 更多技术干货,视频资料请加:软件测试技术群:695458161 | |
数据库最基本的增,删,改,查, |
最基本的增删改查完整语法都不会的还谈啥面试啊?问问你自己? 1.增加:insert into student values(1,'张三') 2.删除:delete from student 3.修改:update student set sname='李四' where sname='张三' 4.查询:select * from student 5.简单的两个表的内连接inner join。 |
你们什么时候用到数据库(Oracle)? | 1、查看数据库中的数据,用于判断当前操作是否准确。 2、查询数据和修改数据。结合项目举例:(比如:测试短信的失效时间,修改逾期时间等) 3、测试接口和报表时查询返回数据以及报表的数据是否准确。 |
数据库(Oracle)都会哪些? | 基本的增删改查,子查询和多表查询,还有各种函数等和测试相关的操作都没什么问题, |
Oracle客户端如何连接服务器? | 1、安装Oracle客户端和PL/SQL远程连接工具。 2、把服务器目录:app/administartor/product/11g/network/admin/tnsname.ora这个文件中拷贝到客户端相同的位置并多加一组连接服务器的字符串。 |
数据库怎么查中间数据,怎么处理 | Oracle:使用rownum伪列, Mysql:使用Limit Sqlserver:使用top Oracle语句如下: select * from (select s.*,rownum r from student s) t where t.r>=10 and r.r<=20 Mysql语句如下: select * from student limit 5,10 |
1. 你们什么时候用到Linux? 2. Linux使用的是什么版本? 3. 服务器是什么品牌? |
1. 主要就是查看日志,2. 版本是用的:CentOS7 3. 品牌是用的是"惠普" |
Linux你都会哪些命令? | 1. 查看日志:tail -f catalina.2018.11.6.log,主要是查看里面的SQL语句和Exception信息 2. 修改权限:chmod 3. 解压缩命令:tar -zcvf压缩和tar -zxv解压f命令 4. 查看进程和查看端口命令:ps -ef | grep java 和 netstat -anp | grep 8080 5. 其他命令:vi(编辑),操作文件命令,ifconfig(查看IP),free -m(查看内存)等 |
特别注意:数据库面试题和Linux面试题口头上最常问的就是以上这些,但是往往更多的是出现在笔试题里面,特别是最经典的的面试题!
表架构如下:
Student(S#,Sname,Sage,Ssex) 学生表
Course(C#,Cname,T#) 课程表
SC(S#,C#,score) 成绩表
Teacher(T#,Tname) 教师表
常见笔试题如下:
1、查询“001”课程比“002”课程成绩高的所有学生的学号;
select a.S# from (select s#,score from SC where C#='001') a,(select s#,score
from SC where C#='002') b
where a.score>b.score and a.s#=b.s#;
2、查询平均成绩大于60分的同学的学号和平均成绩;
select S#,avg(score)
from sc
group by S# having avg(score) >60;
3、查询所有同学的学号、姓名、选课数、总成绩;
select Student.S#,Student.Sname,count(SC.C#),sum(score)
from Student left Outer join SC on Student.S#=SC.S#
group by Student.S#,Sname
4、查询姓“李”的老师的个数;
select count(distinct(Tname))
from Teacher
where Tname like '李%';
5、查询没学过“叶平”老师课的同学的学号、姓名;
select Student.S#,Student.Sname
from Student
where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平');
6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;
select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');
7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
select S#,Sname
from Student
where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname='叶平'));
8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;
Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2
from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 60);
10、查询没有学全所有课的同学的学号、姓名;
select Student.S#,Student.Sname
from Student,SC
where Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);
笔者来自公众号:软测之家 更多技术干货,视频资料请加:软件测试技术群:695458161 |
|
这个项目的流程是怎样的?(必问) | 项目流程必须画出来死记硬背。包括细节,以及流程怎么测试都必须很流畅的说出来。 |
你们这个项目做了多久? | 项目:4-8个月,App:3-5个月,产品:可以长一点(1-2年甚至更长) |
你们这个项目有多少开发人员,多少测试人员 | 如果开发7-10个人,那么测试2-3个人。如果开发3-5个人,那么测试1个人。 |
你们一般多久迭代一个版本? | 项目总共分三期(其中:每一期里面都是1-2周1个小版本,我们一般是周三下午上线,周三下午交接下一个版本的需求,周四周五了解需求,下周的周一至周三完成用例的编写和评审,下周的周四,周五和下下周的周一,周二,周三都是测试找BUG,包括交叉和发散测试以及测试报告) |
你们这个项目用例写了多久?写了多少条用例? 你们这个项目找Bug找了多久?找了多少个BUG? 举几个Bug例子(或者是你难忘或严重的Bug)? |
1. 每个小版本用例设计和评审的时间大概是3天左右,用例大概在150~300条左右。 2. 我们每次小版本的迭代找Bug的时间大概1周。每个小版本50-100多个BUG的样子 3. 准备严重的Bug2-3个,说流程Bug,不容易发现的Bug,自己去项目中发掘。 |
你们的项目什么时候转测? 你们项目组什么时候结束测试? |
转测标准:当前版本基本完成,测试环境搭建成功,冒烟测试通过。 结束标准:用例和需求覆盖基本达到95%以上,并且没有遗留下影响用户使用的Bug. |
你们这个项目上线了吗? | 已经上线了,从第一期开始就上线了!总共分三期。 |
1.你们公司的测试流程是什么样的(测试流程) 1.给你一个项目,你会如何开展测试工作(测试流程) 1.你们如何设计测试用例的(测试流程) 1.如何保证测试用例的完备性(测试流程) 2.你们公司Bug流程是什么样的(Bug流程) |
1、测试流程:需求分析,测试计划(方案),测试用例,执行用例提交BUG,测试报告。 2、Bug流程:新建news--指派给开发-->开发确认给解决方案(已解决,基于设计,挂起,不是BUG等)-->打回给测试回归-->没问题close(有问题reopen重新打开) |
测试计划包含哪些内容? 测试方案包括哪些内容? 测试用例包含哪些内容? 测试报告包含哪些内容? Bug包含哪些内容? |
1、计划包含:人员和时间的安排,软硬件环境,里程碑,交付件,测试风险等 2、方案包括:包括UI,功能,性能等方案,其中每个方案中主要包括:测试范围,测试目的,测试工具以及测试方法。 3、用例包含:用例编号,用例标题,优先级,预置条件,操作步骤,预期结果,备注 4、报告包含:用例统计,Bug分类统计,遗留Bug情况,测试风险,测试对象评估等 5、BugID,Bug标题,附件,复现步骤,指派给/抄送给,状态,严重程度,优先级,注释 |
Web测试你有做过吗?主要做了哪些测试? | 我做的都是web项目,主要的关注系统的业务流程,功能,性能,兼容性,易用性, 其中:其中功能测试主要是关注业务流程,web的兼容性主要是测试IE,谷歌以及火狐浏览器这三种。IE主要测7,8,9,10,11(通过IETest工具),火狐和谷歌就测了一个版本。 |
给你一个三角形案例,登录案例,电梯案例或者系统中的任何一个功能或物品问你要怎么测? | 不管给你什么问你怎么测,思路都是一样的,首先考虑界面,其次主要是功能、然后才是性能、安全、兼容性、易用性、可靠性、稳定性等。 |
你提的Bug开发认为不是Bug怎么办 | 1、再次确认需求,如果确实是一个BUG那么和开发沟通,并重现这个BUG; 2、考虑是否环境、版本不一样或者是因为缓存的原因。 3、如果因为需求原因存在争议则把BUG丢到项目讨论群一起讨论。 |
如果没有需求或者需求模糊你怎么测试? | 1、首先看项目是否已经基本成型了:如果已经成型则不需要需求直接测项目就行。 2、如果没有成型则看看是否有旧的版本:如果有则先了解旧版本的需求。了解大概。 3、如果什么都没有的话:那么只能参考市场上同类型成熟的产品。并对项目提供建议。 |
用例有评审么?如何评审的 | 一般小公司:组内评审(说这个),大公司:由开发,测试,产品三方会审。 |
session、token,cookie你了解吗? | 1、session是服务端的缓存,cookie是客户端的缓存。 2、session默认登录后不访问项目的情况下半小时失效,我们可以在tomcat/conf/web.xml中修改成1分钟失效来测试session失效后是否有相应的提示并跳转到登录页。 3、cookie在浏览器中保存,在浏览器的"internet"选项中删除cookie来测试。 4、token是接口测试时的鉴权码 |
请参考:2020非常全的接口测试面试题及参考答案-软件测试工程师没有碰到算我输!
https://blog.csdn.net/pengjiangchun/article/details/105392005
笔者来自公众号:软测之家 更多技术干货,视频资料请加:软件测试技术群:695458161 | |
Python99乘法表 | for a in range(1,10): for b in range(1,a+1): print a,"*",b,"=",a*b, print "" |
Python六种数据类型以及方法 | number(int,long,float),string,tuple,list,set,dict,方法参考笔记 |
Python定义函数使用什么关键字? | 使用def定义函数,使用return返回,如何没有return则默认返回None |
自动化做过吗? 你们公司自动化测试的流程是什么样的? |
自动化我们是在XX项目做的!我们项目自动化这一块主要做的是核心流程(冒烟用例)。使python和selenium编写自动化脚本,其中也使用unittest框架做脚本调试和运行,并且使用的PageObject模式,最后通过HTMLTestRunner.py生成自动化测试报告。并给测试组每个人分别发送一份自动化的测试报告邮件。 |
自动化测试什么时候开始?什么时候执行?自动化率? | 我们项目是分三期来做,我们是在第一期功能测试之后开始编写自动化脚本。然后再每次需要做冒烟测试时执行自动化脚本来替换冒烟。自动化率大概30%左右。 |
python和selenium的版本分别是多少? | python3.7,selenium3.4,自动化框架使用的是unittest |
元素的定位用的是什么方法?( 重点 ) | 通过“ID”定位: driver.find_element_by_id() 通过“名字”定位: driver.find_element_by_name() 通过“Xpath”定位: driver.find_element_by_xpath() 通过“Css”定位: driver.find_element_by_css_selector() 通过“链接文本”定位: driver.find_element_by_link_text() 除了常用的五种外还有By的方式定位,By方式主要是用于PageObject页面对象封装(POM) |
如果有元素总是定位不到,可能是什么原因? 你在做自动化时有碰到什么问题吗? |
1、首先查看此元素前后是否有空格、或特殊字符导致定位不到 2、然后查看此元素是否包含在frame或者iframe里面,如果有则需要先进入Frame再定位。 3、有时也可能是页面没有加载完成导致元素定位不到!这样就需要使用time.sleep() 4、如果所有方法都定位不到的话则和开发协调一下修改一下脚本。 |
用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性? | time.sleep( ) 睡眠 WebDriverWart 显式等待 |
自动化用例出错如何处理? | 1、首先肯定是先检查脚本,通过单元测试查看脚本的报错信息,根据错误信息修改脚本。 2、手动执行这个用例。找出问题,有问题再提交Bug。 |
11种页面元素如何处理:包括文本框,密码框,单选框,多选框,下拉框,文件上传等如何处理( 重点 ) | 下拉框处理方式如下:其他的参考pdf文件。 sel=Select(driver.find_element_by_name("sel")) sel.SelectByValue("3"); |
1.框架Frame如何处理,弹出窗口如何处理( 重点 ) 2.页面跳转如何处理,验证码如何处理( 重点 ) |
1、框架:driver.switch_to.frame("框架名"),弹窗:driver.switch_to_alert(); 2、页面跳转:使用handle页面句柄切换页面,验证码:让开发注销掉。 |
1、开发模式或者是封装模式是什么?( 重点 ) 2、增加功能,删除功能,修改功能,查询功能如何断言( 重点 ) |
1、使用的是POM模式,即页面对象模式。 2、增加功能和修改功能,处理后有一个"增加成功","修改成功"字样,通过这个字样来断言。 删除通过点击删除后的弹出窗口中的文字来断言或者是判断删除后的列表中是否包括删除的内容。查询:比如根据分类查询则判断列表中是否都是分类的名称。 |
更多自动化方面的面试题请参考:2020年最全的自动化测试面试题及答案--看完后吊打面试官!
https://blog.csdn.net/pengjiangchun/article/details/105617272
笔者来自公众号:软测之家 更多技术干货,视频资料请加:软件测试技术群:695458161 | |
性能测试做过吗? 你们公司的性能测试流程是怎样的? |
性能测试我们是在XX项目里面做的性能,主要通过LoadRunner11对XX功能做的并发测试,并发了XX个用户。我们是这样来做的: 1、首先就是分析并确定性能需求:包括性能指标的确定:并发数的评估,响应时间,cpu和内存,事务成功率,TPS,吞吐量等。) 2、然后就是搭建性能测试环境,环境必须要纯净。 3、然后就是录制脚本以及调试脚本(包括:插入事务、检查点、关联、参数化、集合点等) 4、然后使用控制器对脚本增压、持续以及减压并执行脚本。增加对服务器的监控。 5、最后通过分析器分析性能测试结果。 |
分析结果是怎么做的? | 1、在Analysis里面把所有的图表都显示出来 2、查看响应时间,CPU和内存,事务成功率等指标值。 3、把虚拟用户图表和tps以及吞吐量的图标合并,主要看随着虚拟用户的增加,tps和吞吐量的变化。如果是上升的趋势,并且波动不大则表示性能正常,如果出现拐点,则需要看资源利用率和响应时间的图表,如果资源利用率和响应时间都没有问题,则是程序和数据库的性能有瓶颈,再考虑是程序还是数据库的问题(通过执行SQL语句判断) |
你做性能测试有没有遇到什么问题?怎么处理的? | 1.如:测搜索功能的时候如果数据库中数据量达到100万以上,响应时间超出预期值5秒(5秒内是合理的,最多超出1-5秒)!(处理方案:建议在数据库加索引,这个开发人员处理) 2.服务器压力测试200个并发的时候,运行不到半个小时,服务器就挂掉了。 |
写脚本的过程当中经常用的函数有哪些? | 1) 检查点函数:web_reg_find() (作用:检查某个操作是否成功完成) 2) 关联函数:web_reg_save_param()(作用:让服务器返回的sessionID和请求关联) 3) 集合点函数:lr_rendezvous() (作用:为了做并发,让虚拟用户集合,然后一起释放) 4) 输出函数:lr_message() |
笔者来自公众号:软测之家 更多技术干货,视频资料请加:软件测试技术群:695458161 | |
APP测试你会么?和Web测试有什么区别? 你们是用的真机还是模拟器? |
1、App和Web的功能测试其实差不多,但是有一些特殊的关注点:比如:弱网,弱电,中断测试,兼容性测试等。 2、除了公司的几台测试机外,其他的都是用的同事的手机在测试。模拟器我们一般只用来测试屏幕的兼容性。 |
APP弱网怎么测? | 使用Fiddler限制流量模拟2G,3G,4G流量来测试都可以。 |
APP的MONKEY测试怎么测? MONKEY测试如何让两次执行的顺序一样? |
1、MONKEY是Android系统自带的一个压力测试工具,主要是模拟用户的操作行为来检测APP包的稳定性和健壮性。首先是安装MONKEY的测试环境,包括JDK和SDK的环境,然后就是获取APK的包名,然后输入ADB命令执行测试,执行了10000次,最后查看执行的日志结果,主要包括崩溃日志(CRASH),内存泄露日志(GC),异常日志(Exception)等。 2、设置-s后面的参数数字一致就可以了。 |
APP的性能测试怎么测? | 我们使用的也是LoadRunner,LR首先需要安装一个补丁包LR_03105_Patch4.exe,然后再录制的时候选择:Mobile App(HTTP/HTML)协议,然后使用160wifi创建热点,然后手机连接到热点,然后在手机上操作需要录制的功能,LoadRunner就可以捕获并且录制到App操作的脚本。录制到脚本后,后面的施压和Web差不多了。 |
APP的兼容性怎么测? | 适配测试主要是屏幕分辨率的兼容性和版本的兼容。这一块我们就是使用测试机和项目的手机(一起10多台)来测的,主要测了:华为,三星,OPPO,小米,苹果这几个机型。 |
全文笔者耗时两小时,纯手打,纯干货,如果您觉得对您有帮助,请点赞,收藏,分享三连!您的支持是笔者最大的动力!
如果你对此文有任何疑问,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入:
软件测试技术群:695458161,群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。
作者:来自公众号:软测之家
出处:https://blog.csdn.net/pengjiangchun
原创不易,欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。