随着企业对于软件质量的重视,软件测试工程师倍受青睐,对于求职者的要求也在提高,不仅要求求职者具备扎实的理论功底,还要有丰富的实战经验,这就给软件测试工程师求职增加了难度。今天就给大家分享一些常见的软件测试面试题及答案。
一、自动化测试面试相关
- 你会封装自动化测试框架吗?
- 你觉得自动化测试最大的缺陷是什么?
- 什么是兼容性测试?兼容性测试侧重哪些方面?
- 我现在有个程序,发现在 Windows 上运行得很慢,怎么判别是程序存在问题还是软硬件系统存在问题?
- 自动化代码中,用到了哪些设计模式?
- 测试的策略有哪些?
- 描述测试用例设计的完整过程?
- 上一个项目中自动化测试的执行策略?
- 在上一家公司做自动化测试用的什么框架?
- 怎么对含有验证码的功能进行自动化测试?
- 如何优化和提高 Selenium 脚本的执行速度?
- 遇到alert弹出窗如何处理?
- 元素定位方法你熟悉的有哪些?
- Seleinum是否有读取excel文件的库
- 举例一下你遇到过那些异常,在selenium自动化测试过程中
- 你查找元素遇到过在Frame里面吗?你是如何处理Frame里面元素定位的?
- 在执行脚本过程,如何实现当前元素高亮显示?
- 你知道哪些测试自动化的脚本技术?
二、自动化测试框架有哪些
Appium AppUI自动化测试 Selenium WebUI自动化测试 Jmeter 接口测试,性能测试 Postman 接口测试 Soapui 接口测试 Monkey 稳定性测试 Robot WebUI自动化测试,接口测试 QTP WebUI自动化测试 Locust 性能测试 Loadrunner 性能测试 GT App性能测试 Appscan 安全测试
三、UI
用户界面(User Interface)是指对软件的人机交互、操作逻辑、界面美观的整体设计。好的UI设计不仅是让软件变得有个性有品味,还要让软件的操作变得舒适、简单、自由、充分体现软件的定位和特点。
四、cook和session区别
答:
1、cookie数据存放在客户的浏览器上,session数据存放在服务器上;
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗;考虑到安全应当使用session
3、session会在一定时间内保存在服务器上,当访问量增加时,会比较占用服务器的性能;考虑到减轻服务器性能方面,应当使用cookie
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie;
5、将登录信息等重要信息存放在cookie,其他信息如果需要保留,可以放在cookie中;
sessionStorage localStorage 和cookie之间的区别
共同点:都是保存在浏览器端,且同源的
区别:
1、cookie数据自始至终在同源的http请求中携带,即cookie在浏览器和服务器间来回传递,而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。cookie数据还有路径的概念,可以限制cookie只属于某个路径下。
2、存储大小限制也不同,cookie数据不能超过4K,同时每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识,sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大得多,可以达到5M或者更大。
3、数据有效期不同,sessionStorage仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持
localStorage始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭
4、作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localStorage在所有同源窗口中都是共享的,cookie也是在所有同源窗口中都是共享的
5、WEB Storage支持事件通知机制,可以将数据更新的通知发送给监听者
6、WEB Storage的api接口使用更方便
五、HCP/IP三次握手
1.第一次握手,发送SYN报文,传达信息:“你好,我想建立连接”;
第二次握手,回传SYN+ACK报文,传达信息:“好的,可以建立链接”;
第三次握手,回传ACK报文,传到信息:“好的,我知道了,那我们连接”。然后就建立连接了。
*2.在发送报文之前各方都要确认可以进行连接。**之所以采取三次握手机制,不过是为了信息传输的可靠性,如果其中某个握手失败,*这个过程将会重复,来确保其可靠性。
*3.如果采取两次握手,相当于第二次握手结束便建立连接,如果发送SYN的一方不想连接了,**也不会有反馈,另一方却一直在等待,浪费了时间。当然可以采取4次甚至N次握手,但是有必要吗?建立连接的时间太长,效果也会大打折扣。**所以3次只是折中方案,保证了可靠性,*又节俭了建立连接的时间。
六、简述pageobject
一.)原理
将页面元素定位和对元素的操作行为封装成一个page类,实现对页面对象和测试用例的分离。
一条测试用例可能需要多个步骤操作元素,将每个步骤单独的封装成一个方法,在执行测试用例的时候调用封装好的操作。
类的属性:元素定位
类的行为:元素的操作
测试用例:调用所需页面中对象的行为组成测试用例。
二.)好处
1.当某一个页面的元素发生变化,只需要修改该页面对象中的代码即可,不需要重复不断的修改测试用例。
2.提高代码重用性,结构更加清晰,维护代码更容易。
3.测试用例发生变化时,只需要修改少数页面对象即可。
七、selenium原理?
A:当使用 Selenium启动浏览器 Web Browser 时,后台会同时启动基于 WebDriver Wire 协议的 Web Service 作为 Selenium 的 Remote Server,并将其与浏览器绑定。绑定完成后,Remote Server 就开始监听 Client 端的操作请求。 执行测试时,测试用例会作为 Client 端,将需要执行的页面操作请求以 Http Request 的方式发送给 Remote Server。该 HTTP Request 的 body,是以 WebDriver Wire 协议规定的 JSON 格式来描述需要浏览器执行的具体操作。 Remote Server 接收到请求后,会对请求进行解析,并将解析结果发给 WebDriver,由 WebDriver 实际执行浏览器的操作。 WebDriver 可以看做是直接操作浏览器的原生组件(Native Component),所以搭建测试环境时,通常都需要先下载浏览器对应的 WebDriver。
appium原理?
A:Appium 属于 C/S 架构,Appium Client 通过多语言支持的第三方库向 Appium Server 发起请求,基于 Node.js 的 Appium Server 会接受 Appium Client 发来的请求,接着和 iOS 或者 Android 平台上的代理工具打交道,代理工具在运行过程中不断接收请求,并根据 WebDriver 协议解析出要执行的操作,最后调用 iOS 或者 Android 平台上的原生测试框架完成测试。
1.什么是自动化测试?
-
自动化测试是一种使用自动化工具编写和执行测试人员测试脚本和案例的技术。
-
自动化测试的主要目标是减少手动运行的测试用例数量,而不是完全取消手动测试。
2.什么时候自动化测试?
-
在以下情况下首选自动化
-
* 重复性任务
-
* 烟雾和理智测试
-
* 使用多个数据集进行测试
-
* 回归测试用例
-
通常,决定基于ROI(投资回报率)
3.你什么时候不自动化测试?
-
人们不应该在以下情况下自动化
-
* 当受测试的应用程序频繁更改时
-
* 一次测试案例
-
* 临时 - 随机测试
4.自动化过程涉及哪些步骤?
-
在自动化过程中,涉及的步骤是
-
* 选择测试工具
-
* 定义自动化范围
-
* 规划,设计和开发
-
* 测试执行
-
* 保养
5.规划自动化阶段时涉及的要点是什么?
-
在自动化的规划阶段,必须考虑的事项是
-
* 选择“正确”的自动化工具
-
* 如果选择自动化框架
-
* 范围内和自动范围外的项目列表
-
* 测试环境设置
-
* 为测试脚本开发和执行准备项目时间表的授予图表。
-
* 确定测试可交付成果
6.在什么条件下我们不能使用Agile方法的自动化测试?
-
在以下条件下,自动化测试对敏捷方法无用
-
* 当敏捷测试总是要求改变需求时
-
* 当敏捷需要详尽的文档级别时
-
* 仅适用于敏捷测试期间的回归测试,如持续集成
7.良好的自动化工具的主要特征是什么?
-
* 测试环境支持且易于使用
-
* 良好的调试设施
-
* 强大的物体识别
-
* 对象和图像测试能力
-
* 对象识别
-
* 测试数据库
-
* 支持多个框架
8.软件自动化测试中使用的框架有哪些类型?
-
在软件自动化测试中使用了四种类型的框架
-
* 数据驱动的自动化框架
-
* 关键字驱动的自动化框架
-
* 模块化自动化框架
-
* 混合自动化框架
9.执行自动化测试时的脚本标准是什么?
-
在编写用于自动化的脚本时,您必须考虑以下事项:
-
* 统一命名约定。
-
* 每10行代码3行注释
-
* 足够的缩进。
-
* 强大的错误处理和恢复方案
-
* 尽可能使用框架
10.哪些是最受欢迎的自动化测试工具?
-
最受欢迎的自动化测试测试工具是
-
* QTP(HP UFT)
-
* 理性机器人
-
* Selenium
11.您可以在什么基础上绘制自动化测试的成功图?
-
通过遵循标准,可以映射自动化测试的成功
-
* 缺陷检测率
-
* 自动化执行时间和时间节省以释放产品
-
* 减少人工和其他费用
12.可以列出手动测试的一些缺点吗?
-
* 手动软件测试需要更多时间和更多资源。
-
* 不准确
-
* 反复执行相同的测试用例容易出错并且很无聊。
-
* 在非常大的项目和有时限的项目上进行手动测试是不切实际的。
13.告诉我你对Selenium的了解
-
Selenium是一个免费的(开源)Test Suite框架。它用于自动化Web和移动环境。它包括
-
1. Selenium IDE(浏览器插件 - 录制和播放工具)
-
2. Selenium WebDriver
-
3. Selenium Grid(分布式测试)
-
Selenium支持Java,C#,Python,Ruby,PHP,Perl,Javascript等语言的脚本编写。
14.告诉我有关QTP的信息
-
QTP(Quick Test Professional)现在称为HP UFT。它是一种商业自动化工具,支持各种测试环境Web,桌面,SAP,Delphi,Net,ActiveX,Flex,Java,Oracle,Mobile,PeopleSoft,PowerBuilder,Siebel,Stingray,Visual Basic等。
-
脚本语言是VBScript。该工具可与HP ALM(测试管理工具)和HP LoadRunner(性能测试工具)很好地配合使用。
-
QTP的突出特点包括业务流程测试,关键字驱动框架,XML支持,强大的检查点,测试结果。
15.解释Sikuli是什么?
-
Sikuli是一个使用“Visual Image Match”方法自动化图形用户界面的工具。Sikuli中的所有Web元素都应作为图像存储在项目中。
-
Sikuli由。组成
-
* Sikuli脚本
-
* Jython的Visual Scripting API
-
* Sikuli IDE
-
Sikuli的实际用途是
-
* 它可用于自动化Flash网站或对象
-
* 它可以自动执行基于窗口的应用程序以及您在屏幕上看到的任何内容,而无需使
-
* 它提供简单的API
-
* 它可以很容易地与Selenium等工具相关联
-
* 桌面应用程序可以自动化
-
* Sikuli为自动化Flash对象提供广泛的支持
-
* 要自动化桌面,它使用强大的“Visual Match”和Flash对象
-
* 它可以适用于任何技术--.NET,Java,
16.提到Selenium和Sikuli有什么区别?
-
Selenium:
-
* 它不能自动化视频播放器,音频播放器等闪存对象。
-
* 它有复杂的API
-
* 它没有视觉匹配
-
* 它只能自动化Web应用程序
-
Sikuli:
-
* 它为自动化Flash对象提供了广泛的支持
-
* 它有简单的API
-
* 它使用视觉匹配来查找屏幕上的元素。因此,我们可以自动化我们在屏幕上看到的任何内容
-
* 它可以自动化Web和Windows应用程序
最后大家看一看这十个问题能答出几个?
1.三种等待时间的区别和场景应用?
强制等待、隐式等待、显示等待。
第一个强制等待:就是说,当我去点击
当我把这两行代码
放到这里
不管你这个元素,有没有在页面出现我都等3秒,我再去操作它。是强制,命令式的。但是这些往往一般都只用在脚本的调试,不会真正的出现在自动化测试用例中。你想一想,一个用例十行你加了十个,一个等三秒那十个等三十秒,一个用例三十秒是不可取的。
第二个
隐式等待:一般用在什么地方呢?
这个就是隐式等待。
比如说隐式等待它是一个什么样的区别?就是说你不管点哪里它只要写一次就可以了。像time.sleep(3)你每次都要去写,像driver .implicitly_wait( 3)#一次就好了。它每次去点都会等待三秒,那中间这个三秒它在等什么呢?
重点来了,一个页面它可能有非常多的图片,jss、css、img。就是再加载jss的图片。举个例子我想点击搜索按钮
隐式等待的三秒钟就是在等待这个页面的所有js和图片加载出来。就算你搜索按钮出来了,我还要去等js、img加载完成。理解了吗?软件测试全栈内容欢迎来公众号程序员一凡交流学习。那么如果三秒钟之类jss、css没有加载完成我还是不会去点你,这就是一个隐式等待。它虽然很方便但是有瑕疵。
第三个:
那么什么叫显示等待呢?
字面意思就是和隐式等待相反。一个是隐藏的一个是非常明显的,我想要去做什么就做什么,不需要等待。
当这个搜索按钮一显示出来,我马上就去点它。
我不管页面的其他LOGO、图片有没有加载出来,只要我的想要的比如搜索按钮出来了,我就马上去点击它。
这个题目是做自动化测试非常重要也非常基础的问题,所以我把这个问题排在了第一。
这个问题以后被问到,就难不到你了。
听懂了的朋友,点赞支持一波~
2.之前项目做过自动化测试吗?如何推进的?
工资想超过15K,这个问题是必问的!
不要看这个问题很简单?这个问题其实有点难度的。面试官问你有没有做过自动化测试,那么你肯定不能简单的说:额~我做过!
你要告诉面试官,你如何自动化开展到推进。如何推进的非常重要,你如何开始自动化入和推进,咱们不要片面的去回答,会或者不会。
比如你这样回答:我会,之前公司我们的项目接口方面,前端UI方面我是用selenium这个开源框架加上Python基础架构来实现我的自动化来实现的。
实现原理:用一些单元测试框架unittest去组织我们的测试用例,(或者用Pytest)
数据驱动:比如说我们用execl表去做一个数据驱动,然后我们用到一些关键字驱动,还有你在做自动化你遇到哪一些问题,大家一定要准备几个自动化遇到的问题!这个即使你不说,也是必问的!然后就是这些问题你是如何解决的。
给大家分享一个公式:
如何解决这些问题呢
对你公司项目产生了什么样的价值?像我去面试的时候,我就会说成为我们公司的一个固定资产。
不管是开发、产品、运营,都会用到咱们的这个自动化脚本。可以帮我们线上监控,帮我们自动化回归,帮我们造数据,帮我们跑数据,提高了迭代效率,释放了很多人力。
自动化测试有什么用,是对自动化最大的误解。
很多做软件测试的同行,他没有用过确实感受不到。我之前开始做自动化的时候,在一个人工智能的公司。产品上线之前,CTO只问我一句话,能不能上?因为我这边有很多自动化项目已经不停的在回归,然后功能测试也测了。所以功能+自动化结合就能很自信的上线。它校验出了很多隐藏的BUG,很多因为代码提交、新功能的开发产品的BUG。
3.RF框架用过吗?关键字驱动的原理?如何开发系统关键字?
4.selenium的底层核心原理是什么?有没有做过二次封装?
5.requests中的session会话管理的作用是什么?
6.unittest/pytest有什么区别?
7.谈谈你对自动化分层思想的理解?
其实这句话,经常会被写到一些大型招聘网上去。你会自动化而且还要会自动化分层思想。
做自动化和做功能测试一样,那么它分为哪些东西?
第一个:自动化用例它有一个业务层/业务逻辑
比如登录的业务逻辑是什么?
输入用户名-输入密码-点击登录按钮
分层:
业务逻辑
关键字驱动:
业务层的关键字
,比如说你登录,那么你要去做其他的用例是不是会用到登录这个关键字。这个业务也封装成一个关键字,你其他的一个用例是不是可以用到它了?那接口,接口之间不是有很多的关联对吧,如果你把下单这些接口弄在一起,退货发货这些弄在一起,这就是一个业务层的关键字。
关键字驱动不仅有业务层,还有逻辑层。比如说你需要用到很多的
公共方法
,比如说随机数、随机号码、数据库等等。大家都能用到的,就都封装成一个关键字。
二次封装
click()
有时候我们需要根据需求去二次封装。
关键字驱动不仅仅这三层。还有很多东西要分层,很多驱动、第三方的库、日志、页面、图片、报告等等……
数据驱动
配置文件
8.自动化用例在什么环境下运行、如何批量运行?
能对公司真正的产生效益的自动化肯定是成千上万级别的用例。如果没有达到这个级别,收益一定是很小的。既然是机器在运行的,为什么不去覆盖全面呢?
在这里给大家推荐一个docker容器技术+jenkins定时构建+git
你的代码放在git上面然后用jenkins去关联定时构建,docker保证你的自动化干净的环境(虚拟机的进阶版)运行还可以分布式运行。
我们不管学什么技术,结合实战、自动化应用。很多朋友想学测试开发、测试平台,你自动化、接口、框架你都不会,你谈何去学测试开发?那是不大现实的。
经常有人问题,学习软件测试有什么捷径?
学习一步一步来,有计划性的,不走弯路!就是最大的捷径。
9.有没有独立搭建过自动化测试框架?
10.测试开发在企业中具体是做什么的?
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。