这里写目录标题
面试第一问:请做个自我介绍个人的基本信息,扬长避短突出自己的技能个人兴趣爱好与结尾总体案例 软件测试基础面试题软件生存周期及其模型是什么?软件配置管理的作用?软件配置包括什么?你们公司测试的一个基本测试流程是什么?测试用例是什么?编写测试用例时会用到什么方法?如何提交高质量的软件缺陷(Bug)记录?简述BUG 管理工具的跟踪过程 软件测试--自动化面试题selenium中hidden或者是display = none的元素是否可以定位到?selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?如何提高selenium脚本的执行速度?如何设计高质量自动化脚本你的自动化用例的执行策略是什么?什么是持续集成?自动化测试的时候是不是需要连接数据库做数据校验?Web定位如何去定位页面上动态加载的元素?如何去定位属性动态变化的元素?点击链接以后,selenium是否会自动等待该页面加载完毕?webdriver client的原理是什么?webdriver的协议是什么?什么是page object设计模式?怎样去选择一个下拉框中的value=xx的option?如何在定位元素后高亮元素(以调试为目的)?什么是断言和验证?page object设置模式中,是否需要在page里定位的方法中加上断言?page object设计模式中,如何实现页面的跳转?自动化测试用例从哪里来?你觉得自动化测试最大的缺陷是什么?什么是分层测试?webdriver可以用来做接口测试吗?get和post 的区别? Android 和 ios 测试区别App 测试中 ios 和 Android 有哪些区别呢?注意点:随着企业对于软件质量的重视,软件测试工程师倍受青睐,对于求职者的要求也在提高,不仅要求求职者具备扎实的理论功底,还要有丰富的实战经验,这就给软件测试工程师求职增加了难度。今天就给大家分享一些常见的软件测试面试题及答案。
面试第一问:请做个自我介绍
面试问题第一问,99.99999%都是:请先做个自我介绍吧个人的基本信息,扬长避短
1、年纪太大与太小,都不需要主动去说明。
软件测试年龄大是弱势,如我年纪只有30+
例子:面试官您好,我叫***,来自于哪里,从事软件测试工作有几年了。
2、专业不对口也不要过多的去提及(提到了就会增加问你的概率)。
比如你的专业是机械专业,面试官就可能会问你为什么转到测试行业?什么机遇转到软件测试行业的
例子:面试官您好,我叫***,来自于哪里,从事软件测试工作有几年了。
比如你的专业是计算机专业
例子:面试官您好,我叫***,来自于哪里,计算机专业毕业后,从事软件测试工作有几年了。
二、突出自己的工作经验
自己的项目经验(重点突出跟你面试公司相关或者同类型的项目)。
比如公司从事的主要是app项目:
以前主要是从事的web与app的项目,最近做的项目主要是app为主,做过不少的项目,也积累了不少的测试经验,能够独立完成产品的测试。
还要突出自己在项目承担的角色
突出自己的技能
1、测试熟练的开发语言(Python中高级必备) 2、测试流程 3、测试需求分析 4、linux系统(熟练搭建测试环境) 5、数据库 6、接口测试 7、自动化测试
8、性能测试
9、安全测试
基于目前市场情况,基本前面7个必备,市场的竞争会越来越大,后期大家需要好好的学习。
个人兴趣爱好与结尾
简单说下就ok。
例子:我平常喜欢看看书,有的时候也喜欢打打游戏,这个是我一个简单的自我介绍,您看,我这边还需要做什么补充吗?
总体案例
面试官您好,我叫****,来自于***。做软件测试工作有N年了。在期间做了不少的项目,也积累了不少的测试经验,能够独立完成软件测试的测试工作。
主要做过功能测试、app专项测试和接口测试方面的工作。对于linux、数据库、fiddler、jmeter的应用都比较熟悉。也用jmeter做过一些性能测试,最近一段时间也做了接口自动化测试,主要是用的python+requests框架实现的。一定要突出自己的技能优势。
我平常喜欢看看书,有的时候也喜欢打打游戏,这个是我一个简单的自我介绍,您看,我这边还需要做什么补充吗?
最后一点:对于自己“会”的重点强调,如果性能跟自动化不会就说只是了解一些,根据自己的情况来定,切记不要照搬。
技术人一定要坚持学习,越努力越幸福。
软件测试基础面试题
软件生存周期及其模型是什么?
答:软件生存周期(Software life cycle)又称为软件生命期,生存期。是指从形成开发软件概念起,所开发的软件使用以后,知道失去使用价值消亡为止的整个过程。一般来说,整个生存周期包括计划(定义)、开发、运行(维护)三个时期,每个时期又划分为若干个阶段,每个阶段有明确的任务。
软件配置管理的作用?软件配置包括什么?
答:软件配置管理(Software Configuration Management,SCM)是一种标识、组织和控制修改的技术。软件配置管理应用于整个软件工程过程。在软件建立时变更是不可避免的,而变更加剧了项目中软件开发者之间的混乱。SCM活动的目标就是为了标识变更、控制变更、确保变更正确实现并向其他有关人员报告变更。从某种角度讲,SCM是一种标识、组织和控制修改的技术,目的是使错误降为最小并最有效地提高生产效率。软件配置包括如下内容:配置项识别、工作空间管理、版本控制、变更控制、状态报告、配置审计。
你们公司测试的一个基本测试流程是什么?
答:首先会召开需求分析会议,参加人员有产品、开发和测试,主要是探讨需求主要的一些功能点,完了之后,开发就排期进行开发,我们就根据主管写出来的计划、分配到的任务编写测试用例,写完之后会进行用例评审,有评审修改的就修改整理形成最终的用例版本,之后开发人员版本编译完成后,我们会依据测试用例来执行测试,测试过程中,提交bug,跟踪bug,直至关闭,测试完后编写测试报告。
测试用例是什么?编写测试用例时会用到什么方法?
答:测试用例是为实施测试而向被测试系统提供的输入数据、操作或各种环境设置以及期望结果的一个特定的集合。测试脚本是为了进行自动化测试而编写的脚本,测试脚本的编写必须对应相应的测试用例。测试用例的方法有两种,白盒测试:逻辑覆盖、循环覆盖、基本路径覆盖;黑盒测试:边界值分析法、等价类划分、错误猜测法、因果图法、状态图法、测试大纲法、随机测试、场景法。
如何提交高质量的软件缺陷(Bug)记录?
答:
通用UI要统一、准确。缺陷报告的UI要与测试的软件UI保持一致,便于查找定位。尽量使用业界惯用的表达术语和表达方法,保证表达准确,体现专业化。每条缺陷报告只包括一个缺陷。不可重现的缺陷也要报告。明确指明缺陷类型根据缺陷的现象,总结判断缺陷的类型。明确指明缺陷严重等级和优先等级。描述 (Description) ,简洁、准确,完整,揭示缺陷实质,记录缺陷或缺陷出现的位置。短行之间使用自动数字序号,使用相同的字体、字号、行间距。每一个步骤尽量只记录一个操作。确认步骤完整,准确,简短。根据缺陷,可选择是否进行图象捕捉。检查拼写和语法缺陷。尽量使用短语和短句,避免复杂句型句式。缺陷描述内容。
简述BUG 管理工具的跟踪过程
测试人员发现了 BUG,提交到 Bugzilla 中,状态为 new,BUG 的接受者为开发接口人员;开发接口将 BUG 分配给相关的模块的开发人员,状态修改为已分配,开发人员和测试确认BUG。如果是本人的 BUG,则设置为接收;如果是别的开发人员的问题,则转发出去,由下一个开发人员来进行此行为;如果认为不是问题,则需要大家讨论并确认后,拒绝这个 BUG,然后测试人员关闭此问题。
如果开发人员接受了 BUG,并修改好以后,将 BUG 状态修改为已修复,并告知测试在哪个版本中
可以测试。测试人员在新版本中测试,如果发现问题依然存在,则拒绝验证;如果已经修复,则关闭BUG。
软件测试–自动化面试题
selenium中hidden或者是display = none的元素是否可以定位到?
不可以,想点击的话,可以用js去掉dispalay=none的属性
selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?
1.首先通过封装find方法,实现wait_for_element_ispresent(WebDriverWait)
2.在对页面进行click之前,先滚动到该元素(通过Js封装),避免在页面未加载完成前或是在下拉之后才能显示。
3.不同方式进行定位,与expected_conditions判断方法封装,循环判断页面元素出现后再操作;
4.开发人员规范开发习惯,如给页面元素加上唯一的name,id等。
如何提高selenium脚本的执行速度?
1.优化测试用例。设置等待时间的时候,少用sleep,尽量不用implicitly_wait,多用显式等待方法;
2.减少不必要的操作步骤。如经过三四步才能打开要测试的页面的话,可以直接通过网址来打开;
3.中断页面加载。如果加载的内容不影响我们测试,就设置超时时间,中断页面加载;
4.使用Selenium grid,通过testNG实现并发执行。 在编写测试用例的时候,实现松耦合,然后再服务器允许的情况下,尽量设置多线程实现并发运行。
用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?
1.在经常检测失败的元素前尽量加上显式等待时间,等要操作的元素出现之后再执行下面的操作;
2.多线程的时候,减少测试用例耦合度,因为多线程的执行顺序是不受控制的;
3.多用 try 捕捉,处理异常;
4.尽量使用测试专用环境,避免其他类型的测试同时进行,对数据造成干扰。
如何设计高质量自动化脚本
1.使用四层结构实现业务逻辑、脚本、数据分离。
2.使用PO设计模式,将一个页面用到的元素和操作步骤封装在一个页面类中。如果一个元素定位发生了改变,我们只用修改这个页面的元素属性
3.对于页面类的方法,我们尽量从客户的正向逻辑去分析,方法中是一个独立场景,例如:登录到退出,而且不要想着把所有的步骤都封装在一个方法中。
4 测试用例设计中,减少测试用例之间的耦合度。
你的自动化用例的执行策略是什么?
1.自动化测试用例是用来监控的。集成到jenkins,创建定时任务定时执行;
2.有些用例在产品上线前必须回归。jenkins上将任务绑定到开发的build任务上,触发执行;
3.有些用例不需要经常执行。jenkins创建一个任务,需要执行的时候人工构建即可。
什么是持续集成?
频繁的将代码集成到主干,持续性的进行项目的构架,以便能能够快速发现错误,防止分支大幅度偏离主干
自动化测试的时候是不是需要连接数据库做数据校验?
UI自动化不需要接口测试会需要Web定位
Selenium有几种定位方式?你最偏爱哪一种,为什么?
Selenium有八种定位方式:
与name有关的有三种:name、class_name、tag_name
与link相关的有两种:link_text、partitial_link_text
与id有关:id
全能选手:xpath、css_selector
如果存在id,我一定使用Id,因为简单方便,定位最快。其次是Xpath,因为很多情况下html标签的属性不够规范,无法唯一定位。Xpath是通过相对位置定位
如果没有,那么CSS定位器应该被优先考虑,因为在大多数现代浏览器中,它们的评估速度比XPath更快。
如何去定位页面上动态加载的元素?
首先触发动态事件,然后再定位。如果是动态菜单,则需要层级定位。——JS实现(对动态事件封装)
如何去定位属性动态变化的元素?
先去找该元素不变的属性,要是都变,那就找不变的父元素,用层级定位(以不变应万变)
属性动态变化也就是指该元素没有固定的属性值,可以通过:
JS实现,
通过相对位置来定位,比如xpath的轴,paren/following-sibling/percent-sibling
/zhaozhan/archive//09/10/1564332.html
点击链接以后,selenium是否会自动等待该页面加载完毕?
不会的。所以有的时候,当selenium并未加载完一个页面时再请求页面资源,则会误报不存在此元素。所以首先我们应该考虑判断,selenium是否加载完此页面。其次再通过函数查找该元素。
webdriver client的原理是什么?
在selenium启动以后,driver充当了服务器的角色,跟client和浏览器通信,client根据webdriver协议发送请求给driver。driver解析请求,并在浏览器上执行相应的操作,并把执行结果返回给client.
webdriver的协议是什么?
WebDrive协议本身是http协议,数据传输使用json
启动浏览器的时候用到的是哪个webdriver协议?
-http
什么是page object设计模式?
1.通俗来讲,把每个页面当成一个页面对象,页面层写定位元素方法和页面操作方法
2.用例层从页面层调用操作方法,写成用例
3.可以做到定位元素与脚本的分离
怎样去选择一个下拉框中的value=xx的option?
1.select类里面提供的方法:select_by_value(“xxx”)
2.xpath的语法也可以定位到
如何在定位元素后高亮元素(以调试为目的)?
-重置元素属性,给定位的元素加背景、边框
什么是断言和验证?
断言(assert):测试将会在检查失败时停止,并不运行后续的检查
优点:可以直截了当的看到检查是否通过
缺点:检查失败后,后续检查不会执行,无法收集那些检查结果状态
验证(vertify):将不会终止测试
缺点:你必须做更多的工作来检查测试结果:查看日志——>耗时多,所以更偏向于断言
page object设置模式中,是否需要在page里定位的方法中加上断言?
不需要,page页只做元素抓取和操作方法
page object设计模式中,如何实现页面的跳转?
初始化driver参数,Page类传driver参数
自动化测试用例从哪里来?
-手工用例中抽取
你觉得自动化测试最大的缺陷是什么?
-不稳定
-可靠性不强
-不易维护
-成本与收益
什么是分层测试?
1.数据层
2.接口层’
3.UI层
webdriver可以用来做接口测试吗?
不可以,webdriver是专门做web的UI自动化参数
get和post 的区别?
1、GET请求:请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。
POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。
2、传输数据的大小
使用GET请求时,传输数据会受到URL长度的限制。
对于POST,理论上是不会受限制的
3、安全性。POST的安全性比GET的高
Android 和 ios 测试区别
App 测试中 ios 和 Android 有哪些区别呢?
1.Android 长按 home 键呼出应用列表和切换应用,然后右滑则终止应用;
2.多分辨率测试,Android 端 20 多种,ios 较少;
3.手机操作系统,Android 较多,ios 较少且不能降级,只能单向升级;新的 ios系统中的资源库不能完全兼容低版本中的 ios 系统中的应用,低版本 ios 系统中的应用调用了新的资源库,会直接导致闪退(Crash);
4.操作习惯:Android,Back 键是否被重写,测试点击 Back 键后的反馈是否正确;应用数据从内存移动到 SD 卡后能否正常运行等;
5.push 测试:Android:点击 home 键,程序后台运行时,此时接收到 push,点击后唤醒应用,此时是否可以正确跳转;ios,点击 home 键关闭程序和屏幕锁屏的情况(红点的显示);
6.安装卸载测试:Android 的下载和安装的平台和工具和渠道比较多,ios 主要有 app store,iTunes 和 testflight 下载;
7.升级测试:可以被升级的必要条件:新旧版本具有相同的签名;新旧版本具有相同的包名;有一个标示符区分新旧版本(如版本号),对于 Android 若有内置的应用需检查升级之后内置文件是否匹配(如内置的输入法)
注意点:
1.并发(中断)测试:闹铃弹出框提示,另一个应用的启动、视频音频的播放,来电、用户正在输入等,语音、录音等的播放时强制其他正在播放的要暂停;
2.数据来源的测试:输入,选择、复制、语音输入,安装不同输入法输入等;
3.push(推送)测试:在开关机、待机状态下执行推送,消息先死及其推送跳转的正确性;应用在开发、未打开状态、应用启动且在后台运行的情况下是 push 显示和跳转否正确;推送消息阅读前后数字的变化是否正确;多条推送的合集的显示和跳转是否正确;
4.分享跳转:分享后的文案是否正确;分享后跳转是否正确,显示的消息来源是否正确;
5.触屏测试:同时触摸不同的位置或者同时进行不同操作,查看客户端的处理情况,是否会 crash 等
在面试的过程中,从回答问题的方式,就可以看出这个人是否有自信,是否敢于承担责任。当然,良好的准备才是打赢胜仗的基础,而只有知己知彼,才能百战不殆。如果你想学习更多软件测试相关的技能及面试技巧,加群:893694563,分享技术面试学习的资料