2023年6月29日发(作者:)
软件测试⾯试题整理出炉附(附答案)⼀、Web⾃动化测试um中hidden或者是display = none的元素是否可以定位到?不能,可以写JavaScript将标签中的hidden先改为0,再定位元素um中如何保证操作元素的成功率?也就是说如何保证我点击的元素⼀定是可以点击的?1.添加元素智能等待时间 itly_wait(30)2.添加强制等待时间(⽐如python中写 sleep) ⽅式进⾏ id,name,clas,x path, css selector 不同⽅式进⾏定位,如果第⼀种失败可以⾃动尝试第⼆种3.如何提⾼Selenium脚本的执⾏速度?代码优化,多任务,分布式部署都是可以提升脚本执⾏速度的。4.⽤例在运⾏过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升⽤例的稳定性?( )itly_wait(30)3.多⽤ try 捕捉,处理异常5.你的⾃动化⽤例的执⾏策略是什么?⾃动化测试与软件开发本质上是⼀样的,利⽤⾃动化测试⼯具,经过测试需求分析,设计出⾃动化测试⽤例,从⽽搭建⾃动化测试的框架,设计与编写⾃动化脚本,验证测试脚本的正确性,最终完成⾃动化测试测试脚本(即主要功能为测试的应⽤软件)并输出测试结果6.⾃动化测试的时候是不是需要连接数据库做数据校验?从数据库层⾯来进⾏数据校验可以更⽅便验证系统的数据处理⽅⾯是否正确,数据处理逻辑正常后,UI层⾯上的校验也是需要做的。,name,class,xpath, css selector这些属性,你最偏爱哪⼀种,为什么?css 、xpath ⼏乎所有的元素都可以定位到,但是它们的短处在于页⾯上更改了元素后位置很容易改变,所以⾸先使⽤的还是id或者name等。8.如何去定位页⾯上动态加载的元素?触发动态加载元素的事件,直⾄动态元素出现,进⾏定位9.如何去定位属性动态变化的元素?xpath或者css通过同级、⽗级、⼦级进⾏定位点击链接以后,Selenium是否会⾃动等待该页⾯加载完毕?会的10.什么是page object设计模式?简单来说,就是把页⾯作为对象,在使⽤中传递页⾯对象,来使⽤页⾯对象中相应的成员或者⽅法,能更好的体现⾯向对象语⾔(⽐如java或者python)的⾯向对象和封装特性。11.如何在定位元素后⾼亮元素(以调试为⽬的)?⽤JavaScript等脚本来重置元素属性,给定位的元素加背景、边框12.什么是断⾔?断⾔的英⽂是assertion,断⾔检查的英⽂是assertion checking。断⾔是指定⼀个程序必须已经存在的状态的⼀个逻辑表达式,或者⼀组程序变量在程序执⾏期间的某个点上必须满⾜的条件。13.你觉得⾃动化测试最⼤的缺陷是什么?1.不稳定2.可靠性3.不易维护4.成本与收益ver可以⽤来做接⼝测试吗?接⼝测试有现成的模块来处理,WebDriver是⽤于做WebUI⾃动化测试的。如果要实现接⼝测试,可以使⽤Requests模块来实现⼆、APPUI⾃动化测试d APP 内存不⾜时, 系统如何结束进程获得内存?系统优先结束被挂起(暂停)的进程,释放内存 测试常见的严重问题有哪些?分别引起的原因有哪些?常见的有 crash、ANR(应⽤⽆响应、卡死),⼀般由设备碎⽚化、⽹络波动⼤、内存泄漏、代码编写错误3.请简单介绍你曾使⽤过的⼀款 APP ⾃动化测试⼯具 ?开放性问题,带点主观意见1.对⽐其他熟悉的⾃动化⼯具的优缺点2.⾃动化的简要⽅案(简要的同时关键内容请具体)。(提⽰:appnium 等)d 测试与 web 测试有什么区别?相同点:1.设计测试⽤例均依据等价类、边界值等⽅法,测试原理相同;2.⼤多数都采⽤⿊盒测试⽅法来验证业务功能;3.需要检查界⾯布局、风格和按钮是否美观、统⼀等(UI测试);4.测试页⾯载⼊和翻页的速度、登录时长是否溢出等问题(性能测试)5.测试应⽤系统的稳定性;不同点:1.⼿机作为通信⼯具,通信等⼀些⾏为会对APP产⽣(中断测试)2.⼿机⽤户对app 产品的安装卸载操作:从上⼀版本/上两个版本直接升级到最新版本(安装卸载测试);⾃动化测试使⽤的⼯具较常⽤的是selenium,⽽android⼿机⾃动化测试⽐较常⽤的⾃动化⼯具是monkey、monkeyrunner、Appium(测试⼯具不⼀样) 测试有哪⼏种环境?本地环境:app 安装的⼿机环境和电脑搭建的⾃动化测试环境(⽐如安卓 SDK 等等)。服务器环境:war 包部署的服务器, 服务器可以通过浏览器访问, 也可以通过 app 去访问。(访问的是 web 程序的接⼝)6.简单介绍⼀下 Android SDK 的安装步骤:下载 jdk 和安卓 sdk安装 jdk, 配置环境变量(java_home、 classpath、 path)7.请简要介绍⼀下移动应⽤及其服务端的测试点?移动应⽤主要有权限、安装运⾏卸载、UI、功能、性能、中断、兼容性、安全性、回归、升级更新、⽤户体验。(app的11 ⼤测试点)服务端有接⼝测试、性能测试、安全测试。8.如何判断 app 的 bug 是客户端问题还是后台问题这个要根据业务来,⼀般数据的问题前端的问题多些,⼀般做法是有问题提给前端开发, 他们知道是他们⾃⼰的问题还是后台返回的数据问题。9.安卓中如何取出⽇志信息?把安卓系统⽇志信息实时导⼊到本地:adb logcat -v time > d:运⾏使⽤某个 app,实时获取该 app 的⽇志信息(cmd ⾥⾯的返回信息) :adb shell monkey -p ar -v 1000 > d:10.常见的 adb 命令:查看当前连接的设备:adb devices安装软件:adb install 路径卸载软件:adb uninstall <包名>从电脑上发送⽂件到设备:adb push <本地路径> <远程路径>adb push C: /sdcard/从设备上下载⽂件到电脑:adb pull <远程路径> <本地路径>adb pull /sdcard/ D:实时获取⽇志:adb logcat -v time > D:登录终端设备 shell:adb shell查找包名/活动名:adb logcat | findstr START(脚本中, cmp= 后⾯的值就是 包名/activity 名称)启动 APP 启动adb shell am start -n packageName/activity关闭 app语法:adb shell am force-stop 包名监控 APP 启动时间adb shell am start -W packageName/activityMonkey 命令:adb shell monkey -v -p mypackage 这么多主流机型如何测试 ?我们公司就买了, 魅族, 华为, ⼩⽶, iphone7、 iphone8 、 iphone8plus 、 iphone x 测试兼容性,有些没有的机型,先借⽤同事的⼿机进⾏测试,同时申请公司购买,或者采⽤云真机。 崩溃(闪退),可能是什么原因导致的?缓存垃圾过多:由于安卓系统的特性,如果长时间不清理垃圾⽂件.会导致越来越卡.也会出现闪退情况.运⾏的程序过多,导致内存不⾜应⽤版本兼容问题:如果应⽤版本太低,会导致不兼容,造成闪退。此外,有些新版本在调试中,也会造成应⽤闪退。解决⽅法:如果是版本太旧,更新为新版本即可;如果是新版本闪退,可能是应⽤在改版调试,可卸载后安装旧版。检查 APP 中访问⽹络的地⽅,组件中的 ImageView 是否可以正常的下载并显⽰到 app 页⾯上。检查 APP 的 sdk 和⼿机的系统是否兼容。在⼀些特定情况下的闪退,⽐如播放视频,在 Android5.0 升级到 Android6.0 的时候,有些系统 API ⽼版本有,新版本没有,到时回去对象的时候失败,报空,系统就会出现闪退 都有哪些启动⽅式1.客户端启动2.命令⾏启动14.请简单介绍⼀下使⽤过的安卓UI⾃动化测试⼯具?参考答案:appium:是⼀个移动端的⾃动化框架,可⽤于测试原⽣应⽤,移动⽹页应⽤和混合型应⽤,且是跨平台的。robotium:是⼀款国外的Android⾃动化测试框架,主要针对Android平台的应⽤进⾏⿊盒⾃动化测试,它提供了模拟各种⼿势操作(点击、长按、滑动等)、查找和断⾔机制的API,能够对各种控件进⾏操作。15.请说明Android⼿机和IOS⼿机,系统有什么区别?两者运⾏机制不同:IOS采⽤的是沙盒运⾏机制,安卓采⽤的是虚拟机运⾏机制。两者后台制度不同:IOS中任何第三⽅程序都不能在后台运⾏;安卓中任何程序都能在后台运⾏,直到没有内存才会关闭。IOS中⽤于UI指令权限最⾼,安卓中数据处理指令权限最⾼。接⼝⾃动化测试16.按你的理解,软件接⼝是什么?答:就是指程序中具体负责在不同模块之间传输或接受数据的并做处理的类或者函数。和HTTPS协议区别?答:https协议需要到CA(Certificate Authority,证书颁发机构)申请证书,⼀般免费证书较少,因⽽需要⼀定费⽤;http是超⽂本传输协议,信息是明⽂传输,Https协议是由SSL+Http协议构建的可进⾏加密传输、⾝份认证的⽹络协议,⽐http协议安全;http和https使⽤的是完全不同的连接⽅式,⽤的端⼝也不⼀样,前者是80,后者是443;在哪⼀层?以前我⾯试很喜欢提⽹络协议的问题,有朋友说我装X,不实⽤。稍有点研究⽹络知识,实际就不难回答答:HTTPS在应⽤层。和post区别是什么?答:POST和GET都是向服务器提交数据,并且都会从服务器获取数据。区别:1)传送⽅式:get通过地址栏传输,post通过报⽂传输2)传送长度:get参数有长度限制(受限于url长度),⽽post⽆限制3)GET产⽣⼀个TCP数据包(对于GET⽅式的请求,浏览器会把http header和data⼀并发送出去,服务器响应200返回数据),POST产⽣两个TCP数据包(对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok返回数据)4)get请求参数会被完整保留在浏览历史记录⾥,⽽post中的参数不会被保留5)在做数据查询时,建议⽤GET⽅式;⽽在做数据添加、修改或删除时,建议⽤post⽅式20.常见的POST提交数据⽅式答:主要有四种⽅式:application/x-www-form-urlencoded、multipart/form-data、application/json、text/xML等。21.什么是Http协议⽆状态协议?怎么解决HTTP协议⽆状态协议答:⽆状态是指协议对于事务处理没有记忆能⼒,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。HTTP 是⼀个⽆状态协议,这意味着每个请求都是独⽴的,Keep-Alive 没能改变这个结果。缺少状态意味着如果后续处理需要前⾯的信息,则它必须重传,这样可能导致每次连接传送的数据量增⼤。另⼀⽅⾯,在服务器不需要先前信息时它的应答就较快。HTTP 协议这种特性有优点也有缺点,优点在于解放了服务器,每⼀次请求“点到为⽌”不会造成不必要连接占⽤,缺点在于每次请求会传输⼤量重复的内容信息。客户端与服务器进⾏动态交互的 Web 应⽤程序出现之后,HTTP ⽆状态的特性严重阻碍了这些应⽤程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道⽤户到底在之前选择了什么商品。于是,两种⽤于保持 HTTP 连接状态的技术就应运⽽⽣了,⼀个是 Cookie,⽽另⼀个则是 Session。和session的区别答:cookie数据存放在客户的浏览器上,session数据放在服务器上cookie不是很安全,别⼈可以分析存放在本地的cookie并进⾏cookie欺骗,考虑到安全应当使⽤sessionsession会在⼀定时间内保存在服务器上。当访问增多,会⽐较占⽤你服务器的性能,考虑到减轻服务器性能⽅⾯应当使⽤cookie单个cookie保存的数据不能超过4K,很多浏览器都限制⼀个站点最多保存20个cookie可以将登陆信息等重要信息存放为session;其他信息需要保存,可以放在cookie23.什么是DNS?答:DNS 是域名系统 (Domain Name System),DNS是⽤来做域名解析的,它会在你上⽹输⼊⽹址后,把它转换成IP,然后去访问对⽅服务器;没有它,你想上百度就要记住百度的IP,但有了DNS的处理,你只需要记住对应⽹站的域名,即⽹址就可以了。24.请问你们公司是如何做接⼝测试的?答:接⼝测试实际跟⼀般测试不同就是测试⽤例的设计部分。①获取接⼝规范。②设计接⼝测试功能⽤例(主要从⽤户⾓度出发看接⼝能否实现业务需求,⽤例设计就是⿊盒⽤例那⼀套)。③各种⼊参验证(正常情况,异常情况包括输⼊参数个数不对,类型不对,可选/必选,还有考虑参数有互斥或关联的情况)。④接⼝返回值各种验证(符合接⼝⽂档需求)⑤了解接⼝实现逻辑,实现逻辑覆盖(语句/条件/分⽀/判定/…)⑥接⼝能并发执⾏吗、安全吗,性能满⾜要求吗?⑦采⽤⼯具或者⾃写代码来验证。⑧发现问题跟功能测试⼀样,该报bug报bug,该跟踪状态的跟踪状态。25.怎么设计接⼝测试⽤例?答:通常,设计接⼝测试⽤例需要考虑以下⼏个⽅⾯:①是否满⾜前提条件有些接⼝需要满⾜前提,才可成功获取数据。常见的,需要登录Token逆向⽤例:针对是否满⾜前置条件(假设为n个条件),设计0~n条⽤例②是否携带默认值参数正向⽤例:带默认值的参数都不填写、不传参,必填参数都填写正确且存在的“常规”值,其他不填写,设计1条⽤例③业务规则、功能需求这⾥根据时间情况,结合接⼝参数说明,可能需要设计N条正向⽤例和逆向⽤例④参数是否必填逆向⽤例:针对每个必填参数,都设计1条参数值为空的逆向⽤例⑤参数之间是否存在关联有些参数彼此之间存在相互制约的关系⑥参数数据类型限制逆向⽤例:针对每个参数都设计1条参数值类型不符的逆向⽤例⑦参数数据类型⾃⾝的数据范围值限制正向⽤例:针对所有参数,设计1条每个参数的参数值在数据范围内为最⼤值的正向⽤例26.平常⽤什么⼯具测接⼝的?答:常⽤http协议接⼝测试⼯具,如:postman、fiddler、jmeter;webService接⼝⽤SoapUI、jmeter等。27.没有接⼝⽂档,如果做接⼝测试?本题主要考情商,通俗来说就是忽悠能⼒,先唬住⾯试官了再说,进去了也是瞎测测,随时做好背锅的准备,当然,你肯定不能回答⾯试官不测(⼼理mmp,脸上笑嘻嘻),接下来就是扯犊⼦时间答:⽤抓包⼯具把接⼝抓取处理,然后针对性进⾏测试;接⼝中字段信息不清楚的,找时间集中寻求开发解答。(常⽤抓包⼯具Fiddler、Charles等)28.在⼿⼯接⼝测试或者⾃动化接⼝测试的过程中,上下游接⼝有数据依赖如何处理?答:⽤⼀个全局变量来处理依赖的数据,⽐如登录后返回token,其它接⼝都需要这个token,那就⽤全局变量来传token参数。29.依赖于第三⽅数据的接⼝如何进⾏测试?答:mock30.接⼝测试中,依赖登录状态的接⼝如何测试?答:依赖登录状态的接⼝的本质上是在每次发送请求时需要带上session或者cookie才能发送成功,在构建POST请求时添加必要的session或者cookie31.如何模拟弱⽹做测试?答:Fiddler和charles都可以模拟弱⽹测试,平常说的模拟丢包,也是模拟弱⽹测试。具体可以看《⼏种弱⽹模拟⽅法,总有⼀种适合你》32.你平常做接⼝测试的过程中发现过哪些bug?⾯试官出这个题,主要是想知道你是不是真的做过接⼝测试,毕竟现在很多⼩伙伴简历经过包装(不包装连⾯试机会都没有,没办法,为了⽣存,能理解)答:常规错误,接⼝没实现,没按约定返回结果,边界值处理出错等。输⼊异常值(空值、特殊字符、超过约定长度等),接⼝抛错,没做封装处理;输⼊错误的参数、多输⼊、少输⼊参数,接⼝可能出现的错误;安全性问题,如明⽂传输、返回结果含有敏感信息,没对⽤户⾝份信息做校验,没做恶意请求拦截等;性能问题,如接⼝并发插⼊多条相同操作,响应时间过长,接⼝压测出现瓶颈等;33.当⼀个接⼝出现异常时候,你是如何分析异常的?答:先抓包,⽤fiddler(charles)⼯具抓包,或者浏览器上F12调试⼯具;APP上的话,那就⽤Fiddler做代理,通过⼿机设置代理去看请求和返回报⽂;查看后端⽇志,如Linux系统通过xhell连上服务器,查看接⼝⽇志,查看是否有报错信息(命令:tail -f ⽇志⽂件);34.如何分析⼀个bug是前端还是后端的?答:平常提bug的时候,前端开发和后端开发总是扯⽪,不承认是对⽅的bug。这种情况很容易判断,先抓包看请求报⽂,对着接⼝⽂档,看请求报⽂有没问题,有问题就是前端发的数据不对;请求报⽂没问题,那就看返回报⽂,返回的数据不对,那就是后端开发的问题咯。35.你们做接⼝测试⾃动化吗?答:现在针对⼤量应⽤,普遍推崇做接⼝测试⾃动化,维护成本低、收益⾼。常⽤的⼯具有许多,如Jmeter、Robot Framework、pytest等。36.列出⼏个JMeter监听器?⼀些JMeter监听器是:集合报告汇总报告查看结果树⽤表格查看结果图形结果BeanShell Listener摘要报告等37.在python中进⾏数据驱动测试在unittest中,没有⾃带的数据驱动,我们得借助ddt来实现,⾸先,我们得在python运⾏环境中安装ddt,⽤下列命令安装pip install ddt另外⼀个测试框架pytest,它⾃带数据驱动实现,是通过@trize(argnames,argvalues) 来实现参数化的。也可以根据⾃⼰需求⽤python实现数据的读取和驱动。38.接⼝⾃动化中的关联怎么处理?把上⼀个请求返回的结果传⼊到下⼀个请求的参数中,将请求的结果反射到⼀个类属性(使⽤setattr()函数),下⼀个请求去调⽤这个类属性39.⾃动化测试怎么校验结果?断⾔ ,预期结果与实际结果对⽐数据库校验,根据测试场景来查询数据库⾥的数据和请求之前的数据进⾏⽐对40.⾃动化使⽤的测试框架是什么?简述⾃动化框架的设计、维护测试框架:python+unittest+requests+ddt+openpyxl+pymysql+loggingpython:⼊门简单,语法简洁unittest :定义⼀个测试⽤例类,具体的⽅法来维护测试⽤例的⽣命周期,测试场景⾏为,测试⽤例 前置场景,⾏为,期望结果,实际结果,断⾔⽅法,Setup teardown⽅法requests:接⼝调⽤ ,⽀持http请求的库,API 简洁,提供不同的http请求⽅法,⽀持session,cookies,ddt :数据驱动,ddt 类装饰器,data 测试⽅法装饰器 unpack解包可迭代的数据类型普通⽤户,数据库,配置⽂件—(基础数据)openpyxl:数据管理 excel管理数据,使⽤openpyxl模块来进⾏excel数据的读和写(excle,csv, json, yaML, txt都可以管理测试数据)pymysql:数据库交互,数据校验eval,json:数据格式的转换 Eval将python⽀持的格式转换成对应的格式logging:⽇志处理, 统⼀⽇志输出格式,渠道,级别,执⾏结果的记录,便于定位问题jenkins:持续集成2/框架设计思路:数据驱动+结构分层(可读性,可维护性,可扩展性)数据驱动:将维护数据与代码分离,接⼝调⽤⾏为⼀致,针对不同的参数组合驱动不同的测试场景,减少代码冗余结构分层:数据层+⽤例层+逻辑层数据层:测试数据的⽀撑 ⽤例层:⽤例的执⾏ test_ test_逻辑层:公⽤的⽅法的封装与提取 do_ http_ 等模块3/框架设计步骤:准备测试数据:EXCEL表准备测试⽤例—excel数据的读取—参数值的替换发起请求:请求⽅法(get/post⽅法进⾏封装—URL的拼接(不同—参数转化为字典拿到请求的返回值:解析返回值code,status,msg信息断⾔好处:1、⾃动化测试⽤例和⼿⼯测试⽤例的完美结合,减少重复⼯作2、配置灵活,可以⾃主切换测试环境,执⾏测试⽤例3、常⽤功能进⾏封装,逻辑清晰,易于维护4、统⼀执⾏⼊⼝,管理测试⽤例集:模块通过模糊查找来选择需要执⾏的测试⽤例5、持续集成,定时构建,快速反馈41.具体的在这个项⽬中⾃动化怎么应⽤到实际的,您对⾃动化结果的分析完成所有的⾃动化测试框架的设计和实现后,进⾏接⼝测试,然后集成到jenkins,配置定时执⾏,⽣成htML报表,查看测试通过率,查看接⼝的功能每次发版时,进⾏回归测试,新功能开发未提测前。最后我也整理了⼀些软件测试学习资料,对于学软件测试的⼩伙伴来说应该会很有帮助。有需要资料的朋友可以关注公众号:软件测试⼩dao,免费获取!包括,软件学习路线图,50多天的上课视频、16个突击实战项⽬,80余个软件测试⽤软件,37份测试⽂档,70个软件测试相关问题,40篇测试经验级⽂章,上千份测试真题分享,还有2021软件测试⾯试宝典,还有软件测试求职的各类精选简历,希望对⼤家有所帮助……学习不要孤军奋战,最好是能抱团取暖,相互成就⼀起成长,群众效应的效果是⾮常强⼤的,⼤家⼀起学习,⼀起打卡,会更有学习动⼒,也更能坚持下去。敲字不易,如果此⽂章对你有帮助的话,点个赞收个藏,给作者⼀个⿎励。也⽅便你下次能够快速查找。
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688022888a67606.html
评论列表(0条)