2022年软件测试面试题 web自动化和接口自动化15道高频面试题

系列文章目录

提示:阅读本章之前,请先阅读目录



前言

2022年软件测试面试题
这里主要讲解各大企业高频的面试题
对于web自动化和接口自动化的一些实战面试题
面试官会从一些细节考究你的技能水平
因为现在很多人都是培训班出来的
简历大部分都是包装的,因此,学习此篇文章,是必要的


面试题1、web自动化和接口自动的testcase有多少?覆盖率是多少?全部执行完需要多久?

讲解1:
web自动化的testcase,一般是根据业务的用例来决定的,假设,有10000个测试用例,那么,自动化测试的testcase大概在2000~3000之间,覆盖率一般情况下,都是在30%左右,并且还要符合是冒烟测试,回归测试的用例,这样才不会造成人力资源的浪费,对于需要经常重复性执行的测试用例,我们就可以把它列入自动化。
接口自动化的testcase,一般是根据接口数来决定的,一个接口,会产生大概20~30个测试用例,假设,有100个接口,那么,测试用例会在2000到3000之间,所以,接口自动化的覆盖率,一般可以达到100%,最少是95%以上,基本上没有什么接口是不需要测的,要测的话,都会全部测完。

讲解2:
一般的来说,执行测试用例,接口自动化会在web自动化之前先执行,但是都会同步去执行我们的自动化测试,如果不涉及分布的执行,那么,对于3000个的web自动化测试用例以及3000个接口自动化测试用例,全部执行时间,大概在30到60分钟,如果是分布式部署执行自动化测试,那么,时间肯定会更少,甚至不到20分钟即可全部执行完毕

考察点:
面试官主要是想了解你在之前的项目过程中,是如何来定测试用例的数量,以及覆盖率是如何定位,对于web自动化来说,如果你的覆盖率太高,势必会造成人员资源的浪费,你需要通过编写大量的脚本去实现测试,那么,对于项目的进度以及成本是非常不利的,所以,需要一个合理正常的范围,手工+自动化,对于手工测试,就是测试新功能,去发现新的缺陷,对于,自动化测试,就是去对回归测试,冒烟用例的重复性测试,保障我们新的版本的迭代,不会影响主要的功能;
对于全部执行的时间,面试官主要是想了解你在之前的项目,在有大量的测试用例情况下,对于执行时间有怎么样的优化方案,以及如何处理,才能够提高生成测试报告的效率。

面试题2、web自动化测试怎么做?接口自动化测试怎么做?

讲解1:

  1. 第一步,开会,当接到新项目之后,项目组会先开一个会,就是研究自动化的可行性分析,就是项目的周期有多长,一般自动化的项目,项目的周期应该要在一年左右及一年以上,以及,需求是否会频繁修改,需求的修改就会意味者脚本需要更新维护,如果太频繁的需求更新,就不适合自动化。再一个就是,编写完的脚本,是否能够多次重复利用,一般要能够运行5次以上,这个脚本才不会造成浪费,这个就是我们评判标准,最后就是,投入跟产出比,是否能够达到预期,让项目如期交付。
  2. 第二步,调研,进行调研我们的测试团队,是否能够执行自动化测试,对于新的项目,执行自动化测试可能会遇到哪些问题,是否需要人手的支援,再一个就是,对于自动化测试框架的选择,是可以选择之前项目的自动化测试框架,还是说需要重新搭建新的自动化测试框架。
  3. 第三步,实施,就是,计划的制定和实施了,根据之前选择好的自动化测试框架,如果需要重新搭建,则重新搭建,如果不需要搭建的,使用之前项目的框架,那么,对于新的需求,之前的框架有一些不兼容的情况下,我们就需要进行改进和优化,让框架来兼容我们的新项目。然后就是,测试用例的提取,测试人员根据项目文档,提取相关的测试用例,并编写测试用例,以及自动化测试脚本,后面可以提交到无人值守的平台,比如,jenkins
  4. 第四步,总结,我们会总结出,整体的流程,并实现流程自动化,对于框架,会编写出,框架的使用文档和规范文档,这样的话,测试人员,只要根据文档,就可以实现新的需求的测试用例的编写和自动化测试。
  5. 第五步,优化,对我们的自动化测试框架,进行持续的优化和改进,改善我们的自动化测试框架,并不是一次两次就结束了,而是会伴随着项目的进度,持续的深度完善,因为会有一些新的需求,框架并不能完全兼容所有的复杂需求,那么,就需要我们去兼容和完善框架
  6. 第六步,就是在项目结束,完成交付之后,我们会重新总结我们的自动化测试框架,把一些比较好的功能逻辑,重新提取,并生成一套更加完善的智能,兼容性更好,扩展性更强的自动化测试框架,以便于应用和推广到新的项目中。

