最近呢有很多的小伙伴问我有没有什么软件测试的面试题,由于笔者之前一直在忙工作上的事情,没有时间整理面试题,刚好最近休息了一下,顺便整理了一些面试题,现在就把整理的面试题分享给大家,希望可以帮助到各位,废话就不多说了直接上干货。
Tip:我整理的面试题都按照这个目录,点击标题阅读即可,此文章长期有效,找测试相关工作的朋友一定要好好收藏。
目录
软件测试基础
1、什么是测试用例 什么是测试脚本 两者的关系是什么?
为实施测试而向被测试系统提供的输入数据、操作或各种环境设置以及期望结果的一个特定的集合。
测试脚本是为了进行自动化测试而编写的脚本。
测试脚本的编写必须对应相应的测试用例
2、软件产品质量特性是什么?
功能性:适应性、准确性、互操作性、依从性、安全性。
可靠性:成熟性、容错性、易恢复性。
可使用性:易理解性、易学习性、易操作性。
效率:时间特性、资源特性。
可维护性:易分析性、易变更性、稳定性、易测试性。
可移植性: 适应性、易安装性、遵循性、易替换性
3、软件测试的策略是什么?
软件测试策略:在一定的软件测试标准、测试规范的指导下,依据测试项目的特定环境约束而规定的软件测试的原则、方式、方法的集合。
4、软件测试分为几个阶段 各阶段的测试策略和要求是什么?
和开发过程相对应,测试过程会依次经历单元测试、集成测试、系统测试、验收测试四个主要阶段:
单元测试:单元测试是针对软件设计的最小单位––程序模块甚至代码段进行正确性检验的测试工作,通常由开发人员进行。
集成测试:集成测试是将模块按照设计要求组装起来进行测试,主要目的是发现与接口有关的问题。由于在产品提交到测试部门前,产品开发小组都要进行联合调试,因此在大部分企业中集成测试是由开发人员来完成的。
系统测试:系统测试是在集成测试通过后进行的,目的是充分运行系统,验证各子系统是否都能正常工作并完成设计的要求。它主要由测试部门进行,是测试部门最大最重要的一个测试,对产品的质量有重大的影响。
验收测试:验收测试以需求阶段的《需求规格说明书》为验收标准,测试时要求模拟实际用户的运行环境。对于实际项目可以和客户共同进行,对于产品来说就是最后一次的系统测试。测试内容为对功能模块的全面测试,尤其要进行文档测试。
单元测试测试策略:
自顶向下的单元测试策略:比孤立单元测试的成本高很多,不是单元测试的一个好的选择。
自底向上的单元测试策略:比较合理的单元测试策略,但测试周期较长。
孤立单元测试策略:最好的单元测试策略。
集成测试的测试策略:
大爆炸集成:适应于一个维护型项目或被测试系统较小
自顶向下集成:适应于产品控制结构比较清晰和稳定;高层接口变化较小;底层接口未定义或经常可能被修改;产口控制组件具有较大的技术风险,需要尽早被验证;希望尽早能看到产品的系统功能行为。
自底向上集成:适应于底层接口比较稳定;高层接口变化比较频繁;底层组件较早被完成。
基于进度的集成
优点:具有较高的并行度;能够有效缩短项目的开发进度。
缺点:桩和驱动工作量较大;有些接口测试不充分;有些测试重复和浪费。
系统测试的测试策略:
数据和数据库完整性测试;功能测试;用户界面测试;性能评测;负载测试;强度测试;容量测试;安全性和访问控制测试;故障转移和恢复测试;配置测试;安装测试;加密测试;可用性测试;版本验证测试;文档测试
5、软件测试各个阶段通常完成什么工作?各个阶段的结果文件是什么?包括什么内容?
单元测试阶段:各独立单元模块在与系统地其他部分相隔离的情况下进行测试,单元测试针对每一个程序模块进行正确性校验,检查各个程序模块是否正确地实现了规定的功能。生成单元测试报告,提交缺陷报告。
集成测试阶段:集成测试是在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求的活动。该阶段生成集成测试报告,提交缺陷报告。
系统测试阶段:将通过确认测试的软件,作为整个给予计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行环境下,对计算机系统进行全面的功能覆盖。该阶段需要提交测试总结和缺陷报告。
6、测试人员在软件开发过程中的任务是什么?
- 尽可能早的找出系统中的Bug;
- 避免软件开发过程中缺陷的出现;
- 衡量软件的品质,保证系统的质量;
- 关注用户的需求,并保证系统符合用户需求。
总的目标是:确保软件的质量。
7、黑盒测试和白盒测试是软件测试的两种基本方法,请分别说明各自的优点和缺点!
黑盒测试的优点有:比较简单,不需要了解程序内部的代码及实现;与软件的内部实现无关; 从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题;基于软件开发文档,所以也能知道软件实现了文档中的哪些功能;在做软件自动化测试时较为方便。
黑盒测试的缺点有:不可能覆盖所有的代码,覆盖率较低,大概只能达到总代码量的30%;自动化测试的复用性较低。
白盒测试的优点有:帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐 藏的问题。
白盒测试的缺点有:程序运行会有很多不同的路径,不可能测试所有的运行路径;测试基于代码,只能测试开发人员做的对不对,而不能知道设计的正确与否,可能会漏掉一些功能需求;系统庞大时,测试开销会非常大。
8、测试计划工作的目的是什么?测试计划文档的内容应该包括什么?其中哪些是最重要的?
软件测试计划是指导测试过程的纲领性文件:
领导能够根据测试计划进行宏观调控,进行相应资源配置等
测试人员能够了解整个项目测试情况以及项目测试不同阶段的所要进行的工作等
便于其他人员了解测试人员的工作内容,进行有关配合工作
包含了产品概述、测试策略、测试方法、测试区域、测试配置、测试周期、测试资源、测试交流、风险分析等内容。借助软件测试计划,参与测试的项目成员,尤其是测试管理人员,可以明确测试任务和测试方法,保持测试实施过程的顺畅沟通,跟踪和控制测试进度,应对测试过程中的各种变更。
测试计划编写6要素(5W1H):
why——为什么要进行这些测试;
what—测试哪些方面,不同阶段的工作内容;
when—测试不同阶段的起止时间;
where—相应文档,缺陷的存放位置,测试环境等;
who—项目有关人员组成,安排哪些测试人员进行测试;
how—如何去做,使用哪些测试工具以及测试方法进行测试
测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。所以其中最重要的是测试测试策略和测试方法(最好是能先评审)。
9、详细的描述一个测试活动完整的过程。(供参考,本答案主要是瀑布模型的做法)
项目经理通过和客户的交流,完成需求文档,由开发人员和测试人员共同完成需求文档的评审,评审的内容包括:需求描述不清楚的地方和可能有明显冲突或者无法实现的功能的地方。项目经理通过综合开发人员,测试人员以及客户的意见,完成项目计划。然后SQA进入项目,开始进行统计和跟踪
开发人员根据需求文档完成需求分析文档,测试人员进行评审,评审的主要内容包括是否有遗漏或双方理解不同的地方。测试人员完成测试计划文档,测试计划包括的内容上面有描述。
测试人员根据修改好的需求分析文档开始写测试用例,同时开发人员完成概要设计文档,详细设计文档。此两份文档成为测试人员撰写测试用例的补充材料。
测试用例完成后,测试和开发需要进行评审。
测试人员搭建环境
开发人员提交第一个版本,可能存在未完成功能,需要说明。测试人员进行测试,发现BUG后提交给BugZilla。
开发提交第二个版本,包括Bug Fix以及增加了部分功能,测试人员进行测试。
重复上面的工作,一般是3-4个版本后BUG数量减少,达到出货的要求。
如果有客户反馈的问题,需要测试人员协助重现并重新测试。
10、软件测试项目从什么时候开始?为什么?
软件测试应该在需求分析阶段就介入,因为测试的对象不仅仅是程序编码,应该对软件开发过程中产生的所有产品都测试,并且软件缺陷存在放大趋势.缺陷发现的越晚,修复它所花费的成本就越大.
11、您认为做好测试用例设计工作的关键是什么?
白盒测试用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果
黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试,以最少的用例在合理的时间内发现最多的问题
12、一套完整的测试应该由哪些阶段组成?
可行性分析、需求分析、概要设计、详细设计、编码、单元测试、集成测试、系统测试、验收测试
13、面向对象的测试用例设计有几种方法?如何实现?
给类中的每个构造函数设计一组测试用例
组合类中的类变量、实例变量
组合类中的各种方法
根据前置条件和后置条件设计测试用例
根据代码设计测试用例
14、如何定位测试用例的作用?
组织性:编写、组织性、功能覆盖、重复性、跟踪、测试确认
15、需求测试的注意事项有哪些?
是否使用了公司的模板、文档内容是否符合规范、所有的需求是分级是否清析适当、所有的需求是否具有一致性、需求是否可行(即,该需求组合有解决方案)、需求可否用己知的约束来实现、需求是否足够(即,可以把它送到一个规范的开发组织,并有一个生产出所需要产品的合理的可能性)、所有的其它需求是交叉引用是否正确、用户描述是否清楚、是否用客户的语言来描述需求、每个需求描述是否清楚没有岐义,可以移交给一个独立的组去实现时也能理解、是否所有的需求都是可验证的、是否每条需求都具有独立性,即使发生了变化也不会影响其它需求、性能指标是否明确、非功能性需求是否得到充分表现、是否完整列出适用的标准或协议、标准和协议之间是否存在冲突
16、缺陷记录应包含的内容?
缺陷标识、缺陷类型、缺陷严重程度、缺陷产生可能性、缺陷优先级、缺陷状态、缺陷起源、缺陷来源、缺陷原因
17、什么是α测试和β 测试?
α测试:在受控的环境下进行,由用户在开发者的场所进行,开发者指导用户测试,开发者负责记录发现的错误和使用中遇到的问题。
β 测试:在开发者不可控的环境下进行,由软件最终用户在一个或多个客户场所下进行,用户记录测试中遇到的问题,并定期上报给开发者。
项目相关
1、简单介绍下最近做过的项目
根据自己的项目整理完成,要点:
1)项目背景、业务、需求、核心业务的流程
2)项目架构,B/S还是C/5,数据库用的什么? 中间件用的什么?后台什么语言开发的?
是否有做App端,是否有H5是否开发小程序等等。
3)项目前端有哪些功能模块,后台有哪些功能模块?
2、拿一个你所负责的模块,讲下具体怎么测的?
根据自己的项目整理完成,核心要点:
1)拿一个你负责过的模块,核心业务模块讲解
2)业务流程是怎样的,需求怎么样,有什么规则没,规则简单介绍
3)你是如何分析的,讲明分析思路,测试点,主要怎么考虑测试的,主要核心测试重点在哪里,
用了什么测试方法等等。
3、你在这个项目里面主要做了些什么工作?
1)在这个项目中,主要是以功能测试跟后台接口测试为主,主要参加了需求评审会议,用例的编写,
参与用例的评审,执行测试。
2)协助开发定位问题解决发现的bug,编写测试报告,协助上线。
3)另外就是做了APP的一些相关项测试,像兼容性测试、稳定性测试、安装卸载版本覆盖测试和app性能都是有做过的,例外后期有做过接口自动化等。主要就是做了这些工作。
这个具体根据你自己的简历上写的来说
4、你们项目组有多少人、开发多少个、测试多少个?
公司具体人数,可以不太清楚,项目组多少一定清楚
这个一定要根据自己的简历项目大小来说,不能乱说
产品1、项目1个、架构师1个、前端3个、后端5个、ios1个、Android 1个、
测试3个(测试主管,核心测试人员)、运维1个、UI一个
5、测试人员怎么分工的?
1)我们测试组3人,1个测试组长,2个测试,一般都是根据需求的复杂程度大小来,
尽量是自己熟悉哪个版块的就继续做那个版块。
2)比如:我这边主要是负责前端大部分的功能模块,还有接口测试跟ui自动化测试,另一个同事主要是功能测试这边,组长这边也负责一些功能测试,包括一些性能跟安全测试。
3)其实测试工作也划分的没有那么细,后期我们也会做交叉测试,相互测试功能,性能跟安全测试我也会参与一下。
6、项目的送代周期? 多久一选代? 一个版本你们发现多少bug(切记工具自己所选择的项目来回答)
我们公司是这样的,迭代还是蛮快的,一般是两个星期一个迭代,迭代测试两轮。Bug的话不一定哦,关键还得看开发,哈哈,开发的版本质量好的话,BUG就会少些,整个版本比较好的情况下大概也就二十来个BUG,当然如果遇到开发是个新手,那么找到60-70个也是很常见的,比如之前的那个金融项目,足足发现了72个BUG,这样的情况下追踪BUG的工作量都比较的大,如果是版本选代的话,那么基本就不会出现多少BUG了。
参考答案2
因为我们项目的用户活动和三方合作平台比较多,一般半个月或者1个月肯定会有一个迭代版本,
假如用户或者合作方突然有很紧急的需求,那一般老大他们会向上发邮件和OA呈批给(产品经理,项目经理),如果通过了就会马上加急处理这个需求,测试完成直接上线。
现在都是维护为主,但新需求也不断有,一般一个版本上百个bug是有的。
7、你们整个项目写了多少用例,你负责的模块大概写了多少用例?
参考答案:这个得根据项目的复杂程度,我们最近做的这个也还好,整个项目写了大概2干3百多条(有点多了),我负责的模块就写了一千多条(你要思考,你负责了哪些模块,大概评估下,不要乱喊)。
总结注意点:没有标准答案,先说你的前置条件,再说数据,只要你前置条件和数据匹配即可。
8、最近的版本写了多少用例?
(总结注意点:没有标准答案,先说你的前置条件,再说数据,只要你前置条件和数据匹配即可
特别注意:你如果是半个月的版本,一般给你两天写用例,你自己评估下写多少。
半个月的版本:1-2天需求分析,1-2天写用例,1天评审用例,其余的时间就是执行回归bug,编写测试报告)
最近的版本因为没有特别的用户活动,产品那边也没有给特别大的改动需求,我负责的
有5个模块吧,大概有180多条用例。
9、你的需求分析一般几天,用例大概写了多长时间?执行了多长时间?
如果按照2周一个版本来算的话,我们需求分析一般是由产品SE先组织我们开会,讲清新版本需求,然后我们再花1天到1天半时间去详细分析需求,另外有2天左右时间来写用例,写完用例会进行用例评审,后面的时间基本就是在执行用例,提bug,并跟进bug修复问题。
10、在uat测试的时候,突然客户临时要大量的数据
备注说明:uat:测试人员提供用例,uat环境已搭建好,他就开始来执行,如果发现问题,
需要协助,谁负责这个需求,就找对应的人,发现bug,提交到uat版本里面,修复完了,
客户需要回归验证的,我们公司只是辅助他去执行测试。
参考答案:
看他需要的数据能不能从上个版本,或者生产环境导入数据进来测试,如果没有,我们看能不能 批量修改数据去测试,如果不行,我们只能通过存储过程造数据了。
12、每个阶段测试开发在干嘛(比如你写用例的时候开发在干嘛?)
1)需求阶段,大家都在了解需求
2)测试准备,
测试编写用例,开发做概要设计,详细设计,然后就是编写代码,编写接口文档,设计文档。
3)测试执行阶段,
测试人员执行用例,发现bug、提交bug、开发修复bug(开发还有可能在开发未完成的功能)
13、你这个项目做了多久? 你这个项目现在的用户里有多少? 活跃量多少?
时间根据简历来
比如:一年时间,金融项目:100W用户2W活跃用户
计算机基础
1、TCP/IP五层模型(从下往上):
物理层:保证原始数据可在各种物理媒体上传输,主要应用:集线器 数据链路层:传输单位为帧,主要应用:交换机 网络层:传输单位为数据报,主要应用:路由器,保证端到端系统之间通信正常,路径选择、路由及逻辑寻址。主要协议:IP协议、ICMP协议(ping命令即为该协议)、ARP协议(IP地址转为MAC地址)、RARP协议(MAC地址转为IP地址) 传输层:主要应用:网关,保证端口到端口之间的可靠/不可靠的传输,主要协议:TCP\UDP 应用层:传输单位为报文,主要协议:HTTP\FTP等
2、IP地址:
A类地址:第一个字节为网络号,地址范围为0-127 B类地址:前两个字节为网络号,地址范围为128-191 C类地址:前三个字节为网络号,地址范围为192-223
3、子网掩码:1表示网络位,0表示主机位
4、http和https的区别
http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
http是80,https是443,http连接是无状态连接(每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。而cookie和session可以保持http连接状态),HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全
5、cookie和session的区别
1)cookie存储在浏览器上,session存储在服务器上,更安全
2)cookie可在浏览器明文查看,session通过服务器加密是一串无序字符串
cookie有两种:
一种存在于浏览器的进程中,一种存在于硬盘上。每个session有一个唯一的sessionid,这个id存放在浏览器进程中的cookie中。当关闭浏览器后cookie消失了,sessionid也消失了,那服务器端的session也消失了。但实际服务器不知道浏览器是否关闭,因此服务器会设置一个session失效时间,到时间后将对应的session删除。
每次浏览器被关闭后再次打开访问同一个请求,都是不同的session。
当勾选自动登录,其实是将sessionid存放在了硬盘cookie中,这样下次可以免登录
6、tcp和udp区别
udp是不可靠、无连接,tcp是可靠,有连接,三次握手,四次挥手。udp比tcp传播速度更快
udp可以一对多或者多对多连接,tcp是一对一连接
TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证(tcp支持重传,而且也有序列号保证数据顺序)
7、进程与线程区别
1)进程是资源分配的最小单位,计算机把资源分配给进程,同个进程下的线程间共享资源
2)一个进程可以包含多个线程,一个线程只能在一个进程中
3)一个进程内即使有很多线程,也只运行在一个cpu内,多核cpu上可以运行多个进程,提高速度
4)进程的切换开销比线程的大很多,因为每个进程有自己的虚拟地址空间,同个进程下的线程则是共享该进程的虚拟地址空间。进程切换需要切换虚拟地址,虚拟地址映射为物理地址通过页表实现,进程切换页表也切换,导致缓存失效,映射物理地址速率就变慢,而线程不需要切换地址空间
5)线程间的通信方式有4种:wait/notify(等待唤醒)、volatile、CountDownLatch、CyclicBarrier
8、tcp怎么保证可靠性传输
1)校验和:保持首部和数据的校验和
2)序列号:使用序列号保证数据传输的顺序性
3)支持重传
4)停止等待协议:每发完一个分组就停止等待对端确认
9、ping命令不通的原因
1)本机或目的机子未联网,报time_out超时
2)网络很差超时
3)对端有***阻止Ping
10、重定向
在 HTTP 协议中,重定向操作由服务器通过发送特殊的响应(即 redirects)而触发。HTTP 协议的重定向响应的状态码为 3xx 。浏览器在接收到重定向响应的时候,会采用该响应提供的新的 URL ,并立即进行加载,大多数情况下,除了会有一小部分性能损失之外,重定向操作对于用户来说是不可见的。
Python
1、python是动态语言,动态语言和静态语言区别
动态语言无需申明变量类型,运行时才确定数据类型的语言,如python,js等
静态语言需要先申明变量类型,如java\c\c++
2、python装饰器
当一个方法有装饰器修饰时,首先会将该方法当作参数传入装饰器函数中执行,再执行该方法。
3、python可变与不可变类型区别
可变表示值变,但是指向的内存地址不变;不可变表示值变,指向的内存地址也变 tuple 整型 字符串都为不可变类型 list dict set都为可变类型 tuple中嵌套list或者dict,dict和list的值都可变,但是tuple的值不可变。
6、浅拷贝与深拷贝与赋值
赋值表示指向同一个地址,任何一个变都会变。
浅拷贝:嵌套内的原值改变,新值也变。原值改变,新值不变
深拷贝:嵌套内的原值改变,新值不变。原值改变,新值不变
数据库
1、嵌套查询需关注
最外层的为最终的结果,再根据条件一层一层嵌套
嵌套查询每次只查找一个表
2、内连接、左外连接、右外连接
写法:from table_a inner/left/right join table_b on 关联两个表的条件。
三个连接区别:内连接只显示两表中有关联(符合条件)的数据;左连接显示左表所有数据,右表没有对应的数据用NULL补齐,右表多余的数据删除;右连接显示右表所有数据,左表没有对应的数据用NULL补齐,左表多余的数据删除
3、group by的分组字段要与select的字段一致,除去使用聚合函数的字段
group by后可以跟having对分组后的数据再进行筛查
delete table where xxx,update table set xxx
模糊查询用like,不匹配用is not
sum和count区别:sum用于统计值的总和,count用于统计行数即记录数
4、索引(用户不可见,主键默认为索引)
创建索引:create index 索引名称 on table_name(column_name)
根据索引查询:select * from tabel_name where column_name=‘xxx’
为某一列创建索引,搜索该列的值的时候可以提高查询速度,但是索引太多将会影响更新和插入的速度,因为它同样需要更新每个索引文件。
5、主键,外键和索引
主键的值唯一,不能为空,一个表只能有一个主键。
外键的值可以不唯一,可以为空,一个表可以有多个外键,一个表的外键通常是另一隔壁表的主键。
索引的值不能唯一,可以为空,一个表可以有多个索引
6、TOP 子句用于规定要返回的记录的数目,需要现场写sql语句,多为连表查询
Linux
1、vim下的指令参数
- nx:连续向后删除n个字符
- dd:删除游标所在的那一行
- ndd:删除光标所在的向下n行
- vyy:复制光标所在的那一行
- nyy:复制光标所在的向下n行
2、python反转字符串
切片: str【: : -1】
list=list(str) list. reverse() ’ '. join(list)
3、linux查看进程命令
ps -ef | grep 查找需要的进程 top 列出各个进程的资源占用情况 Linux找到被占用的端口号进程并结束: netstat -tunl|grep 端口号 找到进程号后kill -9 进程号(-9强制删除)
Selenium
定位元素方法有id,name,class_name,tag_name,linktext,xpath,css
1、driver.quit()关闭浏览器,driver.close()仅关闭当前页面
2、等待分为强制等待(必须等待多久),显示等待(直到某个元素出现才操作,除非超时)和隐式等待(为浏览器对象创建一个等待时间,得不到某个元素就等待,直至拿到)
3、isDisplayed()方法可以判断某个元素是否显示
4、driver.switchTo().alert()切换到web弹窗
5、driver.window_handles()可查看当前所有句柄,driver.switch_to.window(index)切换句柄
接口测试
1、请结合你熟悉的项目,介绍一下你是怎么做测试的?
首先要自己熟悉项目,熟悉项目的需求、项目组织架构、项目研发接口等
功能 + 接口 + 自动化 + 性能 是怎么处理的?
第一步: 进行需求分析,需求评审,研发和测试对需求达成统一的理解
第二步:架构师会输出接口规范;
前后端开发根据接口进行开发
功能测试人员,开始根据需求设计测试用例
接口测试人员根据接口规范设计测试接口测试用例
第三步:后端开发 先测接口
第四步:接口测试人员对接口进行测试
第五步:接口测试通过之后,输出接口的测试报告
第六步:功能测试人员,根据接口的测试报告和前端开发的提测,来开始进入功能测试,接口测试人员整理接口自动化脚本,并开始在验收环境进行接口测试
第七步:功能测试人员测试环境测试通过后,进入验收环境进行功能的验收测试
UI 自动化小组成员,开始编写回归测试的自动化UI测试的代码
第八步:发布到线上环境,进行最后一轮的功能回归测试
第九步:跟踪产生BUG
2、你们公司是如何做接口测试的?
分析: 一般会发这类问题,最好结合项目回答,并且要回答出使用工具、技术、设计的人力安排、工作成果等
参考答案: 我在上一家公司里面,对HRM人力资源系统进行过接口测试,负责的呢轮毂、员工的增删盖茶,部门的增删盖茶,用户资源查询接口测试,一共12个接口
在公司里我开展测试时,先要进行需求分析,然后开发开发代码时,熟悉项目需求。等待开发提测试接口后,拿到接口文档,然后根据接口文档设计测试用例,使用postman 工具进行接口测试,经过3天的测试,一般能够完成一轮的接口测试。测试完成后,如果所有测试用例都执行完毕,并且所有的bug都回归测试通过,没有严重等级bug之后,就可以移交功能测试。
在功能测试人员进行功能测试时,我们可以编写自动化接口测试代码,然后进行接口层的回归测试。
同时,我们接口测试人员会提前在UAT验收环境进行部署和回归测试。等UAT回归通过之后,前端测试就可以介入UAT测试。
等前端测设通过并发布上线之后,我们可以在UAT 环境使用持续集成技术,持续的监控已发布的版本质量,达到保证项目质量的目的
最后,我们使用接口测试自己数,对人力管理系统进行利系统接口层测试,测试效率比功能测试回归的效率高了16倍,功能测试需要花费一天的时间才能执行完成回归测试工作,我们接口人员利用自动化接口测试技术,只花了半个小时。而且还能持续的监控旧版本的代码质量,提高我们的测试效率
如果面试官不打断,就接着说:
这里面,我们使用Postman的断言,关联、引入外部数据文件,对接口进行测试。并且使用newman工具来生成HTML报告,利用mysql来连接数据库,校验数据库的数据。
其中,一些大数据的测试场景,我们使用csv文件来完成测试。
让人印象深刻的bug:
在工作中,我遇到一些让我印象深刻的bug,其中我在测试登陆接口时,偶然发现,我们不输入用户名和输入一个特定的密码结果登陆成功了,然后让我意识到这是一个后门,然后提单了,并且询问开发为什么会有这种问题,最后开发说,这是数据库中插入了一条脏数据,这个数据没有用户名,然后有密码导致,他们会修复。
面试的建议:
1、最好能够主导面试的分为,控制面试官问的问题。(如果他有准备往往很难控制)
2、面试官必然会问的3类问题:你简历中写的技术;公司中使用的技术,扩展知识(超出面试者个人的知识,都是我们面试时不知道的内容)
3、面试的问题本质上就是我们怎么做的
例如: 你知道HTTP协议码?
这个问题不是在问你知不知道HTTP协议,而是在问你 什么是HTTP协议,有什么特点,有哪些部分组成?
你写过测试用例吗?
我曾经对登陆接口设计过接口测试用例,按照测试方法论等价类、边界值设计了登陆的测试用例,一共设计了46个,主要的关键元素时用例的测试名称,操作步骤,严重等级,预期结果这些部分。
3、什么时候开展接口测试?
我们公司一般都是前后端开发链条后进行接口测试。
但是我们可以提前介入,例如在后端开发输出接口文档之后就开始进行模拟的接口测试,编写测试脚本
我们可以在UAT阶段进行接口的回归测试
持续集成时,使用自动化接口自动的持续监控版本质量
4、接口测试和UI测试的工作是否重复?
参考答案: 接口测试和功能测试是有重复场景的,如果是接口和UI测试时完全分离的,没有重复。
接口测试和功能测试在业务逻辑上是重复的。但是接口测试更注重后端的交互,而功能测试可以注重前端UI交互,这样的话各有侧重点,能更好的管理测试。
但是当前行业中,很多公司基本上都是通过功能测试来进行接口测试的,有时候会省略接口测试,但是这种风险比较高,功能测试无法覆盖厚点接口测试中性能和安全测试点,导致测试不充分,有很高的上线风险。
5、接口测试框架怎么搭建的?
我们公式使用的框架 python+unitest + request + parameterized + HTMLTestRuuner +pymysql 来进行测试接口
其中 unitest 主要用来管理测试用例
requests模块用来发送接口请求和封装接口
parameterized 用于参数化
HTMLTestRunner 用于生成测试报告
pymysql操作数据库
在我们接口框架中,我们首先是新建一个项目,然后再把项目所需要的目录结构搭建好,接着安装框架需要使用requests,parameterized htmltestrunner pymysql这些工具包
编写脚本会调用封装的接口,来进行接口测试。最后再run_suite.py生成测试报告。report目录用来存放测试报告,utils存放自定义的模块
自我介绍要简洁,条理要清晰
6、接口之间有依赖时怎么处理?
可以用关联,我之前在公司对人力资源管理系统进行接口测试时,其中登陆、员工管理模块都有依赖关系,我遇到后,使用postman 工具,先获取上一个接口的响应,然后保存到全局变量,接着在下一个接口中调用保存的变量,从而实现关联来解决接口之间的依赖关系。
代码实现也是将response响应消息中的值保存为变量,在下一次的接口中调用
7、如何判断接口测试的结果 是成功还是失败?
断言接口的返回数据和预期是否一致
如果需要更新数据库的数据,需要到数据库中查询数据是否和修改的一致
数据库中修改完成还需要查询一下,看看是否能够正常的查询
8、常用的接口请求方式和区别
常见的接口请求方式:GET POST PUT delete
GET:用于查询
POST:用于新增
PUT 用于修改
DELETE: 用于删除
其中 GET 和POST有显著的区别:
- GET 没有请求体,它的请求参数直接放在了url中,post 是有请求体的
- GET请求相对来讲不安全,因为参数直接暴露了,post将数据放在了请求体中,相对来讲安全
- GET请求的数据包比POST的小
- get请求支持的编码格式没有post多
9、发送HTTP请求时,传递参数的途径有哪些?
10、自动化测试多久构建一次? 一天构建两次
11、使用工具和代码 实现接口自动化测试的区别
工具:使用简单,但是不灵活,可以应用一些非定制化需求的测试
代码: 非常灵活,可以定制化
12、如何定位前后端bug?????????????????????????
面试官:修改了参数后 点击提交 没有反应,这个时候怎么定位时前端还是后端的问题?
要用fidder抓包来看
- 看一下前端是否发送的正确的请求消息,如果没有发送或者发送了错误的请求消息 则是前端问题
- 如果发送了正确的请求消息:但是服务器没有相应数据返回,则是服务端问题
- 如果发送了正确请求消息,服务端响应了 但是相应错了,这个还是服务端的问题
- 如果发送了正确的请求,服务端也相应了,相应也是正确的,这个就是前段问题
APP测试
1、什么是Android四大组件?
2、当点击APP图标启动程序,说明将要发生那些过程?
3、APP测试的内容主要包括哪些,如何开展?
4、Android的兼容性测试都考虑哪些内容?
5、针对App的安装功能,写出测试点?
6、常用的ADB命令?
7、在查看logcat命令日志时候怎么内容保存到本地文件?
8、App崩溃(闪退), 可能是什么原因导致的?
9、如何测试监测app的内存使用、CPU 消耗、流量使用情况?
10、弱网测试怎么测
11、"//*contains(@text.“登录” )]”是什么意思
12、Appium都有哪些启动方式
性能测试
1、性能测试有哪些分类
2、你认为性能测试的目的是什么?做好性能测试的工作的关键是什么?
3、服务端性能分析都从哪些角度来进行?
4、如何理解压力测试,负载测试以及性能测试?
5、如何判断是否有内存泄漏及关注的指标?
6、描述软件产生内存泄露的原因以及检查方式。(可以结合- 种开发语言进行描述)
7、简述什么是值传递,什么是地址传递,两者区别是什么?
8、什么是系统瓶颈?
LoadRunner
1、LoadRunner的工作原理是什么?
2、LoadRunner分哪三部分?
3、LoadRunner进行测试的流程?
4、什么是并发?在lordrunner中,如何进行并发的测试?集合点失败了会怎么样?
5、11.1.5LoadRunner脚本如何录制和编写?
6、LoadRunner中的Think Time有什么作用?
7、在搜索引擎中输入汉字就可以解析到对应的域名,请问如何用LoadRunner进行测试?
8、一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?
9、客户交付一个性能测试项目,请阐述你的实施流程。
10、解释5个常用的性能指标的名称与具体含义。
11、写出5个Loadrunner中常用函数,并对其中2个举例说明用法。
12、简述LoadRunner的工作原理?
13、什么是集合点?设置集合点有什么意义? LoadRunner 中设置集合点的函数是哪个?
14、HTML-based script与URL-based script 的脚本有什么区别?
15、如何设置LaodRunner才能让集合点只对一半的用户生效? ’
16、LoadRunner的Controller组件中Pacing参数的作用是什么?
17、LoadRunner中如何监控Windows资源?
18、如果让QALoad模拟LoadRunner中只对关注的性能点进行迭代测试,你有什么好方法?
19、什么是负载测试?
20、什么是性能测试?
21、说明负载测试过程?
22、我们什么时候做负载和性能测试?
23、什么是LoadRunner的组件?
人力资源
1、你的测试职业发展是什么?你自认为做测试的优势在哪里?
2、你找工作时,最重要的考虑因素为何?
3、为什么我们应该录取你?
4、请谈谈你个人的最大特色。
5、个测试工程师应具备那些素质和技能?
6、还有问一下你是怎样保证软件质量的,也就是说你觉得怎样才能最大限度地保证软件质…
7、为什么选择测试这行?
8、为什么值得他们公司雇用?
9、如果我雇用你,你能给部门带来什么贡献?
10、如何从工作中看出你是个自动自觉的人
11、你的工作通常能在时限内完成吗,(我想问一下就是她问这 个问题的动机是什么)
12、通常你对于别人批评你会有什么样的反应
13、如果明知这样做不对,你还会依主管的指过去做吗?
14、你在五年内的个人目标和职业目标分别是什么?
15、你怎样做出自己的职业选择?
由于内容过多,就不在这里就不把所有的知识点内容列举出来,以上希望能帮助到你,也希望大家都能找到合适的工作,不留遗憾!
可以点击下方【小卡片】加入我们的技术交流群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。