全网最全软件测试面试题含答案(性能测试 功能测试 接口测试 自动化测试)
前言
因为篇幅有限,截图不代表所有资料,图中的资料我都放在公众号【程序员阿信】里面了,回复66就可以领取了。
性能测试方面
简述性能测试流程?
1.分析性能需求。
2.制定性能测试计划。
3.编写测试用例
4.搭建测试环境,准备好测试数据
5.编写性能测试脚本
6.性能测试脚本调优。
7.设计测试场景。
8.分析测试结果。
9.回归性能测试。
10.编写测试报告。
你们性能测试在什么环境什么时间执行?
我们会搭建一套独立的性能测试环境进行测试,时间方面的话,
基准测试:功能测试之后,系统比较稳定的时候再做。
负载测试:夜深人静,系统没人用的时候
think_time的作用是什么?
模拟真实生产用户操作,考察对服务器所造成的影响。
在确定性能测试结果可信后,如果发现以下问题,按下面提供的思路来定位问题
有验证码的功能,怎么做性能测试?
1、将验证码暂时屏蔽,完成性能测试后,再恢复
2、使用万能的验证码
性能测试指标有哪些?
响应时间
吞吐量
cpu
内存
io
disk
功能测试方面
你对软件测试这个行业的看法,为什么要选择软件测试?
软件测试是一个很有前途的职业,我在该行业有了比较多的经验,我觉得我很适合这个职位,也想坚定地走下去。
如果测试过程中发现bug但是开发人员认为不是bug,你应当怎么处理
首先,将问题提交到缺陷管理平台里面进行备案登记。然后,要获取判断的依据和标准:
根据需求说明书、产品说明、设计文档等,确认实际结果是否与计划有不一致的地方,提供缺陷是否确认的直接依据;
如果没有文档依据,可以根据类似软件的一般特性来说明是否存在不一致的地方,来确认是否是缺陷;
根据用户的一般使用习惯,来确认是否是缺陷;
与设计人员、开发人员和产品经理等相关人员探讨,确认是否是缺陷。
合理的论述,向测试经理说明自己的判断的理由,注意客观、严谨,不参杂个人情绪。等待产品经理做出最终决定,如果仍然存在争议,跟测试经理确认,在发上线报告时把这个bug的风险遗留,预警,让全项目方的人都知悉这个情况。
设计测试用例的方法有哪些?
等价类、边界值、判定表、因果图。
软件测试的策略是什么?
软件测试策略:在一定的软件测试标准、测试规范的指导下,依据测试项目的特定环境约束而规定的软件测试的原则、方式、方法的集合。
测试人员在软件开发过程中的任务是什么?
(1)尽可能早的找出系统中的Bug;
(2)避免软件开发过程中缺陷的出现;
(3)衡量软件的品质,保证系统的质量;
(4)关注用户的需求,并保证系统符合用户需求。总的目标是:确保软件的质量。
接口自动化测试方面
get和post的区别?
Get请求,浏览器会把http header和data一起发送,服务器返回200响应码
Psot请求,浏览器先发送header,服务器响应100(continue),然后再发送data,服务器返回200响应码
Post的安全性比get高
接口自动化中的关联怎么处理?
把上一个请求返回的结果传入到下一个请求的参数中,将请求的结果反射到一个类属性(使用setattr()函数),下一个请求去调用这个类属性
自动化测试怎么校验结果?
断言 ,预期结果与实际结果对比
数据库校验,根据测试场景来查询数据库里的数据和请求之前的数据进行比对
说一说你对于参数化和数据驱动的理解?
这个问题牵扯到自动化测试中很重要的两个概念:参数化和数据驱动。其实在我看来他们两个是一回事–测试脚本与数据的分离。举个例子:你的登录脚本原本固定写了一组测试数据:用户名、密码。每次改数据还要改脚本,我要把数据和脚本分离出来,那就把用户名、密码提取到外面,最好放在一个外部文件中,这个就叫参数化。
对于性能测试来说,我想保证每个虚拟用户都使用不同的用户名和密码登录,这样更加贴近真实的业务场景。对于自动化测试来说,我想测试多种数据组合–比如各种类型的用户名、密码。不管是哪种场景,都要有多组数据,但登录操作流程固定不变。这个就叫数据驱动。
对于一般开发语言的单元测试框架都有数据驱动的功能,比如Python的ddt模块,TestNG的DataProvider注解。
接口产生的垃圾数据如何清理
跟上面一样,造数据和数据清理,需用python连数据库了,做增删改查的操作
测试用例前置操作,setUp做数据准备
后置操作,tearDown做数据清理
WebUI自动化测试方面
selenium中如何判断元素是否存在?
没有提供原生的方法判断元素是否存在,一般我们可以通过定位元素+异常捕获的方式判断
selenium中hidden或者是display = none的元素是否可以定位到?
不可以,想点击的话,可以用js去掉dispalay=none的属性
如何提高selenium脚本的执行速度?
1.优化测试用例。
2.减少不必要的操作步骤。
3.中断页面加载。
4.使用Selenium grid。
什么是持续集成?
频繁的将代码集成到主干,持续性的进行项目的构架,以便能能够快速发现错误,防止分支大幅度偏离主干
什么是分层测试?
1.数据层
2.接口层’
3.UI层
App测试方面
请说明IOS手机和Android手机,系统有什么区别?
两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。
你觉得app的性能测试,即专项测试,需要重点关注那些方面?
内存、cpu占用、耗电量、流量等
请简要介绍一下安卓系统四层架构?
从上到下,依次是应用程序层、应用程序框架层、系统运行库层、Linux核心层
试过程中遇到app出现crash或者ANR,你会怎么处理?
可以先把日志过滤出来: adb logcat | findstr xxxxx(过滤日志信息) ,然后再搜索其中的关键字,比如:exception、crash,看看是那些方法或者异常导致了问题的发送,初步定位问题原因后,可以交给开发人员去具体查找深层原因并修复。
请简单介绍一下实用过的安卓UI自动化测试工具?
appium:是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。
robotium:是一款国外的Android自动化测试框架,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑动等)、查找和断言机制的API,能够对各种控件进行操作。