考察点:
面试官,主要想了解你在之前的项目,是怎么去开展新的项目的自动化测试工作,其实,对于接口自动化以及web自动化,本质上,流程都是一样,就是前期的框架选择,会不一样,整体的工作流程,自动化流程,几乎一样,因为,都是要提取测试用例,编写测试用例,最后生成测试报告。
但是更多的话,我们的自动化测试,并不是直接就开始进行项目测试工作,而是会进行一个调研,分析,先考究我们的测试团队,是否能够完成自动化的测试,是否能够达到要求。
再一个就是,面试官,想知道,你有没有真实的参与到测试工作中,你负责的角色是什么,你负责的项目内容是什么?

面试题3、什么是POM模式?为什么要使用它?

讲解1:
POM模式,全称是page object model 页面对象模型,是以页面为对象,页面的元素就是对象的属性,页面的行为操作就是对象的方法,一般情况下,分为三层架构,basepage基础封装层,pageobject页面对象层,testcase测试用例层。

讲解2:
可以更加直观,简单的测试用例,把业务的操作封装成页面对象,测试用例只需要调用即可,如果业务有需求变更,那么只需要修改对象的属性或方法,从而增加代码的可维护性,另外,把大量测试用例共同的属性或方法,都集成在基础封装层,也方便进行统一的管理和维护,同时不但减少了代码量,也让脚本代码有可维护性,扩展性,易用性,减少我们的维护成本,提高我们的脚本编写效率。

考察点:
面试官想要了解你对框架的设计模式,有怎么样的思考和了解,从而判断你在实际开发中,有无脚本代码编写的思维和能力,如果,没有一个清晰的代码编写思维框架,那么,对于,自动化测试开发,会有一定的难度,只能局限于功能测试,手工测试的。

面试题4、说说你对数据驱动和关键字驱动的理解?

讲解1:
数据驱动,即用数据去驱动我们的测试用例的自动化,数据驱动的数据形式,可以有很多种,比如:yaml,excel,csv,mysql,txt都可以,其重点就是数据,所以,数据的形式并不重要,只要我们能够读取到我们需要驱动的数据,然后编写好读取数据的测试用例,实现对同一脚本循环执行。当然,在整个过程中,数据的读取方式,数据的状态,用例是否执行,测试的信息以及测试用例的数据都在数据文件中,当我们有新的测试用例,只需要修改数据文件,从而驱动自动化测试的方式,这就是数据驱动。其核心思维就是,当整体的数据驱动框架搭建完成之后,测试人员,只需要往数据,增加或修改测试用例,只关注测试用例的数据编写,并完成测试报告的输出即可,无需耗费大量时间,去编写重复性的测试方法,而且,大量的脚本代码,也会增加维护成本。

讲解2:
关键字驱动,即通过调用关键字函数,去执行相对应的测试方法,我们把业务的操作,封装成,一个个关键字函数,比如,打开浏览器,打开网页,点击元素,输入元素,获取元素的文本,都封装为一个个关键字函数open_browser,load_url,click,input,getText,这样的话,我们在数据文件,编写好步骤,每一个步骤对应一个操作,每一个操作对应一个关键字函数,不同的关键字实现不同的业务逻辑,当所有的业务逻辑都可以通过调用关键字实现的时候,这就是关键字驱动。
关键字驱动的优点就是,我们可以通过编写数据文件,将我们的测试步骤变的可控,比如,登录页面,我首先打开浏览器,再打开项目,然后输入账户,密码,再点击提交,那实现关键字驱动之后,我就可以随意变更步骤的顺序,我可以先输入密码,再输入账户,我只需要调整步骤的顺序即可,无需通过修改代码,即可实现这一业务需求,是非常的高效。

讲解3:
在企业实战中,一般都是数据驱动和关键字驱动,结合使用的,因为两者都有优点和缺点,结合在一块,刚好弥补不足,两者共同点就是,通过数据文件来驱动自动化测试,在实战中,通过yaml文件来驱动的实用性最佳,因为yaml更接近数据格式,而且读取也方便,无需像excel那样,需要单独封装读取方法,再通过封装读取函数,输出对应的格式,虽然更灵活,但是,比较操作相对来说,比较复杂,而yaml,可以直接读取,并且读取之后不是对象就是列表,也符合驱动所需要的数据格式。

考察点:
面试官想要了解你在项目中,有无应用到这两种主流的用数据或关键字驱动自动化测试,以及,对这两种方式,有无深刻的理解,以及理解的程度,去区分这两者,有什么共同点,不同点。

面试题5、web自动测试用例如何设计?如何提高其脚本稳定性?

讲解1:
web自动化测试用例,是从冒烟用例和回归测试提取的,对于那些主功能,需要重复测试的用例,写入自动化中。
提取的原则如下:

  1. 优先覆盖核心功能的用例,核心流程的用例
  2. 尽量选择不复杂的用例
  3. 尽量选择需要重复执行的用例
  4. 尽量选择正向的测试用例

讲解2:

  1. 定位元素的时候,尽量使用相对定位
  2. 测试用例之间,最好不要产生依赖关联,但登录接口除外
  3. 定位元素的时候,要使用显示等待,WebDriverWait
  4. 加入测试用例失败时,重跑机制
  5. 测试环境和生产环境,开发环境要区分开

讲解3:
对于web测试用例的设计,一个是需要注重元素的定位的问题,可以使用xpath,也可以使用css_selector,多使用多属性同时定位,最好在F12的开发者工具中,多调试一下,看看能够定位到几个元素,如果只需要定位到一个元素,就要更加小心谨慎,虽然说,默认会读取第一个,但是,要保障运行的稳定性,这个是不可避免的,当然,对于一些函数,如果返回的是多个元素,也会报错。
对于web自动化,选取的测试用例,一般来说,都是正向用例,因为是需要保障项目能够正常运行的,在每一次的版本迭代中,要保障主要功能,没有受影响。

考察点:
面试官主要想考察,在日常开展web自动化测试的时候,测试用例是通过怎么样的原则去筛选编写的,是否能够按照web自动化的初衷,去开展自动化的测试。当然,在发生可能的不稳定自动测试中,考察你是否真正从实际需求解决问题,以及应对的方案及细节。

面试题6、举例说明一下你在自动化测试过程中遇到了哪些异常?用到了哪些python库?

讲解1:
NoSuchElementException,无此元素异常
NoSuchArrtibuteException,无此属性异常
NoSuchFrameException,无此frame框架异常
ElementNotVisibleException,元素不可见异常
ElementNoSelectException,元素不可选择异常
TimeOutException,超时异常
ArrayIndexOutOfException,数组下标异常
TypeException,类型异常

讲解2:
web自动化
python,selenium,unittest,xlrd,xlwt,ddt,webdriver,os,time,logging等
接口自动化
python,requests,re,jsonpath,yaml,pytest,allure,pymysql等

考察点:
有哪些异常,突然问到这种问题的话,会很懵逼,即使你看了这些异常,如果,当面来问的话,也可能会忘记,所以,不要慌,可以从日常的一些细节想,从web自动化,你可能会遇到定位失败,你就说定位元素异常,你可能说不出,具体的异常名,但是,也要大概把可能会遇到的异常表达出来即可,毕竟,记住异常名,也不是一个硬性要求。
至于,用的哪些python库,可以从各种插件入手,具体,还是考察你所用的,会不会跟公司使用的技术栈保持基本一致,让你更好的融入测试工作,这个时候,尽量说一些,主流的插件。

面试题7、自动化测试过程中,你遇到了哪些问题?是如何解决的?

讲解1:
在进行web自动化过程中,我会遇到元素定位不到的情况,当然,在使用一些name,id定位的时候,出错的可能性比较低,所以,遇到元素定位异常的,往往可能是xapth或者是css_selector路径错了。所以,我就通过一步一步排查
第一步,就需要先排查定位的路径是否出错
第二步,排查代码的语句,是否正确
第三步,查看页面是否有frame框架
第四步,浏览器的标签有无切换

讲解2:
在进行数据驱动接口自动化测试的时候,第一次登录的时候,会获取到一个token,然后要用于后面接口鉴权的使用,一开始是不知道怎么去传递token,让后面的接口能够获取token。然后,去百度查了相关的资料。
发现可以在数据文件,定义一个获取变量的方式,以及存储的变量的变量名,然后,再执行完请求之后,通过响应的内容,把这个值保存到类的属性下,然后在每一次循环执行测试用例的时候,把这个属性,做传递,这样就保证了后面的测试用例,也有这个属性。然后,在后续的测试用例中,如果要用到这个token,那么,只需要写入自己编写好的格式,然后,再写一个函数,去处理参数,如果发现参数有我们定义好的变量格式,那么,自动把这个变量格式替换成类的属性中对应的变量的值。
然后,实际过程中,这个变量可能会产生一些问题,比如,获取不到,变量未定义什么的。
然后,我又查了相关资料,可以通过定义一个yaml的数据文件,把所有想要保存的变量,都保存到这个yaml,如果需要用的时候,再读取yaml,在用例测试执行的开始之前,需要把这个yaml做清空,这样的话,就可以保证yaml里面的数据,是当前测试用例执行时产生的变量。

考察点:
面试官想要考察,在日常工作测试过程中,如果你遇到了某些问题,是否能够通过自身的能力去解决问题,以及,你解决问题的时候,思路是怎么样的

面试题8、在上一家公司做自动化测试用的框架是什么?

讲解1:
web自动化测试框架
python+unittest+excel关键字驱动+unittestreport+selenium+ddt+jenkins
接口自动化测试框架
python+pytest+allure+yaml+数据驱动+requests+parameters

考察点:
面试官了解你之前的企业用的框架

面试题9、自动化有哪三类等待?它们有什么特点?

讲解1:
第一类等待,就是最常见的,time.sleep,线程等待,也叫强制等待,会暂停所有线程,让程序等待N秒之后才会释放线程,执行下一个操作,不过,这个不建议使用,因为如果项目中,强制等待太多的话,会造成我们的自动化测试执行时间过长,影响效率。

讲解2:
第二类等待,就是隐式等待,implicitly_wait,全局等待,会在指定的时间内,等待页面加载完所有元素之后,再释放进程,如果超时,就会直接释放线程。

讲解3:
第三类等待,就是显式等待,WebDriverWait,一般会配合匿名函数,用于获取元素,在指定时间内,如果获取到元素就会立马返回数据,可以设置获取的频率,以及超时时间。这个也是我们用的最多的,当我们的页面出现该元素的时候,就返回定位的元素

考察点:
对web自动化,这三大类等待,是必须掌握的,因为,在获取的元素的时候,页面可能没有加载完,或者可能刚加载完,这个时候去定位元素,极容易出现找不到元素的异常信息,所以,为了自动化测试的稳定性,是需要去设置等待。

面试题10、在执行web自动化脚本的时候,如何让当前元素高亮显示?

讲解1:
要想让当前高亮显示,我们只需要给该元素添加一个样式属性,style,增加外边框,border: 3px solid red;,我们用javascript注入,就可以实现,这部分的代码,可以写在获取元素的时候,获取到之后立马修改样式。

driver.execute_script(“arguments[0].setAttribute(‘style’,arguments[1]);”, element,
“background:green;border:2px solid red;”)

讲解2:
对于如何取消高亮,可以在显示完高亮之后,可以增加一条线程,在多少秒内把该元素的style属性清空

考察点:
这个一般在点击操作的时候,会用到,我们需要具体看到自动化执行到哪个元素了。

面试题11、在现有的基础上,给你一个新的业务线,你是如何做接口自动化的?

讲解1:

  1. 第一,我会先了解新的业务的逻辑
  2. 第二,我会把当前的接口自动化测试框架进行充分的熟悉
  3. 第三,根据接口自动化的规范文档,编写我们的接口测试用例
  4. 第四,对于一些实现不了业务需求的测试用例,我会申请改进和优化这个自动化测试框架,从而来适应我们的新的业务线的接口自动化测试

面试题12、接口自动化测试框架中,接口关联你们是如何处理的?(100%会问)

讲解1:
通过一个yaml文件,来保存在执行测试用例的时候的所有变量,这个yaml文件,会在测试用例执行之前,先清空,使用open打开文件之后,执行truncate方法。在测试用例的yaml数据文件中,以一个关键字,extract来提取变量,在下一个接口用${}来获取变量

考察点:
在接口自动化过程中,传递变量是非常重要的,比如,登录接口,获取到的token,如何传递给其他的测试用例进行使用

面试题13、Requests中的session会话管理的作用是什么?

讲解1:
调用session方法,会自动管理我们的cookie和记录session的状态,在第一次请求接口的时候,对返回的cookie数据,会进行保存,然后,在第二次请求接口的时候,会自动把所有的cookie带上,并发起请求,这样就自动实现了,接口所需要的cookie鉴权,不需要我们去手写,添加cookie。

考察点:
对接口请求中,cookie是如何处理的

面试题14、接口自动化测试中,断言是如何实现的?

讲解1:
我们会把所有的断言封装成一个类,类里面可以支持多种断言方法,比如,jsonpath断言,正则表达式断言,响应状态码的断言,然后通过数据文件,比如yaml,写入断言的方式和断言的结果,然后通过再把请求之后的响应数据,传入断言类中,断言类根据断言方法执行完之后,返回断言结果。

考察点:
在接口自动化中,如何统一处理断言

面试题15、自动化测试中,动态参数接口,加密接口,签名接口,你们是如何处理的?

讲解1:
热加载

(笔者这里,还未学习到热加载机制,等学习完,再来解答)


更新日志

提示:将会持续优化更新

20220710,面试题1,面试题2,面试题3,面试题4,面试题5,面试题6,面试题7,面试题8,面试题9,面试题10,面试题11,面试题12,面试题13,面试题14,面试题15

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值