您现在的位置是:首页 >学无止境 >字节跳动10年经验,10W字228道软件测试经典面试题总结(附答案)网站首页学无止境
字节跳动10年经验,10W字228道软件测试经典面试题总结(附答案)
前言
最近有很多粉丝问我,有什么方法能够快速提升自己,通过阿里、腾讯、字节跳动、京东等互联网大厂的面试,我觉得短时间提升自己最快的手段就是背面试题,最近总结了软件测试常用的面试题,分享给大家,希望大家都能圆梦大厂,加油,我命由我不由天。
目录
01、您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
03、您在从事性能测试工作时,是否使用过一些测试工具?如果有,请试述该工具的工作原理,并以一个具体的工作中的例子描述该工具是如何在实际工作中应用的。
04、您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么?
05、在您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?
07、测试活动中,如果发现需要文档不完善或者不准确,怎么处理?
11、软件测试的文档测试应当贯穿于软件生命周期的全过程,其中用户文档是文档测试的重点。那么软件系统的用户文档包括哪些?
21、您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?
35、写出bug报告流转的步骤,每步的责任人及主要完成的工作。
40、您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?
41、您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)
43、测试计划工作的目的是什么?测试计划工作的内容都包括什么?其中哪些是最重要的?
44、您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
45、请以您以往的实际工作为例,详细的描述一次测试用例设计的完整的过程。
46、您以往是否曾经从事过性能测试工作?如果有,请尽可能的详细描述您以往的性能测试工作的完整过程。
50、结构化程序设计和面向对象程序设计各自的特点及优缺点是什么?
51、描述TCP/IP协议的层次结构,以及每一层中重要协议。
53、说出4种以上常用的操作系统及其主要的应用范围(微软的操作系统除外)。
54、在Linux系统中,一个文件的访问权限是755,其含义是什么?
55、Windows操作系统中PATH环境变量的作用是什么?
56、在centos中,从root用户切到userl用户,一般用什么命令?
72、如果在测试过程中发现了BUG,可是开发不承认这是Bug,你会怎么办?
88、根据你以前的工作或学习经验描述一下软件开发、测试过程,由哪些角色负责,你做什么
95、我现在有个程序,发现在Windows上运行得很慢,怎么判别是程序存在问题还是软硬件系统存在问题?
112、您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
118.给你一个字符串,你怎么判断是不是ip地址?手写这段代码,并写出测试用例
121.请对这个系统做出测试用例:一个系统,多个摄像头,抓拍车牌,识别车牌,上传网上,网上展示
140.请问你遇到过哪些印象深刻的bug,接口测试出现bug的原因有哪些?
145.请问如果用户点击微博的关注图标但是app上面没有反应,应该怎么排查这个问题
146.在做测试的过程中,假如前端和后端吵起来了都在踢皮球觉得对方该改代码,你怎么办?
147.如果广东用户头条app刷不出东西了,你应该怎么排查问题
148.请你说一下能不能用机器学习去进行自动化测试,如何监控异常流量,如果是脉冲呢,如何和正常流量作区分
149.请你说一说当前工作中涉及的测试问题(测试流程和测试性能)
150. 请你说一说洗牌问题的思路并手写代码,并设计测试用例
152.请你回答一下性能测试有哪些指标,对一个登录功能做性能测试,有哪些指标,怎么测出可同时处理的最大请求数量
153.请问你有没有做过什么单元测试,怎么进行单元测试,对一个没有参数没有返回值但可能对全局变量有影响的怎么进行单元测试
155. 对于有系统大量并发访问,你会如何做测试,有什么建议
172.Selenium 中如何保证操作元素的成功率?也就是说如何保证我点击的元素一 定是可以点击的?
175. 目前主流的APP自动化测试框架,各个自动化适合的语言
176.Selenium有哪几种定位方式?用的最多的是哪种?
179. 你们一般对什么case会进行自动化,自动化一般在哪个阶段进行
190. selenium是否可以直接读取Excel表中测试用例,来执行相关测试
192. 如果元素定位中遇到iFrame内嵌框架,你是如何定位的?如果没有遇到id属性和name属性为空的情况,又是如何处理的?
193.明明自己定位的元素是对的,执行自动化测试脚本时却报错,这时你有几种方法解决此问题?请写出你的解决方法。
194. 简单说出如何用自动化测试脚本实现遍历复选框点击功能(要求全部勾上)。
195. 写一个自动化脚本,语言不限,要求每执行一次脚本随机生成一个手机号码。
201、启动浏览器的时候用到的是哪个webdriver协议?
206、find_element()和find_elements()方法有什么区别
209.自己开发的自动化框架吗?为啥要开发这么一个框架呢?市面上很多自动化平台为什么不用,却要自己搭建?想过投入产出比吗?
210.说下接口自动化分别用了哪些框架,怎么实现的,你主要负责哪些部分?
211.你们这套框架最难的技术点有哪些?搭建框架过程中遇到哪些问题,怎么解决的?
212.流程场景怎么设计用例的?假如流程比较长,你怎么保障前面流程成功?
214.这套框架覆盖了开发多少业务代码,怎么统计出来的?多少用例,跑一次多长时间?
216.TPS 上不去什么原因,怎么排查?响应时间太长怎么分析?
218.内存泄露和内存溢出有什么区别?分别会有什么现象?怎么定位分析?
219.压测线上环境都会遇到什么问题,数据隔离怎么做的?如何减小对生产影响?
220.测试过程中都发现了哪些性能问题,怎么定位分析的?优化方案是什么?
222.正向代理和反向代理区别?Nginx 了解吗?负载均衡算法
223.mq 是如何测试的?你项目中怎么应用的?mq 的优缺点?为什么使用 mq?怎么保障 mq 消息的有序性、幂等性、可靠性(不丢失)
224.为什么使用 redis,redis 五种数据类型,如何测试 redis 的,项目中如何应用的?
关注 公 zhong 号【软件测试小dao】,回复面试题 ,获取《18万字228道软件测试经典面试题总结(附答案)》文档pdf,背题更方便,一文在手,面试我有。
01、您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
答:有黑盒和白盒两种测试种类,黑盒有等价类划分法,边界分析法,因果图法和错误猜测法。白盒有逻辑覆盖法,循环测试路径选择,基本路径测试。
例子:在一次输入多个条件的完整性查询中。利用等价类划分法则和边界分析法则,首先利用等价划分法,可以一个或多个结果是OK的测试用例,然后确认多个NG的测试用例,然后利用边界值分析法,可以对结果分别是OK和NG的测试用例进行扩展和补充。
02、您认为做好测试用例设计工作的关键是什么?
答:测试用例设计工作的关键是对可行的和不可行的都要考虑。
1,输入 2,详细的操作步骤 3,预期输出 4,实际输出。
03、您在从事性能测试工作时,是否使用过一些测试工具?如果有,请试述该工具的工作原理,并以一个具体的工作中的例子描述该工具是如何在实际工作中应用的。
答:有使用过LoadRunner,该工具能够录制测试人员的操作步骤,然后对这个操作步骤模拟出多个用户来播放出来。
1、Visural User Genertor 创建脚本,选择协议,录制操作,编辑操作。
2、中央控制器(Controller)调度虚拟用户,创建场景,选择脚本,建立虚拟用户,设计shedual,设置ip spoofer。
3、运行脚本。分析shedual。
4、分析测试结果。
04、您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么?
答:性能测试工作的目的是检查系统是否满足在需求说明书中规定的性能,性能测试常常需要和强度测试结合起来,并常常要求同时进行软件和硬件的检测。
性能测试主要的关注对象是响应时间,吞吐量,占用内存大小(辅助存储区),处理精度等。
05、在您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?
答:检测时间,系统环境,硬件环境,严重程度,程式版本,确认人,功能模板,问题描述,详细操作步骤,是否会重现。
问题描述和详细操作步骤要尽可能详细。Bug应该尽量用书面语,对于严重程度比较高的缺陷要在相同环境下测试一遍。
在CS模式下,如果条件满足可以使用替换法来确认是client端的问题还是server端的问题。
06、你对测试最大的兴趣在哪里?为什么?
答:最大的兴趣就是具有挑战性。
因为我并不知道哪里会出现bug,在找到一个bug后会很高兴。并且测试需要很强的耐心和细心。我可以很容易的找到一些细节问题。
07、测试活动中,如果发现需要文档不完善或者不准确,怎么处理?
答:要及时的与项目经理进行沟通协调。要在邮件中详细的把不完善不准确的地方描述出来,并提出自己的意见。
08、你认为做好测试计划工作的关键是什么?
答:首先,要有一个明确的目标,详细的阅读需求文档说明。
其次,要对整个测试人员、测试时间、测试进度进行一个预估,并预先进行管理。
最后,要对整个测试流程设定一个规范,所有测试人员都按着规范做事,不能随心所欲的测试。
09、软件配置管理工作开展的情况和认识?
拿到一台裸机过后要安装客户需要的操作系统,并且安装一些所必须的软件。
10、你觉得软件测试通过的标准应该是什么样的?
答:测试用例完全执行,测试用例覆盖到所有的测试点,并且缺陷的密度达到客户的需求。
11、软件测试的文档测试应当贯穿于软件生命周期的全过程,其中用户文档是文档测试的重点。那么软件系统的用户文档包括哪些?
答:用户安装文档、用户配置文档、用户使用手册、联机指导等。
12、简述软件系统中用户文档的测试要点?
完整性:用户文档中功能的描述要完整的。不能让用户产生疑问。
一致性:用户文档中的功能描述要与实际软件中的功能一致。不能描述过盛。
易使用性:用户文档描述的内容要方便用户阅读并且能够让用户很清楚的知道如何操作。
图表:有的时候用图表描述会很明了。
13、什么是系统瓶颈?
系统瓶颈就是软件在一定的并发量、访问量下无法达到用户的需求。
比如说用户需要在10s内完成一个访问,但是每一次都要12s才能完成,这个就是性能瓶颈,有可能是程序本身的问题,也有可能和操作系统、软件相关。
14、没有产品说明书和需求文档地情况下能够进行黑盒测试吗?
可以。
这个情况下我们就要进行探索性测试,把软件当成用户需求,一步步进行测试。凭借经验判断功能正确与否,有的时候还可以与项目经理、开发人员一起进行交流沟通,从而进行更好的测试。
15、为什么尽量不要让时间富裕的员工去做一些测试?
首先,专业的测试人员是有一定的技能和耐心对软件一步一步进行测试。如果让时间充裕的员工去测试的话,他可能心思并不在测试上面。会很随意的、没有目标的进行测试。这样子的话测试并不完整,有的时候甚至很重要的bug都没法找出。所以还是需要专业的测试人员来进行测试的。
16、完全测试程序是可能的吗?
不可能
测试人员对程序进行测试,只能找出程序中的bug,但是并不能保证程序是没有bug的。
完全的测试要花费很多的人力财力,并且测试的数据量过大,很浪费时间。测试的结果还很多,有的都是类似的,没有必要进行相同的测试。所以完全测试是不可能的。
18、软件测试的风险主要体现在哪里?
主要体现在没法完全测试。有些问题可能隐藏在没有测到的地方。这样子就被忽略了。客户使用的时候并不熟悉软件是如何操作的。可能有的时候会误点点出问题。这样子的话我们就要承担很大的风险了。
发现的缺陷越多,说明软件缺陷越多吗?
是的,通常如果发现一个缺陷的话,有的时候会发现很多类似的缺陷,因为由于开发人员的习惯,可能一个地方有错误,另外一个地方就会有相同的错误。
19、所有的软件缺陷都能修复吗?所有的软件缺陷都要修复吗?
从理论上来说所有的缺陷都是可以修复的,但是并不是所有的缺陷都要修复。
一些对于软件没有影响的、不影响使用的缺陷我们可以不用修复。因为修复些细小的缺陷也是需要花费很多时间。项目上面可能会因为时间问题而先忽略这些小缺陷。
20、开发人员老是犯一些低级错误怎么解决?
要在开发的前期就制定好一些编码规范,这样子可以减少很多因为个人习惯引起的错误。同时,测试人员在发现开发人员犯一些低级错误的时候不可以指责他们,要耐心的给他们指出错误所在。然后可以有开发人员自己进行测试,找出一些一眼看得出来是错误的地方。
21、您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?
我一般都是做的Web测试,搭建测试环境,对于一个程序进行集成测试,系统测试,回归测试等。还要编写测试用例以及一些文档,用户使用手册,功能测试文档等等。最擅长的是功能测试。
22、开发人员说不是bug时,你如何应付?
首先把自己的理由告诉开发人员。在同开发人员沟通到底是不是bug,但是如果开发人员还是认为不是bug的话,就把这个问题提到项目经理处,同时附上自己的理由。有项目经理决定是否为bug。
23、软件测试项目从什么时候开始为什么?
一般软件测试越早展开越好,一般是从需要阶段就要进行软件测试。软件测试不仅是测试功能,对于需求文档一类的也要进行测试。越早的找出bug,就会减少后续开发人员修改程序的次数,并且可以降低成本,如果等整个软件开发的差不多了发现一个致命的错误的话,是需要花费很多时间和人力来重新修改的。如果在一开始就发现的话就不会出现这种情况了。
24、你能不能说下你的3-5年的职业规划?
首先,要巩固自己的测试基础知识,在基本知识扎实的情况下提高理解需求文档地能力。
其次,学习自动化测试工具,并将它运用到测试中。
然后,在测试技术达到一定程度后,要学会如何带领一个测试团队。
最后,争取在最快的时间内达到测试经理的水平。
25、功能测试用例需要详细到什么程度才是合格的?
测试用例覆盖到所有的测试点。
26、一个缺陷测试报告的组成?
缺陷编号、缺陷标题、缺陷描述、缺陷的优先级、缺陷的重要程度、缺陷所述的模块、缺陷所属的版本、缺陷所属的开发人员、输入数据、输出结果、缺陷分析等。
27、测试用例通常包括哪些内容?
用例编号、测试环境、用例标题、输入数据、预期结果等
28、你都用什么测试方法?
根据不同的系统和模块有不同的方法。主要是黑盒测试和白盒测试。
29、软件的评审一般由哪些人员参加?其目的是什么?
参加人员:客户、项目经理、开发人员、测试人员
目的:查看软件在未正式投入运行前是否还存在问题。对于不同软硬件平台能否正常运行,是否有与客户理解不一致的地方,同时可以对一些可以改进的地方再多加改进。
30、什么是软件测试,软件测试的目的?
软件测试是通过人工或者自动化的操作进行还没有商业化用途的程序,查看他们的功能是否满足客户需求。
目的:在最短时间内找出尽可能多的软件缺陷。
31、软件测试人员就是QA吗?
软件测试人员的职责是尽可能早的找出软件缺陷,确保得以修复。而质量保证人员(QA)主要职责是创建或者制定标准和方法,提高促进软件开发能力和减少软件缺陷。测试人员的主要工作是测试,质量保证人员日常工作重要内容是检查与评审,测试工作也是测试保证人员的工作对象。
软件测试和质量是相辅相成的关系,都是为了提高软件质量而工作。
32、和用户共同测试(UAT测试)的注意点有哪些?
软件产品在投产前,通常都会进行用户验收测试。如果用户验收测试没有通过,直接结果就是那不到“Money”,间接影响是损害了公司的形象,而后者的影响往往更严重。根据作者的经验,用户验收测试一定要让用户满意。
实际上用户现场测试更趋于是一种演示。在不欺骗用户的前提下,我们向用户展示我们软件的优点,最后让“上帝”满意并欣然掏出“银子”才是我们的目标。因此用户测试要注意下面的事项:
(1)用户现场测试不可能测试全部功能,因此要测试核心功能。这需要提前做好准备,这些核心功能一定要预先经过测试,证明没有问题才可以和用户共同进行测试。测试核心模块的目的是建立用户对软件的信心。当然如果这些模块如果问题较多,不应该进行演示。
(2)如果某些模块确实有问题,我们可以演示其它重要的业务功能模块,必要时要向用户做成合理的解释。争得时间后,及时修改缺陷来弥补。
(3)永远不能欺骗用户,蒙混过关。道理很简单,因为软件是要给用户用的,问题早晚会暴露出来,除非你可以马上修改。
和用户进行测试还要注意各种交流技巧,争取不但短期利益得到了满足,还要为后面得合作打好基础。
33、如何编写提交给用户的测试报告?
随着测试工作越来越受重视,开发团队向客户提供测试文档是不可避免的事情。很多人会问:“我们可以把工作中的测试报告提供给客户吗?”答案是否定的。因为提供内部测试报告,可能会让客户失去信心,甚至否定项目。
测试报告一般分为内部测试报告和外部测试报告。内部报告是我们在测试工作中的项目文档,反映了测试工作的实施情况,这里不过多讨论,读者可以参考相关教材。这里主要讨论一下外部测试报告的写法,一般外部测试报告要满足下面几个要求:
-根据内部测试报告进行编写,一般可以摘录;
-不可以向客户报告严重缺陷,即使是已经修改的缺陷,开发中的缺陷也没有必要让客户知道;
-报告上可以列出一些缺陷,但必须是中级的缺陷,而且这些缺陷必须是修复的;
-报告上面的内容尽量要真实可靠;
-整个测试报告要仔细审阅,力争不给项目带来负面作用,尤其是性能测试报告。
总之,外部测试报告要小心谨慎的编写。
34、测试工具在测试工作中是什么地位?
国内的很多测试工程师对测试工具相当迷恋,尤其是一些新手,甚至期望测试工具可以取代手工测试。测试工具在测试工作中起的是辅助作用,一般用来提高测试效率。自动化测试弥补了手工测试的不足,减轻一定的工作量。实际上测试工具是无法替代大多数手工测试的,而一些诸如性能测试等自动化测试也是手工所不能完成的。
对于自动测试技术,应当依据软件的不同情况来分别对待,一般自动技术会应用在引起大量重复性工作的地方、系统的压力点、以及任何适合使用程序解决大批量输入数据的地方。然后再寻找合适的自动测试工具,或者自己开发测试程序。一定不要为了使用测试工具而使用。
35、写出bug报告流转的步骤,每步的责任人及主要完成的工作。
(要结合自己实际的工作经验进行回答,不同公司略有区别)
测试人员提交新的Bug入库,错误状态为New。
高级测试员/测试经理验证错误,如果确认是错误,分配给开发组。设置状态为Open。如果不是错误,则拒绝,设置为Declined状态。
开发经理分配bug至对应的模块开发人员。
开发人员查询状态为Open的Bug,如果不是错误,则置状态为Declined;如果是Bug则修复并置状态为Fixed。不能解决的Bug,要留下文字说明及保持Bug为Open状态。
对于不能解决和延期解决的Bug,不能由开发人员自己决定,一般要通过某种会议(评审会)通过才能认可。
测试人员查询状态为Fixed的Bug,然后验证Bug是否已解决,如解决,置Bug的状态为Closed,如没有解决,置bug状态为Reopen。
36、写出bug报告当中一些必备的内容。
硬件平台和操作系统
测试应用的硬件平台(Platform),通常选择“PC”。
测试应用的操作系统平台(OS)。
- a) 版本, 提交缺陷报告时通过该字段标识此缺陷存在于被测试软件的哪个版本。
- b) Bug报告优先级
- c) Bug状态
- d) Bug的编号
- e) 发现人
- f) 提交人
- g) 指定处理人
- h) 概述
- i) 从属关系
- j) 详细描述
- k) 严重程度
- l) 所属模块
- m) 附件
- n) 提交日期
37、开发人员老是犯一些低级错误怎么解决?
这种现象在开发流程不规范的团队里特别常见,尤其是一些“作坊式”的团队里。解决这种问题一般从两个方面入手:
一方面从开发管理入手,也就是从根源来解决问题。可以制定规范的开发流程,甚至可以制定惩罚制度,还有就是软件开发前做好规划设计。
另一方面就是加强测试,具体做法就是加强开发人员的自己测试,把这些问题“消灭”在开发阶段,这是比较好的做法,读者可以参考第13章试案例分析的“13.1.2缺陷反复出现,谁的责任”小节,13.1.2专门讨论了这类问题的方法。
此外,还可以通过规范的缺陷管理来对开发人员进行控制,比如测试部门整理出常见的缺陷,让开发人员自己对照进行检查,以减少这类低级错误的发生。
开发人员犯错误是正常的现象,作为测试人员一定不能抱怨,要认认真真的解决问题才是上策。
38、画出软件测试的V模型图。
39、为什么要在一个团队中开展软件测试工作?
因为没有经过测试的软件很难在发布之前知道该软件的质量,就好比ISO质量认证一样,测试同样也需要质量的保证,这个时候就需要在团队中开展软件测试的工作。在测试的过程发现软件中存在的问题,及时让开发人员得知并修改问题,在即将发布时,从测试报告中得出软件的质量情况。
40、您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?
(根据项目经验不同,灵活回答即可)
我曾经做过web测试,后台测试,客户端软件,其中包括功能测试,性能测试,用户体验测试。最擅长的是功能测试
41、您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)
测试类型有:功能测试,性能测试,界面测试。
功能测试在测试工作中占的比例最大,功能测试也叫黑盒测试。是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。
界面测试,界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。
区别在于,功能测试关注产品的所有功能上,要考虑到每个细节功能,每个可能存在的功能问题。性能测试主要关注于产品整体的多用户并发下的稳定性和健壮性。界面测试更关注于用户体验上,用户使用该产品的时候是否易用,是否易懂,是否规范(快捷键之类的),是否美观(能否吸引用户的注意力),是否安全(尽量在前台避免用户无意输入无效的数据,当然考虑到体验性,不能太粗鲁的弹出警告)?做某个性能测试的时候,首先它可能是个功能点,首先要保证它的功能是没问题的,然后再考虑该功能点的性能测试
42、您认为做好测试用例设计工作的关键是什么?
白盒测试用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果
黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试,以最少的用例在合理的时间内发现最多的问题
43、测试计划工作的目的是什么?测试计划工作的内容都包括什么?其中哪些是最重要的?
软件测试计划是指导测试过程的纲领性文件,包含了产品概述、测试策略、测试方法、测试区域、测试配置、测试周期、测试资源、测试交流、风险分析等内容。借助软件测试计划,参与测试的项目成员,尤其是测试管理人员,可以明确测试任务和测试方法,保持测试实施过程的顺畅沟通,跟踪和控制测试进度,应对测试过程中的各种变更。
测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。所以其中最重要的是测试测试策略和测试方法(最好是能先评审)
44、您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
1.等价类划分
划分等价类: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类.
2.边界值分析法
边界值分析方法是对等价类划分方法的补充。测试工作经验告诉我,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.
使用边界值分析方法设计测试用例,首先应确定边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.
3.错误推测法
基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法.
错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例. 例如, 在单元测试时曾列出的许多在模块中常见的错误. 以前产品测试中曾经发现的错误等, 这些就是经验的总结. 还有, 输入数据和输出数据为0的情况. 输入表格为空格或输入表格只有一行. 这些都是容易发生错误的情况. 可选择这些情况下的例子作为测试用例.
4.因果图方法
前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系, 相互组合等. 考虑输入条件之间的相互组合,可能会产生一些新的情况. 但要检查输入条件的组合不是一件容易的事情, 即使把所有输入条件划分成等价类,他们之间的组合情况也相当多. 因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例. 这就需要利用因果图(逻辑模型). 因果图方法最终生成的就是判定表. 它适合于检查程序输入条件的各种组合情况.
45、请以您以往的实际工作为例,详细的描述一次测试用例设计的完整的过程。
首先:得到相关文档(需求文档和设计文档),理解需求和设计设计思想后,想好测试策略(测试计划简单点就OK了),考虑到测试环境,测试用例,测试时间等问题。
第二步:设计测试用例,测试策略是:把网站部分的功能点测试完,然后在进行系统测试(另外个模块呢有另一个测试人员负责,可以进行联调测试),网站模块的测试基本是功能测试和界面测试(用户并发的可能性很小,所以不考虑):这次的网站的输入数据呢是使用数据库中的某张表记录,如果表中某一数据记录中新加进来的(还没有被处理的,有个标志位),网站启动后会立刻去刷那张表,得到多条数据,然后在进行处理。处理过程中,会经历3个步骤,网站才算完成了它的任务。有3个步骤呢,就可以分别对 这3个步骤进行测试用例的设计,尽量覆盖到各种输入情况(包括数据库中的数据,用户的输入等),得出了差不多50个用例。界面测试,也就是用户看的到的地方,包括发送的邮件和用户填写资料的页面展示。
第三步:搭建测试环境(为什么这个时候考虑测试环境呢?因为我对网站环境已经很熟了,只有有机器能空于下来做该功能测试就可以做了),因为网站本身的环境搭建和其他的系统有点不同,它需要的测试环境比较麻烦,需要web服务器(Apache,tomcat),不过这次需求呢,网站部分只用到了tomcat,所以只要有tomcat即可
第四步:执行测试
46、您以往是否曾经从事过性能测试工作?如果有,请尽可能的详细描述您以往的性能测试工作的完整过程。
(以自己最熟悉的性能测试项目为例)
是的,曾经做过网站方面的性能测试,虽然做的时间并不久(2个月吧),当时呢,是有位网站性能测试经验非常丰富的前辈带着我一起做。
性能测试类型包括负载测试,强度测试,容量测试等
负载测试:负载测试是一种性能测试指数据在超负荷环境中运行,程序是否能够承担。
强度测试: 强度测试是一种性能测试,他在系统资源特别低的情况下软件系统运行情况
容量测试:确定系统可处理同时在线的最大用户数
在网站流量逐渐加大的情况下,开始考虑做性能测试了,首先要写好性能测试计划,根据运营数据得出流量最大的页面(如果是第一次的话,一般是首页,下载页,个人帐户页流量最大,而且以某种百分比),
Web服务器指标指标:
* Avg Rps: 平均每秒钟响应次数=总请求时间 / 秒数;
* Successful Rounds:成功的请求;
* Failed Rounds :失败的请求;
* Successful Hits :成功的点击次数;
* Failed Hits :失败的点击次数;
* Hits Per Second :每秒点击次数;
* Successful Hits Per Second :每秒成功的点击次数;
* Failed Hits Per Second :每秒失败的点击次数;
* Attempted Connections :尝试链接数;
47、你对测试最大的兴趣在哪里?为什么?
最大的兴趣就是测试有难度,有挑战性!做测试越久越能感觉到做好测试有多难。曾经在无忧测试网上看到一篇文章,是关于如何做好一名测试工程师。一共罗列了11,12点,有部分是和人的性格有关,有部分需要后天的努力。但除了性格有关的1,2点我没有把握,其他点我都很有信心做好它。
刚开始进入测试行业时,对测试的认识是从无忧测试网上了解到的一些资料,当时是冲着做测试需要很多技能才能做的好,虽然入门容易,但做好很难,比开发更难,虽然当时我很想做开发(学校专业课我基本上不缺席,因为我喜欢我的专业),但看到测试比开发更难更有挑战性,想做好测试的意志就更坚定了。
不到一年半的测试工作中,当时的感动和热情没有减退一点(即使环境问题以及自身经验,技术的不足,做测试的你一定也能理解)。
我觉得做测试整个过程中有2点让我觉得很有难度(对我来说,有难度的东西我就非常感兴趣),第一是测试用例的设计,因为测试的精华就在测试用例的设计上了,要在版本出来之前,把用例写好,用什么测试方法写?(也就是测试计划或测试策略),如果你刚测试一个新任务时,你得花一定的时间去消化业务需求和技术基础,业务需求很好理解(多和产品经理和开发人员沟通就能达到目的),而技术基础可就没那么简单了,这需要你自觉的学习能力,比如说网站吧,最基本的技术知识你要知道网站内部是怎么运作的的,后台是怎么响应用户请求的?测试环境如何搭建?这些都需要最早的学好。至少在开始测试之前能做好基本的准备,可能会遇到什么难题?需求细节是不是没有确定好?这些问题都能在设计用例的时候发现。
第二是发现BUG的时候了,这应该是测试人员最基本的任务了,一般按测试用例开始测试就能发现大部分的bug,还有一部分bug需要测试的过程中更了解所测版本的情况获得更多信息,补充测试用例,测试出bug。还有如何发现bug?这就需要在测试用例有效的情况下,通过细心和耐心去发现bug了,每个用例都有可能发现bug,每个地方都有可能出错,所以测试过程中思维要清晰(测试过程数据流及结果都得看仔细了,bug都在里面发现的)。如何描述bug也很有讲究,bug在什么情况下会产生,如果条件变化一点点,就不会有这个bug,以哪些最少的操作步骤就能重现这个bug,这个bug产生的规律是什么?如果你够厉害的话,可以帮开发人员初步定位问题。
48、你以前工作时的测试流程是什么?
(灵活回答)
公司对测试流程没有规定如何做,但每个测试人员都有自己的一套测试流程。我说下我1年来不断改正(自己总结,吸取同行的方法)后的流程吧。需求评审(有开发人员,产品经理,测试人员,项目经理)->需求确定(出一份确定的需求文档)->开发设计文档(开发人员在开始写代码前就能输出设计文档)->想好测试策略,写出测试用例->发给开发人员和测试经理看看(非正式的评审用例)->接到测试版本->执行测试用例(中间可能会补充用例)->提交bug(有些bug需要开发人员的确定(严重级别的,或突然发现的在测试用例范围之外的,难以重现的),有些可以直接录制进TD)->开发人员修改(可以在测试过程中快速的修改)->回归测试(可能又会发现新问题,再按流程开始跑)。
49、当开发人员说不是BUG时,你如何应付?
开发人员说不是bug,有2种情况,一是需求没有确定,所以我可以这么做,这个时候可以找来产品经理进行确认,需不需要改动,3方商量确定好后再看要不要改。二是这种情况不可能发生,所以不需要修改,这个时候,我可以先尽可能的说出是BUG的依据是什么?如果被用户发现或出了问题,会有什么不良结果?程序员可能会给你很多理由,你可以对他的解释进行反驳。如果还是不行,那我可以给这个问题提出来,跟开发经理和测试经理进行确认,如果要修改就改,如果不要修改就不改。其实有些真的不是bug,我也只是建议的方式写进TD中,如果开发人员不修改也没有大问题。如果确定是bug的话,一定要坚持自己的立场,让问题得到最后的确认。
50、结构化程序设计和面向对象程序设计各自的特点及优缺点是什么?
(不需要回答如此复杂)
结构化程序设计思想采用了模块分解与功能抽象和自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子程序,便于开发和维护。它的重点在于把功能进行分解。但是由于在实际开发过程当中需求会经常发生变化,因此,它不能很好的适应需求变化的开发过程。结构化程序设计是面向过程的。
面向对象程序设计以需求当中的数据作为中心,来进行设计,具有良好的代码重用性。
封装性:也叫数据隐藏,用户无需知道内部工作流程,只要知道接口和操作就可以的。
继承性: 一种支持重用的思想,在现有的类型派生出新的子类,例如新型电视机在原有型号的电视机上增加若干中功能而得到,新型电视机是原有电视机的派生,继承了原有电视机的属性,并增加了新的功能。
多态性:指在一般类中定义的属性或行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。
动态联编:指一个计算机程序自身彼此关联的过程,按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。
51、描述TCP/IP协议的层次结构,以及每一层中重要协议。
52、简述子网掩码的用途。
子网掩码主要用来判断两个IP地址是否处在同一个局域网当中;子网掩码是由连续的2进制1组成的。子网掩码和IP地址进行按位与运算后,结果一致,表示处于一个局域网当中,如果不一致,表示不再一个局域网当中,需要寻找路由。
53、说出4种以上常用的操作系统及其主要的应用范围(微软的操作系统除外)。
- Linux(Red Hat、SUSE、Debian、Trubo Linux):主要用于搭建各类服务器
- MAC OS:苹果机的操作系统,用于图像处理
- Unix(AIX:IBM服务器的专用操作系统;
- Solaris:Sun操作系统;FreeBSD、NetBSD)
54、在Linux系统中,一个文件的访问权限是755,其含义是什么?
755表示该文件所有者对该文件具有读、写、执行权限,该文件所有者所在组用户及其他用户对该文件具有读和执行权限。
55、Windows操作系统中PATH环境变量的作用是什么?
PATH是Windows操作系统环境变量,PATH作用是用户在命令行窗口执行一个命令,则在PATH变量设置的目录下依次寻找该命令或对应的执行文件,若找到,则执行,若没有找到,则命令行窗口返回无效命令。
56、在centos中,从root用户切到userl用户,一般用什么命令?
- su
- su user1 切换到user1,但切换后的当前目录还是root访问的目录
- su – user1 切换到user1,并且当前目录切换到user1的根目录下(/home/user1/)
57、Linux中,一般怎么隐藏文件?
文件名以一个.开头
58、DNS是什么,它是如何工作的?
- 域名解析服务。用于将域名解析为IP,或反和将IP解析为域名。
- 客户机可指定DNS服务器来解析,或用本机hosts文件进行解析。
59、简述一下c/s模式或者b/s模式?
- C/S模式:客户端/服务器模式。工作原理:Client向Server提交一个请求;Server则使用一些方法处理这个请求,并将效果返回给Client。
- B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现,形成所谓3-tier结构。B/S结构,主要是利用了不断成熟的WWW浏览器技术,结合浏览器的多种Script语言(VBScript、JavaScript…)和ActiveX技术,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。60、TCP/UDP有哪些区别?
- TCP-有连接,所以握手过程会消耗资源,过程为可靠连接,不会丢失数据,适合大数据量交换
- UDP-非可靠连接,会丢包,没有校验,速度快,无须握手过程
60、TCP/UDP有哪些区别?
- TCP-有连接,所以握手过程会消耗资源,过程为可靠连接,不会丢失数据,适合大数据量交换
- UDP-非可靠连接,会丢包,没有校验,速度快,无须握手过程
61、软件测试的流程是什么?
分析:每当HR问一个问题的时候我们都可以用1~2s的时间去想HR想要从这个问题中获取什么信息,这点搞清楚之后再去回答就很好回答了。如果有工作经验,直接按照公司流程回答即可,如果是刚转行或者刚实习,那按标准回答即可,文中回答仅供参考;
回答: 项目经理或者PD把项目需求文档提前下发给相关的研发人员,研发人员抽出一定的时间记录文档内需求不明确或者遗漏的点为后面的评审做准备;在需求评审会议上,各研发人员提出自己的疑问并解决,需求评审最终通过之后会出一份最终的需求规格说明书;(需求评审阶段)
需求规格说明书评审通过后,开发经理开始编写开发计划,测试经理开始编写测试计划,计划评审通过后开发人员开始进行程序的开发,测试人员开始测试用例的编写,等程序的第一个版本出来后,开发人员进行第二个版本的迭代,这时测试人员对程序进行测试并记录追踪管理缺陷,直到程序迭代完毕。(产品研发阶段)
程序迭代完毕并修复大部分缺陷后,测试人员开始进行工作的总结,并最终输出一份测试报告书,记录此次的测试工作共,程序存在的相关问题。(产品发布阶段)
62、测试用例主要有哪些元素?
分析:每个公司因为使用的模板不一样,所以测试用例的内容也是不尽相同的,所以回答时只需要回答出基本的元素即可;
回答: 测试用例主要元素有:ID、标题、模块、预置条件、操作步骤、预期结果、实际结果、是否通过、BugID等;
63、软件测试有什么策略和阶段?
分析:软件测试的策略就是测试将按照什么样的思路和方式进行如采用什么技术,什么步骤等。
回答 :软件测试的策略主要有:动态测试和静态测试、白盒测试和黑盒测试。测试阶段按照研发顺序分别是:单元测试、集成测试、系统测试,有些公司还会有验收测试;(单元测试开发在调试代码时就完成,集成测试也是,但是有时测试人员也需要进行集成测试;测试人员平时主要的工作就是系统测试,验收测试是有客户参与进行的测试);
64、黑盒测试和白盒测试是什么?二者有什么区别?
分析:黑盒测试和白盒测试的概念百度百科上面都有,这里不再做太多介绍。黑盒测试和白盒测试的区别:
回答: 黑盒测试主要是在程序界面进行测试,通过设定某种场景检验程序在这种场景下是否给出了正确的反应,验证程序正确实现了需求规格说明书中的需求,而白盒测试主要是针对程序内部结构,对程序代码进行代码走查等,但是白盒测试的成本会比较大,当程序有多个路径时,可能会产生较多的遗漏;
65、软件测试有什么类型?
回答: 常见的软件测试类型有:功能测试、性能测试、兼容性测试、可靠性测试、安全性测试、压力测试、负载测试等;
66、测试用例是什么?有什么作用?
回答:测试用例就是设计一个特定场景,让软件在这种场景下运行,检验程序是否给出正确的反应,以此验证软件是否正确实现了客户需求。
作用:1、避免盲目测试并提高测试效率;在软件版本更新之后只需修正少部分用例即可开展测试工作,降低工作强度,缩短测试周期;
2、可以分清哪些是测试重点,测试用例是测试工作的见证,能知道测试了哪些功能,没测哪些模块;
3、测试用例是量化测试工作的方法之一;
67、你平时是怎么设计测试用例的?
分析:这个问题的点主要考察是否掌握测试用例设计方法,在回答之后,HR可能会继续追问某种设计方法的概念或者实例,这时举例说明即可;如:等价类划分法就是把程序的输入域划分成等价类,从每个部分中选取少数代表性数据当做测试数据。
回答:设计测试用例一般都会使用到等价类、边界值、场景/流程法、因果图还有错误推测法;
68、软件缺陷的定义是什么?
分析:什么样的问题才是一个缺陷,需要从客户需求出发;
回答:1、软件未实现需求规格说明书中的要求;
2、出现需求规格说明书中指明不应该出现的错误;
3、软件未实现需求文档中虽未明确提及但应该实现的功能;(如:账密加密)
4、软件出现难以理解、不易使用或者运行速度慢等问题都可以认为是软件缺陷;
69、缺陷中应该包含什么元素?严重等级一般有哪些?
分析:这个问题和上面测试用例一样,每个公司的要求可能都会不一样;
回答:主要元素有:标题、BugID、复现步骤、实际结果、预期结果、截图、日志等;软件缺陷等级一般有四种,致命(程序奔溃)、严重(金额计算错误、数据出错)、一般(不影响使用但是会造成一定的麻烦)、优化(字体字号不统一)
70、给你一个杯子,你会怎么测试?
分析:给你一个杯子,给你一个电梯,这种问题在前期的面试中是经常遇到也是非常经典的一道面试题,这里给出一个链接,回答时从外观、功能、性能等各个角度说起,再结合自己的一些话就可以了。
回答:
一个水杯的测试 满有意思,如果你愿意,可以发挥一下你的想象先,然后再看看别人例子,你会更加有收获噢!
测试是一种思想,一种思路,当你脑子里面这个思路思想很清晰的时候 我们测试人员什么东东不会测试?
HOHO!! 比较有意思的答案如下两种:
一种: 测试项目:杯子
需求测试:查看杯子使用说明书
界面测试:查看杯子外观
功能度:用水杯装水看漏不漏;水能不能被喝到
安全性:杯子有没有毒或细菌
可*性:杯子从不同高度落下的损坏程度
可移植性:杯子再不同的地方、温度等环境下是否都可以正常使用
兼容性:杯子是否能够容纳果汁、白水、酒精、汽油等
易用性:杯子是否烫手、是否有防滑措施、是否方便饮用
用户文档:使用手册是否对杯子的用法、限制、使用条件等有详细描述
疲劳测试:将杯子盛上水(案例一)放24小时检查泄漏时间和情况
;盛上汽油(案例二)放24小时检查泄漏时间和情况等
压力测试:用根针并在针上面不断加重量,看压强多大时会穿透
跌落测试: 杯子加包装(有填充物),在多高的情况摔下不破损
震动测试: 杯子加包装(有填充物),六面震动,检查产品是否能应对恶劣的铁路/公路/航空运输
测试数据:测试数据具体编写此处略(最讨厌写测试数据了)。其中应用到:场景法、等价类划分法、因果图法、错误推测法、边界值法等方法 期望输出: 该期望输出需查阅国标、行标以及使用用户的需求
另一种: 总体来说从以下几个方面去考虑 功能性、性能性、易用性、可操作性、稳定性方面进行测试
功能性方面的测试,主要是考虑这个水杯是否能盛水,能盛多少水,能否盛热水,盛热水又能盛多少
性能性方面,盛冷水和热水时分别盛多少水杯能够承受 易用性方面,水杯易用手拿或端着
可操作性,也可以说和易用性相似,当盛冰水时感觉不到很冻,热水时感觉不到很烫,或者也可以归于功能测试 稳定性测试,水杯一直盛着水,是否长时间之后会漏水 测试驱动开发--
- 水杯类:父类(杯子) 属性,如材料、形状、容量等 方法,如盛水等 水杯可以装泥土当花盆用,要提供花盆的接口 水杯的子类:如一次性杯子等等 重写或添加属性、方法 容错:所装物体判断(物体的类别、物体的属性) 执行方法的前提判断(某些属性已经复值,有托盘则执行端的方法,有把手则执行拿的方法;或根据温度) 操作时注意,某个静态字段是否超出数值范围 试杯子 测试项目:杯子 需求测试:查看杯子使用说明书 界面测试:查看杯子外观 功能度:用水杯装水看漏不漏;水能不能被喝到 安全性:杯子有没有毒或细菌 可*性:杯子从不同高度落下的损坏程度 可移植性:杯子再不同的地方、温度等环境下是否都可以正常使用
兼容性:杯子是否能够容纳果汁、白水、酒精、汽油等 易用性:杯子是否烫手、是否有防滑措施、是否方便饮用 用户文档:使用手册是否对杯子的用法、限制、使用条件等有详细描述 疲劳测试:将杯子盛上水(案例一)放24小时检查泄漏时间和情况;盛上汽油(案例二)放24小时检查泄漏时间和情况等 压力测试:用根针并在针上面不断加重量,看压强多大时会穿透 跌落测试: 杯子加包装(有填充物),在多高的情况摔下不破损 震动测试: 杯子加包装(有填充物),六面震动,检查产品是否能应对恶劣的铁路/公路/航空运输 测试数据:测试数据具体编写此处略(最讨厌写测试数据了)。其中应用到:场景法、等价类划分法、因果图法、错误推测法、边界值法等方法 期望输出: 该期望输出需查阅国标、行标以及使用用户的需求 一、GUI测试: 1 看其形状、大小设计是否适合人方便拿起; 2 外观是否吸引人(广告嘛),赏心悦目; 3 带广告的图案沾水后是否掉色、模糊。 二、功能、压力测试: A 考量其装载能力: 在杯子内分别装入少量的、半杯的、满杯的: 1 热水; 2 冷水; 3 冰水; 4 咖啡; 看其装载量和装载时间以及纸杯拿在手中的硬度是否达到设计标准 B 装入热水后,纸杯是否有异味。 三、24*7测试: 装入液体后记录其多久以后漏水。
71、测试报告里面包含什么内容?
分析:测试报告,是测试工作结束后测试部门输出的一份测试结果,但每个公司的测试报告内容都会有些差别。有些公司的测试报告是有测试部门的负责人一人编写,或者是由每个测试工程师输出自己对应模块的测试报告再由测试组长整合成一份完整的测试报告;
回答:测试报告内容一般有:编写目的、系统简介、测试环境、测试方法和工具、测试执行结果与记录、缺陷汇总、遗留缺陷跟踪、测试用例执行情况、测试结论与建议等;
72、如果在测试过程中发现了BUG,可是开发不承认这是Bug,你会怎么办?
分析:HR问这个问题主要还是想知道你平时是如何处理与同事之间的关系。开发和测试是两个即对立又统一的两个岗位,所以开发和测试之间关系的处理也是HR面试过程中需要考虑的一个点。当然,HR问这个问题也表名该公司有氛围不是很好的风险。
回答:首先还是应该回归到客户需求上面,确认这个问题到底属不属于一个缺陷,如果确实是则要和开发同事解释清楚;如果开发还是坚持自己想法的话,则询问同事或者测试组长的意见,讨论这个问题到底属不属于缺陷问题,如果大家都觉得是则需要和开发解释清楚。
73、你们公司的需求评审是怎么进行的?
分析:需求评审,就是对客户需求,软件各个模块之间模糊的点进行审查,排除不理解或者没有考虑到的点。
回答:需求评审,在一些分工比较明确的公司,都是由PD(产品设计师)负责,需求确认好后再下发到开发和测试部门;分工不怎么明确的公司可能就是开发测试产品等大家坐在一起共同探讨;评审形式一般分为线上和线下两种方式,负责人一般会提前把需求文档下发到大家手上供大家整理各自的疑惑点,为后续的评审会议做准备。
74、MySQL的常用命令有哪些?
分析:数据库知识,是测试工程师必备的一个基本技能,在面试过程中也是经常会遇到的一个考点。对于刚入行的测试,对数据库知识的要求不会太高,只要求能掌握基本的增删改查语句即可。关于数据库的知识,在后续的时间里,也会慢慢的整理出来,供大家学习、参考。
回答:这里只给出几个标准的语法结构:
增:insert into 表名(列名) values (数据);
如:在stu表中插入id为001,姓名为张三的学生,(insert into Stu(stu_id,stu_name) values (001,‘张三’);)
删:delete from 表名 where 指定数据;
如:在stu表中删除id为001,姓名为张三的学生:(detele from Stu where stu_id=‘001’ and stu_name = ‘张三’;)
改:update 表名 set 改变项 where 指定数据;
如:在stu表中修改id为001的学生姓名为“张三”:(update Stu set stu_name = ‘张三’ where stu_id=‘001’ ;)
查:select (查询项) from 表名 where 指定条件;
如:在stu表中查询id为001,姓名为“张三”的学生信息:(select * from Stu where stu_name = ‘张三’ and stu_id=‘001’ ;)
75、Linux下的一些常用命令是什么?
分析:Linux系统,也是软件测试工程师必须要掌握的一项基本的技能,由于Linux具有运行稳定等很多优点,软件的服务器大多部署在Linux系统上,搭建测试环境也是测试工程师需要掌握的。关于Linux的知识,在后续的时间里,也会慢慢的整理出来,供大家学习、参考。由于Linux下很多命令都是常用的,所以这里不给出答案。
76、你未来的职业规划是什么?
分析:职业规划问题,是所有面试中最常问的问题,问的人可能是HR、部门主管、经理、甚至是董事长。同一个问题,问的人不同,想要获取的信息也肯定是不一样的。HR更多的想看你在公司的稳定性;技术主管可能更想知道你是否真的喜欢测试这个岗位,后期是否会主动学习型新的技能等;而经理更多的是看你的职业规划符不符合公司的发展方向;软件测试工程师的发展方向主要有:测试开发、产品经理、测试转开发、测试大牛、讲师等岗位;
回答:HR:如果是HR问的话,多从稳定性的角度回答,如:家人、朋友都在公司附近,或者喜欢贵公司的文化氛围等;
技术:回答之前可以先简单介绍一下自己为什么选择软件测试这个职业,以及自己对这个职业的看法,最后再回答自己的职业发展方向即可;
经理or董事长:这个回答回答起来的话还是比较难把握的,因为在面试时,面试者往往对公司的发展方向不是非常了解,所以在回答时可以再带一句,“具体的发展方向,还需要公司的发展方向去调整”。这样回答就会保险一些。
77、还有什么想要问我的吗?
分析:这个问题在每个面试的尾声都会被问到,直接说没有,会让HR觉得你不关心这个岗位,问的多了又会显得面试之前没有做好充分的准备。所以问题一般控制在两到三个比较好。
回答:1、公司的研发团队目前是什么规模?开发、测试分别有多少人?
2、公司的业务方向是什么?
3、如果我入职之后,我的工作职责是什么?
78、为什么想要离职?
分析:这个问题主要是想要了解你的近况,以及上一家公司是什么原因导致你离职,。在大部分情况下,HR都会理解你,但是在回答问题时千万不能太过于实诚,有些面试者一上来就在抱怨上一家公司如何压榨公司员工等,没有一家公司愿意接受这样的面试者,HR并不能完全感受你所遭遇到的,所以还是请控制好自己的负面情绪
79、你的测试职业发展是什么?
测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求自己,不断更新自己改正自己,做好测试任务。
优势在于我对测试坚定不移的信心和热情,虽然经验还不够,但测试需要的基本技能我有信心在工作中得以发挥。
80、你认为测试人员需要具备哪些素质
做测试应该要有一定的协调能力,因为测试人员经常要与开发接触处理一些问题,如果处理不好的话会引起一些冲突,这样的话工作上就会不好做。还有测试人员要有一定的耐心,有的时候做测试很枯燥乏味。除了耐心,测试人员不能放过每一个可能的错误。
81、你为什么能够做测试这一行
虽然我的测试技术还不是很成熟,但是我觉得我还是可以胜任软件测试这个工作的,因为做软件测试不仅是要求技术好,还有有一定的沟通能力,耐心、细心等外在因素。综合起来看我认为我是胜任这个工作的。
82、测试的目的是什么?
测试的目的是找出软件产品中的错误,是软件尽可能的符合用户的要求。当然软件测试是不可能找出全部错误的。
83、测试分为哪几个阶段?
一般来说分为5个阶段:单元测试、集成测试、确认测试、系统测试、验收测试
84、单元测试的测试对象、目的、测试依据、测试方法?
测试对象是模块内部的程序错误,目的是消除局部模块逻辑和功能上的错误和缺陷。测试依据是模块的详细设计,测试方法是采用白盒测试。
85、怎样看待加班问题
加班的话我没有太多意见,但是我还是觉得如果能够合理安排时间的话,不会有太多时候加班的。
86、结合你以前的学习和工作经验,你认为如何做好测试。
根据我以前的工作和学习经验,我认为做好工作首先要有一个良好的沟通,只有沟通无障碍了,才会有好的协作,才会有更好的效率,再一个就是技术一定要过关,做测试要有足够的耐心,和一个良好的工作习惯,不懂的就要问,实时与同事沟通这样的话才能做好测试工作。
87、你为什么选择软件测试行业
因为之前了解软件测试这个行业,觉得他的发展前景很好。
88、根据你以前的工作或学习经验描述一下软件开发、测试过程,由哪些角色负责,你做什么
要有架构师、开发经理、测试经理、程序员、测试员。我在里面主要是负责所分到的模块执行测试用例。
89、根据你的经验说说你对软件测试/质量保证的理解
软件质量保证与测试是根据软件开发阶段的规格说明和程序的内部结构而精心设计的一批测试用例(即输入数据和预期的输出结果),并根据这些测试用例去运行程序,以发现错误的过程。它是对应用程序的各个方面进行测试以检查其功能、语言有效性及其外观排布。
90、软件测试的流程是什么?
需求调查:全面了解系统概况、应用领域、软件开发周期、软件开发环境、开发组织、时间安排、功能需求、性能需求、质量需求及测试要求等。根据系统概况进行项目所需的人员、时间和工作量估计以及项目报价。
制定初步的项目计划。
测试准备:组织测试团队、培训、建立测试和管理环境等。
测试设计:按照测试要求进行每个测试项的测试设计,包括测试用例的设计和测试脚本的开发等。
测试实施:按照测试计划实施测试。
测试评估:根据测试的结果,出具测试评估报告。
91、你对SQA的职责和工作活动(如软件度量)的理解?
SQA就是独立于软件开发的项目组,通过对软件开发过程的监控,来保证软件的开发流程按照指定的CMM规程(如果有相应的CMM规程),对于不符合项及时提出建议和改进方案,必要时可以向高层经理汇报以求问题的解决。通过这样的途径来预防缺陷的引入,从而减少后期软件的维护成本。SQA主要的工作活动包括制定SQA工作计划,参与阶段产物的评审,进行过程质量、功能配置及物理配置的审计等;对项目开发过程中产生的数据进行度量等等。
92、说说你对软件配置管理的理解
项目在开发过程中要用相应的配置管理工具对配置项(包括各个阶段的产物)进行变更控制,配置管理的使用取决于项目规模和复杂性及风险的水平。软件的规模越大,配置管理就越显得重要。还有在配置管理中,有一个很重要的概念,那就是基线,是在一定阶段各个配置项的组合,一个基线就提供了一个正式的标准,随后的工作便基于此标准,并只有经过授权后才能变更这个标准。配置管理工具主要有CC,VSS,CVS,SVN等。
93、怎样写测试计划和测试用例
简单点,测试计划里应有详细的测试策略和测试方法,合理详尽的资源安排等,至于测试用例,那是依赖于需求(包括功能与非功能需求)是否细化到功能点,是否可测试等。
94、什么是兼容性测试?兼容性测试侧重哪些方面?
兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行,即是通常说的软件的可移植性。
兼容的类型,如果细分的话,有平台的兼容,网络兼容,数据库兼容,以及数据格式的兼容。
兼容测试的重点是,对兼容环境的分析。通常,是在运行软件的环境不是很确定的情况下,才需要做兼容。根据软件运行的需要,或者根据需求文档,一般都能够得出用户会在什么环境下使用该软件,把这些环境整理成表单,就得出做兼容测试的兼容环境了。
兼容和配置测试的区别在于,做配置测试通常不是Clean OS下做测试,而兼容测试多是在Clean OS的环境下做的。
95、我现在有个程序,发现在Windows上运行得很慢,怎么判别是程序存在问题还是软硬件系统存在问题?
①检查系统是否有中毒的特征;
②检查软件/硬件的配置是否符合软件的推荐标准;
③确认当前的系统是否是独立,即没有对外提供什么消耗CPU资源的服务;
④如果是C/S或者B/S结构的软件,需要检查是不是因为与服务器的连接有问题,或者访问有问题造成的;
⑤在系统没有任何负载的情况下,查看性能监视器,确认应用程序对CPU/内存的访问情况。
96、测试的策略有哪些?
黑盒/白盒,静态/动态## 标题,手工/自动,冒烟测试,回归测试,公测(Beta测试的策略)
97、你觉得bugzilla在使用的过程中,有什么问题?
①界面不稳定;
②根据需要配置它的不同的部分,过程很烦琐。
③流程控制上,安全性不好界定,很容易对他人的Bug进行误操作;
④没有综合的评分指标,不好确认修复的优先级别。
98、描述测试用例设计的完整过程?
①需求分析 + 需求变更的维护工作;
②根据需求得出测试需求;
③设计测试方案,评审测试方案;
④方案评审通过后,设计测试用例,再对测试用例进行评审;
99、单元测试的策略有哪些?
逻辑覆盖、循环覆盖、同行评审、桌前检查、代码走查、代码评审、景泰数据流分析
100、LoadRunner分哪三部分?
用户动作设计;场景设计; 测试数据分析;
101、LoadRunner进行测试的流程?
①熟悉业务流程,测试规划
②创建虚拟用户脚本
③创建运行场景
④运行测试脚本
⑤监视场景
⑥分析测试的结果
以上,最好是结合一个案例,根据以上流程来介绍。
102、软件的评审一般由哪些人参加?其目的是什么?
在正式的会议上将软件项目的成果(包括各阶段的文档、产生的代码等)提交给用户、客户或有关部门人员对软件产品进行评审和批准。其目的是找出可能影响软件产品质量、开发过程、维护工作的适用性和环境方面的设计缺陷,并采取补救措施,以及找出在性能、安全性和经济方面的可能的改进。
人员:用户、客户或有关部门开发人员,测试人员,需求分析师都可以,就看处于评审那个阶段
103、Beta测试与Alpha测试有什么区别?
①Beta testing(β测试),测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场
②Alpha testing (α测试),是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试
104、你认为做好测试计划工作的关键是什么?
软件测试计划就是在软件测试工作正式实施之前明确测试的对象,并且通过对资源、时间、风险、测试范围和预算等方面的综合分析和规划,保证有效的实施软件测试;
做好测试计划工作的关键 :目的,管理,规范
①明确测试的目标,增强测试计划的实用性编写软件测试计划得重要目的就是使测试过程能够发现更多的软件缺陷,因此软件测试计划的价值取决于它对帮助管理测试项目,并且找出软件潜在的缺陷。因此,软件测试计划中的测试范围必须高度覆盖功能需求,测试方法必须切实可行,测试工具并且具有较高的实用性,便于使用,生成的测试结果直观、准确
②坚持“5W”规则,明确内容与过程“5W”规则指的是“What(做什么)”、“Why(为什么做)”、“When(何时做)”、“Where(在哪里)”、“How(如何做)”。利用“5W”规则创建软件测试计划,可以帮助测试团队理解测试的目的(Why),明确测试的范围和内容(What),确定测试的开始和结束日期(When),指出测试的方法和工具(How),给出测试文档和软件的存放位置(Where)。
③采用评审和更新机制,保证测试计划满足实际需求测试计划写作完成后,如果没有经过评审,直接发送给测试团队,测试计划内容的可能不准确或遗漏测试内容,或者软件需求变更引起测试范围的增减,而测试计划的内容没有及时更新,误导测试执行人员。
④分别创建测试计划与测试详细规格、测试用例应把详细的测试技术指标包含到独立创建的测试详细规格文档,把用于指导测试小组执行测试过程的测试用例放到独立创建的测试用例文档或测试用例管理数据库中。测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。
105、你认为做好测试用例工作的关键是什么?
需求和设计文档的理解程度,对系统的熟悉程度
106、简述一下缺陷的生命周期?
提交->确认->分配->修复->验证->关闭
107、软件的安全性应从哪几个方面去测试?
(1) 用户认证机制:如数据证书、智能卡、双重认证、安全电子交易协议
(2) 加密机制
(3) 安全防护策略:如安全日志、入侵检测、隔离防护、漏洞扫描
(4) 数据备份与恢复手段:存储设备、存储优化、存储保护、存储管理
(5) 防病毒系统
108、你觉得软件测试通过的标准应该是什么样的?
缺陷密度值达到客户的要求
109、一套完整的测试应该由哪些阶段组成?
需求评审(有开发人员,产品经理,测试人员,项目经理)->需求确定(出一份确定的需求文档)->开发设计文档(开发人员在开始写代码前就能输出设计文档)->想好测试策略,写出测试用例->发给开发人员和测试经理看看(非正式的评审用例)->接到测试版本->执行测试用例(中间可能会补充用例)->提交bug(有些bug需要开发人员的确定(严重级别的,或突然发现的在测试用例范围之外的,难以重现的),有些可以直接录制进TD)->开发人员修改(可以在测试过程中快速的修改)->回归测试(可能又会发现新问题,再按流程开始跑)
110、如何理解压力、负载、性能测试测试?
性能测试是一个较大的范围,实际上性能测试本身包含了性能、强度、压力、负载等多方面的测试内容。
压力测试是对服务器的稳定性以及负载能力等方面的测试,是一种很平常的测试。增大访问系统的用户数量、或者几个用户进行大数据量操作都是压力测试。而负载测试是压力相对较大的测试,主要是测试系统在一种或者集中极限条件下的相应能力,是性能测试的重要部分。
100个用户对系统进行连续半个小时的访问可以看作压力测试,那么连续访问8个小时就可以认为负载测试,1000个用户连续访问系统1个小时也可以看作是负载测试。
实际上压力测试和负载测试没有明显的区分。测试人员应该站在关注整体性能的高度上来对系统进行测试。
111、如何编写提交给用户的测试报告?
①根据内部测试报告进行编写,一般可以摘录;
②不可以向客户报告严重缺陷,即使是已经修改的缺陷,开发中的缺陷也没有必要让客户知道;
③报告上可以列出一些缺陷,但必须是中级的缺陷,而且这些缺陷必须是修复的;-报告上面的内容尽量要真实可靠;
④整个测试报告要仔细审阅,力争不给项目带来负面作用,尤其是性能测试报告。
112、您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
①等价类划分
划分等价类: 等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试。因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果。等价类划分可有两种不同的情况:有效等价类和无效等价类。
②边界值分析法
边界值分析方法是对等价类划分方法的补充。测试工作经验告诉我,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误。
使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。
③错误推测法
基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法.
错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。例如, 在单元测试时曾列出的许多在模块中常见的错误。以前产品测试中曾经发现的错误等, 这些就是经验的总结。还有, 输入数据和输出数据为0的情况。输入表格为空格或输入表格只有一行。这些都是容易发生错误的情况. 可选择这些情况下的例子作为测试用例。
④因果图方法
前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系, 相互组合等。考虑输入条件之间的相互组合,可能会产生一些新的情况。但要检查输入条件的组合不是一件容易的事情, 即使把所有输入条件划分成等价类,他们之间的组合情况也相当多。因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例。 这就需要利用因果图(逻辑模型)。因果图方法最终生成的就是判定表。它适合于检查程序输入条件的各种组合情况。
113、你对测试最大的兴趣在哪里?为什么?
最大的兴趣就是测试有难度,有挑战性!做测试越久越能感觉到做好测试有多难。做测试,有部分是和人的性格有关,有部分需要后天的努力。但除了性格有关的我没有把握,其他点我都很有信心做好它。
114、当开发人员说不是BUG时,你如何应付?
开发人员说不是bug,有2种情况,一是需求没有确定,所以我可以这么做,这个时候可以找来产品经理进行确认,需不需要改动,3方商量确定好后再看要不要改。二是这种情况不可能发生,所以不需要修改,这个时候,我可以先尽可能的说出是BUG的依据是什么?如果还是不行,那我可以给这个问题提出来,跟开发经理和测试经理进行确认,如果要修改就改,如果不要修改就不改。其实有些真的不是bug,我也只是建议的方式写进TD中,如果开发人员不修改也没有大问题。如果确定是bug的话,一定要坚持自己的立场,让问题得到最后的确认。
115、写出bug报告当中一些必备的内容。
硬件平台和操作系统
测试应用的硬件平台(Platform),通常选择“PC”。
测试应用的操作系统平台(OS)。
a) 版本 提交缺陷报告时通过该字段标识此缺陷存在于被测试软件的哪个版本。
b) Bug报告优先级
c) Bug状态
d) Bug的编号
e) 发现人
f) 提交人
g)指定处理人
h) 概述
i) 从属关系
j) 详细描述
k) 严重程度
l) 所属模块
m) 附件
n) 提交日期
116、开发人员老是犯一些低级错误怎么解决?
从两个方面入手:
一方面从开发管理入手,也就是从根源来解决问题。可以制定规范的开发流程,甚至可以制定惩罚制度,还有就是软件开发前做好规划设计。
另一方面就是加强测试,具体做法就是加强开发人员的自己测试,把这些问题“消灭”在开发阶段,这是比较好的做法。
117、简述一下c/s模式或者b/s模式?
C/S模式:客户端/服务器模式。工作原理:Client向Server提交一个请求;Server则使用一些方法处理这个请求,并将效果返回给Client。
B/S结构,即Browser/Server(浏览器/服务器)结构,主要是利用了不断成熟的WWW浏览器技术,结合浏览器的多种Script语言(VBScript、JavaScript…)和ActiveX技术,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。
118.给你一个字符串,你怎么判断是不是ip地址?手写这段代码,并写出测试用例
参考回答:
P的格式:(1~ 255).(0~ 255).(0~ 255).(0~255) 方法一:基于对字符串的处理 ```cpp public static void main(String[] args){ Scanner scanner = new Scanner(http://System.in); String ipStr = scanner.next(); boolean isIpLegal = isIpLegal(ipStr); if(isIpLegal) { System.out.println(ipStr + " 合法"); } else{ System.out.println(ipStr + " 非法"); } } public static boolean isIpLegal(String str){ //检查ip是否为空 if(str == null){ return false; } //检查ip长度,最短为:x.x.x.x(7位),最长为:http://xxx.xxx.xxx.xxx(15位) if(str.length() < 7 || str.length() > 15){ return false; } //对输入字符串的首末字符判断,如果是"."则是非法IP if(str.charAt(0) == '.' || str.charAt(str.length()-1) == '.'){ return false; } //按"."分割字符串,并判断分割出来的个数,如果不是4个,则是非法IP String[] arr = str.split("\."); if(arr.length != 4){ return false; } //对分割出来的每个字符串进行单独判断 for(int i = 0; i < arr.length; i++){ //如果每个字符串不是一位字符,且以'0'开头,则是非法的IP,如:01.002.03.004 if(arr[i].length() > 1 && arr[i].charAt(0) == '0'){ return false; } //对每个字符串的每个字符进行逐一判断,如果不是数字0-9,则是非法的IP for(int j = 0; j < arr[i].length(); j++){ if (arr[i].charAt(j) < '0' || arr[i].charAt(j) > '9'){ return false; } } } //对拆分的每一个字符串进行转换成数字,并判断是否在0~255 for(int i = 0; i < arr.length; i++){ int temp = Integer.parseInt(arr[i]); if(i == 0){ if (temp < 1 || temp > 255){ return false; } } else{ if(temp < 0 || temp > 255){ return false; } } } return true; }
方法二:正则表达式
public static void main(String[] args) { Scanner scanner = new Scanner(http://System.in); String ipStr = scanner.next(); boolean isIpLegal = isIpLegal(ipStr); if(isIpLegal) { System.out.println(ipStr + " 合法"); } else{ System.out.println(ipStr + " 非法"); } } public static boolean isIpLegal(String ipStr) { String ipRegEx = "^([1-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))(\.([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))){3}$"; Pattern pattern = Pattern.compile(ipRegEx); Matcher matcher = pattern.matcher(ipStr); if (matcher.matches()) { return true; } else { return false; } }
等价类划分:
119.请进行测试用例设计:一串数字,闰年的判别
参考回答:
判断闰年的标准是:能整除4且不能整除100,能整除400。
设定合法的年份为1-9999
public class Test2 { public static void main(String[] args) { Scanner in = new Scanner (http://System.in); int year=in.nextInt(); if(year<=0||year>9999) { System.out.println("请输入正确的年份"); } if((year%4==0&&year%100!=0)||year%400==0) { System.out.println("闰年"); }else { System.out.println("不是闰年"); } } }
测试用例:
120.请你说一说简单用户界面登陆过程都需要做哪些分析
参考回答:
- 功能测试
输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。
输入错误的用户名或者密码,验证登录会失败,并且提示相应的错误信息。
登录成功后能否能否跳转到正确的页面
用户名和密码,如果太短或者太长,应该怎么处理
用户名和密码,中有特殊字符(比如空格),和其他非英文的情况
记住用户名的功能
登陆失败后,不能记录密码的功能
用户名和密码前后有空格的处理
密码是否非明文显示显示,使用星号圆点等符号代替。
牵扯到验证码的,还要考虑文字是否扭曲过度导致辨认难度大,考虑颜色(色盲使 用者),刷新或换一个按钮是否好用
登录页面中的注册、忘记密码,登出用另一帐号登陆等链接是否正确
输入密码的时候,大写键盘开启的时候要有提示信息。
什么都不输入,点击提交按钮,检查提示信息。
- 界面测试
布局是否合理,testbox和按钮是否整齐。
testbox和按钮的长度,高度是否符合要求。
界面的设计风格是否与UI的设计风格统一。
界面中的文字简洁易懂,没有错别字。
- 性能测试
打开登录页面,需要的时间是否在需求要求的时间内。
输入正确的用户名和密码后,检查登录成功跳转到新页面的时间是否在需求要求的时间内。
模拟大量用户同时登陆,检查一定压力下能否正常登陆跳转。
- 安全性测试
登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)。
用户名和密码是否通过加密的方式,发送给Web服务器。
用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript 验证。
用户名和密码的输入框,应该屏蔽SQL注入攻击。
用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)。
防止暴力破解,检测是否有错误登陆的次数限制。
是否支持多用户在同一机器上登录。
同一用户能否在多台机器上登录。
- 可用性测试
是否可以全用键盘操作,是否有快捷键。
输入用户名,密码后按回车,是否可以登陆。
输入框能否可以以Tab键切换。
- 兼容性测试
不同浏览器下能否显示正常且功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等)。
同种浏览器不同版本下能否显示正常且功能正常。
不同的平台是否能正常工作,比如Windows, Mac。
移动设备上是否正常工作,比如Iphone, Andriod。
不同的分辨率下显示是否正常。
- 本地化测试
不同语言环境下,页面的显示是否正确。
121.请对这个系统做出测试用例:一个系统,多个摄像头,抓拍车牌,识别车牌,上传网上,网上展示
参考回答:
1.功能:
- 每个摄像头都能抓拍车牌;
- 每个摄像头抓拍到的车牌能正常交给系统处理;
- 系统能够正确识别车牌;
- 系统能够将识别出的车牌上传;
- 上传至网络的车牌能够正常展示出来;
一.功能测试
使用正常的车牌,保持车牌静止,检查每个摄像头是否能抓拍车牌;
使用类似非车牌的写有字的纸板,检查每个摄像头是否抓拍;
使用正常的车牌,保持车牌较高速移动,检查每个摄像头是否能抓拍车牌;
在多种情况下检查每个摄像头抓拍到的车牌能否正常交给系统处理,如临时断电、断网后能否正常将数据交给系统;
使用抓拍到的正常的车牌,交由系统处理,检查系统能否识别车牌;
使用非车牌的其他图片,交由系统处理,检查系统能否识别;
在多种情况下检查系统能否将正常识别出的车牌进行上传,如临时断电、断网后未上传数据是否能继续上传;
构造非车牌的其他内容的数据,检查系统能否将异常内容进行上传;
检查上传至网络的车牌能否正常展示出来;
上传非车牌的其他内容的数据,检查能否正常显示出来。
二.性能测试
同时向一个摄像头展示多个静止的车牌,检查摄像头能否抓拍到多个车牌;
同时向一个摄像头展示多个较高速运动的车牌,检查摄像头能否抓拍到多个车牌;
抓拍后,检查系统识别车牌的时间是否在需求要求的时间内;
模拟大量抓拍照片同时交由系统处理,检查一定压力下系统能否正常识别车牌;
模拟大量车牌同时上传,检查一定压力下能否上传成功。
三.安全性测试
检查是否能够通过给车牌加装饰物等方法,使摄像头无法抓拍或抓拍后系统无法正常识别车牌。
122.请你对吃鸡游戏进行压力测试
参考回答:
首先明确需要测试压力的内容:
- 游戏服务器硬件
a.硬盘I/o
b.内存
c.CPU
- 网络压力
a.长连接
a1.最大连接数
a2.流量(内网、外网、进、出)
b.长连接短周期(类似Http的TCP应用,这个比较特殊的一个需求,专门针对LoginAgent)
b1.每秒建立的连接数
b2.实际处理能力
- 数据库
a.每秒事务数
b.每秒锁等待数
c.平均延时(ms)
d.CPU暂用
- 多线程的最优线程数
a.数据库执行的多线程
b.多连接处理
Windows Server环境测试方式
- 服务器性能监测
使用Server自带的性能监测器设置各个进程的监测参数。Window的这个自动工具做的相当强大。大家自己摸一摸基本就会用了。每个参数都由详细的说明。
- 案例设计注意
a.对于数据库的性能测试上,现在由于所有的游戏服务器构架在DB前面都有一个实现DB缓冲功能的进程,以减少数据库频繁的读写操作。所以其实数据库的读是一个轻量级的数量;而数据库的写操作是一个周期性能过程。案例设计一定要能够驱动这种周期性能过程。比如我们游戏的战斗,导致游戏玩家数据的改变,或驱动所有在线玩家数据的周期性存储。
b.选择具有代表性,并且最频繁的游戏操作。用于进行最高用户在线的各种性能指标采集。如,开枪、道具拾取、道具使用、移动、聊天
c.聊天性能测试
广播聊天是最为考验游戏信息发送能力的功能。通过进行全局广播的压力测试。我们可以获取服务器进程发送信息到客户端的最高承载量。进而可以对我们的各种广播功能进行一个预估和频率限制。
d.同屏玩家的移动测试
移动+广播。这两种信息,基本是网络游戏流量的70-80%左右。同屏玩家数量,将会增加各种数据的广播需求,非常影响游戏性能。所以同屏的移动测试也是广播测试的一个必要环节。需要根据实际结果进行适当的优化。
e.大量玩家同时登录测试
玩家登录时,有大量的信息需要进行分配和初始化;同时也有大量的数据需要下传客户端。服务器需要进行大量的TCP连接建立。所以是一个比较关键的过程。这个测试案例是一个比较特殊,但是运营是肯定会碰到的案例。
f.由于线程池处理事务,随着事务的时耗,存在一个最优线程数的问题。过多的线程反而会降低服务器效率
- 细节问题
a.进行测试需要仔细思考客户端性能影响服务器最后表现的可能性。比如
a1.模拟客户端的性能无法有效处理服务器返回信息,可能就导致服务器发送的信息缓存在服务器系统缓存,从而表现出服务器内存不断增加。表现为服务器发送能力不足,其实可能根本就是客户端的性能问题
a2.客户端性能问题,导致发起的请求数过少,从而导致单位时间内服务器处理的请求过少。表现为服务器性能不足,其实根本就是客户端的请求能力不足。
b.网络带宽导致最后表现不足
b1.确认服务器的各个网卡,以及相互的带宽。不然可能因为相互带宽,导致服务器对于客户端请求的处理延时。表现为服务器卡机
b2.客户端模拟多个玩家,比如1000个玩家。而客户端的网卡或者客户端与服务器之间的中转服务器带宽过小,导致服务器数据发送不出,内存不断增加。表现为服务器发送能力不足,其实是中间带宽问题。
c.debug i/o导致服务器性能下降
c1.进行性能测试,一定要取消debug用的同步的i/o.比如我们服务器的debuginternalLog.同步i/o是非常影响性能的,特别在压力测试下可能导致每秒上千上万甚至几十万次的执行。一处的文件写入操作就可以导致几十万次的处理能力变成几千次的处理能力。
c2.客户端避免进行阻塞操作导致模拟多用户性能下降,导致服务器表现性能下降
d.流量需要区分内网
网内、外网流量在游戏正式运行时是完全分开的。价格也是完全不同的。一个千M的外网是一个无法想象的运营成本,而kmbps/s现在已经是一个可以接受的代价。游戏进程需要进行不同网卡的配置和绑定。确定内外网流量。
123.请你对朋友圈点赞功能进行测试
参考回答:
- 是否可以正常点赞和取消;
- 点赞的人是否在可见分组里;
- 点赞状态是否能即时更新显示;
- 点赞状态,共同好友是否可见;
- 性能检测,网速快慢对其影响;
- 点赞显示的是否正确,一行几个;
- 点赞是否按时间进行排序,头像对应的是否正确;
- 是否能在消息列表中显示点赞人的昵称、5.不同手机,系统显示界面如何;
备注;
- 可扩展性测试,点赞后是否能发表评论;
- 是否在未登录时可查看被点赞的信息。
124.如果做一个杯子的检测,你如何测试(经典)
- 功能
水倒水杯容量的一半
水倒规定的安全线
水杯容量刻度与其他水杯一致
盖子拧紧水倒不出来
烫手验证
- 性能
使用最大次数或时间
掉地上不易损坏
盖子拧到什么程度水倒不出来
保温时间长
杯子的耐热性
杯子的耐寒性
长时间放置水不会漏
杯子上放置重物达到什么程度杯子会被损坏
- 界面
外观完整、美观
大小与设计一样(高、宽、容量、直径)
拿着舒服
材质与设计一样
杯子上的图案掉落
图案遇水溶解
- 安全
杯子使用的材质毒或细菌的验证
高温材质释放毒性
低温材质释放毒性
- 易用性
倒水方便
喝水方便
携带方便
使用简单,容易操作
防滑措施
- 兼容性
杯子能够容纳果汁、白水、酒精、汽油等。
- 震动测试
杯子加包装(有填充物),六面震动,检查产品是否能应对铁路/公路/航空运输。
- 可移植性
杯子在不同地方、温度环境下都可以正常使用。
125.如何对一个页面进行测试
参考回答:
- UI测试:页面布局、页面样式检查、控件长度是否够长;显示时,是否会被截断;支持的快捷键,Tab键切换焦点顺序正确性等。
- 功能测试:页面上各类控件的测试范围,测试点。结合控件的实际作用来补充检查点:比如, 密码框是否*显示, 输入是否做trim处理等。
- 安全测试:输入特殊字符,sql注入,脚本注入测试。后台验证测试,对于较重要的表单 ,绕过js检验后台是否验证;数据传输是否加密处理,比如, 直接请求转发,地址栏直接显示发送字符串?
- 兼容性测试
- 性能测试
126.如何对水壶进行测试(同水杯)
参考回答:
- 功能
水倒水壶容量的一半
水倒规定的安全线
水壶容量刻度与其他水壶一致
盖子拧紧水倒不出来
烫手验证
- 性能
使用最大次数或时间
掉地上不易损坏
盖子拧到什么程度水倒不出来
保温时间长
壶的耐热性
壶的耐寒性
长时间放置水不会漏
壶上放置重物达到什么程度壶会被损坏
- 界面
外观完整、美观
大小与设计一样(高、宽、容量、直径)
拿着舒服
材质与设计一样
壶上的图案掉落
图案遇水溶解
- 安全
壶使用的材质毒或细菌的验证
高温材质释放毒性
低温材质释放毒性
- 易用性
倒水方便
喝水方便
携带方便
使用简单,容易操作
防滑措施
- 兼容性
壶能够容纳果汁、白水、酒精、汽油等。
- 震动测试
壶加包装(有填充物),六面震动,检查产品是否能应对铁路/公路/航空运输。
- 可移植性
壶在不同地方、温度环境下都可以正常使用。
127.如何对淘宝搜索框进行测试
参考回答:
1.功能测试
1.输入关键字,查看: 返回结果是否准确,返回的文本长度需限制
1.1输入可查到结果的正常关键字、词、语句,检索到的内容、链接正确性;
1.2输入不可查到结果的关键字、词、语句;
1.3输入一些特殊的内容,如空、特殊符、标点符、极限值等,可引入等价类划分的方法等;
2.结果显示:标题,卖家,销售量,单行/多行,是否有图片
3.结果排序:价格 销量 评价 综合
4.返回结果庞大时,限制第一页的现实量,需支持翻页
5.多选项搜索:关键字 品牌 产地 价格区间 是否天猫 是否全国购
6.是否支持模糊搜索,支持通配符的查询
7, 网速慢的情况下的搜索
8.搜索结果为空的情况
9.未登录情况和登录情况下的搜索(登录情况下 存储用户搜索的关键字/搜索习惯)
- 性能测试:
1.压力测试:在不同发用户数压力下的表现(评价指标如响应时间等)
2.负载测试:看极限能承载多大的用户量同时正常使用
3.稳定性测试:常规压力下能保持多久持续稳定运行
4.内存测试:有无内存泄漏现象
5.大数据量测试:如模拟从庞大的海量数据中搜索结果、或搜索出海量的结果后列示出来,看表现如何等等。
- 易用性:交互界面的设计是否便于、易于使用
1.依据不同的查询结果会有相关的人性化提示,查不到时告知?查到时统计条数并告知?有疑似输入条件错误时提示可能正确的输入项等等处理;
2.查询出的结果罗列有序,如按点击率或其他排序规则,确保每次查询出的结果位置按规则列示方便定位,显示字体、字号、色彩便于识别等等;
3.标题查询、全文检索、模糊查询、容错查询、多关键字组织查询(空格间格开)等实用的检索方式是否正常?
4.输入搜索条件的控件风格设计、位置摆放是否醒目便于使用者注意到,有否快照等快捷查看方式等人性化设计?
- 兼容性
1.WINDOWS/LINUX/UNIX等各类操作系统下及各版本条件下的应用
2.IE/FIREFOX/GOOGLE/360/QQ等各类浏览器下及各版本条件下、各种显示分辨率条件下的应用
3.SQL/ORACLE/DB2/MYSQL等各类数据库存储情况下的兼容性测试
4.简体中文、繁体中文、英文等各类语种软件平台下的兼容性测试
5.IPHONE/IPAD、安卓等各类移动应用平台下的兼容性测试
6.与各相关的监控程序的兼容性测试,如输入法、杀毒、监控、防火墙等工具同时使用
- 安全性
1.被删除、加密、授权的数据,不允许被SQL注入等攻击方式查出来的,是否有安全控制设计;
2.录入一些数据库查询的保留字符,如单引号、%等等,造成查询SQL拼接出的语句产生漏洞,如可以查出所有数据等等,这方面要有一些黑客攻击的思想并引入一些工具和技术,如爬网等。
3.通过白盒测试技术,检查一下在程序设计上是否存在安全方面的隐患;
4.对涉及国家安全、法律禁止的内容是否进行了相关的过滤和控制;
128.如何对一瓶矿泉水进行测试
参考回答:
界面测试:查看外观是否美
功能度:查看水瓶漏不漏;瓶中水能不能被喝到
安全性:瓶子的材质有没有毒或细菌
可靠性:从不同高度落下的损坏程度
可移植性:再不同的地方、温度等环境下是否都可以正常使用
兼容性:是否能够容纳果汁、白水、酒精、汽油等
易用性:是否烫手、是否有防滑措施、是否方便饮用
用户文档:使用手册是否对的用法、限制、使用条件等有详细描述
疲劳测试:将盛上水(案例一)放24小时检查泄漏时间和情况;盛上汽油(案例二)放24小时检查泄漏时间和情况等
压力测试:用根针并在针上面不断加重量,看压强多大时会穿透
跌落测试:测试在何种高度跌落会破坏水瓶
129.请你说一下jmeter
参考回答:
Jmeter:Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
130.为什么使用Jmeter:
开源免费,基于Java编写,可集成到其他系统可拓展各个功能插件
支持接口测试,压力测试等多种功能,支持录制回放,入门简单
相较于自己编写框架或其他开源工具,有较为完善的UI界面,便于接口调试
多平台支持,可在Linux,Windows,Mac上运行
- 用例生成与导出:
Jmeter的用例格式为jmx文件,实际为xml格式,感兴趣可以学习下自己定制生成想要的jmx文件。
- 生成原则:
每个功能模块为一个独立的jmx文件。增加可维护性。(尽量不要将一个jmx文件放入太多功能,后期维护成本会很高。)
模块的私有变量保存在模块中,多模块共有的(例如服务器ip端口等)可以考虑存在单独的文件中读取。
接口测试不要放太多线程,毕竟不是做压力测试,意义也不大。
- 导出方法:
编写测试用例
文件——保存为——确定:
4. Jmeter运行模式及参数
GUI模式
打开已有的jmx文件(文件——打开)
点击启动按钮运行
命令行模式
依赖:
配置jmeter环境变量(windows下为将${jmeterhome}/bin加入Path变量)
如果未加入环境变量,在执行的时候可以直接给出全路径或在${jmeterhome}/bin下执行
命令:
jmeter -n -t -l
参数:
-h 帮助 -> 打印出有用的信息并退出
-n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
-t 测试文件 -> 要运行的 JMeter 测试脚本文件
-l jtl文件 -> 记录结果的文件
-r 远程执行 -> 启动远程服务
-H 代理主机 -> 设置 JMeter 使用的代理主机
-P 代理端口 -> 设置 JMeter 使用的代理主机的端口号
-j 日志文件->设置JMeter日志文件的名称
- 实例:
JMeter -n -t my_test.jmx -l log.jtl -H my.proxy.server -P 8000
- 执行步骤:
JMeter 默认去当前目录寻找脚本文件,并把日志记录在当前目录。比如你在 C: oolsapache-jmeter-2.11in 目录下执行以上命令,JMeter 会去该目录下寻找 test.jmx 脚本并把执行结果放在该目录。如果你的脚本在其他目录,而且想要把执行结果放在另外文件夹,可以使用绝对路径告诉 JMeter。
- 执行结果查看:
GUI界面打开聚合报告
在GUI界面创建一个聚合报告
聚合报告界面点击浏览,选中生成的.jtl文件,打开
8. Jmeter使用
Jmeter创建接口测试计划实例
测试用例应该作为测试的基础内容,而用例的结构可能划分,则是用例的基础(忽然在这里想说一下,用例仅仅是一项测试活动的纲要,有最好,没有的话能保证质量也OK。更不用说用例的格式问题,无论是表格还是导图,其实都无所谓!本文的用例是指jmx文件中的控件结构)。
模块名称(测试计划):每个模块独立划分为一个jmx文件(例如登陆模块),最好与接口类一一对应。对应的服务器信息,数据库信息等可存在这里。
数据准备:用于测试数据的准备(例如账号信息)。
结果查看:用于放置需要查看结果的控件(例如结果树)。
线程组:所有的接口测试用例放在线程组下,集中定义线程等信息
获取线程对应测试数据:用于获取针对独立线程的测试数据,例如在数据准备里面获得了账号信息,在这里根据账号信息去数据库获取对应的名称,ID等信息。
请求名称:用简单控制器为文件夹,内有不同的请求。简单控制器为一个独立的接口,不同请求对应不同的代码路径(例如成功请求,失败请求等)。建议请求名称最好用英文形式,否则后期持续集成或许会出现问题(no zuo no die!)。
在每条请求内放置正则匹配(用于应对需要返回值作为下次请求的参数的情况)以及断言。
131. 请你进行测试:前端下拉框实现,测试下拉框定位方式
参考回答:
Selenium+Python自动化测试对下拉菜单的定位
- 通过selenium.webdriver.support.ui的Select进行定位
下拉菜单如下图:
定位代码:
```python from selenium.webdriver.support.ui import Select # 通过index进行选择 Select(driver.find_element_by_id("gender")).select_by_index(1) # 通过value进行选择 Select(driver.find_element_by_id("gender")).select_by_value("2") # 通过选项文字进行选择 Select(driver.find_element_by_id("gender")).select_by_visible_text("Male") # 注:Select only works on <select> elements(Select只对<select>标签的下拉菜单有效).
- 定位非标签的下拉菜单
非标签的下拉菜单如下图所示:
定位非标签的下拉菜单中的选项,需要两个步骤,先定位到下拉菜单,再对其中的选项进行定位。
定位代码:
# 先定位到下拉菜单 drop_down = driver.find_element_by_css_selector("div#select2_container > ul") # 再对下拉菜单中的选项进行选择 drop_down.find_element_by_id("li2_input_2").click() # 注:也可以用此方法定位<select>标签的下拉菜单。
132. 请你来聊一聊appium断言
参考回答:
ppium-unittest单元测试框架中,TestCase 类提供了一些方法来检查并报告故障,如下图:
上面所提供的断言方法(assertRaises(), assertRaisesRegexp()除外)接收 msg 参数,如果指定, 将体作为失败的错误信息。
try: num = input("Enter a number:") assert (num == 10), "The number is not 10!" except AssertionError,msg: print msg print ("Sadly, num not equals to 10")
在上面的程序中,运行到的python 的异常与断言。通过 raw_input()方法要求用户输入一个数字,通过 arrsert 判断用户输入的 num 是否等于10 ;通过 python 的 AssertionError 类型的异常来实捕获这个异常, msg 接收异常信息并打印, 注意, msg 所结构的异常信息是我们自定义的(“The number is not10!”) 。
assertEqual(first, second, msg=None):判断 first 和 second 的值是否相等,如果不相等则测试失败,msg 用于定义失败后所抛出的异 常信息。
assertNotEqual(first, second, msg=None):测试 first 和 second 不相等,如果相等,则测试失败。
assertTure(expr,msg=None)、assertFalse(expr,msg=None):测试 expr 为 Ture(或为 False)
以下为python 2.7 版新增的断言方法:
assertIs(first, second, msg=None)、assertIsNot(first, second, msg=None):测试的 first 和 second 是(或 不是)相同的对象。
assertIsNone(expr, msg=None)、assertIsNotNone(expr, msg=None):测试 expr 是(或 不是)为 None
assertIn(first, second, msg=None)、assertNotIn(first, second, msg=None):测试 first 是(或不是)在 second 中。second 包含是否包含 first 。
assertIsInstance(obj, cls, msg=None)、assertNotIsInstance(obj, cls, msg=None):测试 obj 不(或 不是)cls 的一个实例。(obj 和 cls 可以是一个类或元组) ,要检查他们的类型使用 assertIs(type(obj), cls)。
133.请你来说一下购物车的测试用例
参考回答:
- 界面测试
界面布局、排版是否合理;文字是否显示清晰;不同卖家的商品是否区分明显。
- 功能测试
未登录时:
将商品加入购物车,页面跳转到登录页面,登录成功后购物车数量增加;
点击购物车菜单,页面跳转到登录页面。
登录后:
所有链接是否跳转正确;
商品是否可以成功加入购物车;
购物车商品总数是否有限制;
商品总数是否正确;
全选功能是否好用;
删除功能是否好用;
填写委托单功能是否好用;
委托单中填写的价格是否正确显示;
价格总计是否正确;
商品文字太长时是否显示完整;
店铺名字太长时是否显示完整;
创新券商品是否打标;
购物车中下架的商品是否有特殊标识;
新加入购物车商品排序(添加购物车中存在店铺的商品和购物车中不存在店铺的商品);
是否支持TAB、ENTER等快捷键;
商品删除后商品总数是否减少;
购物车结算功能是否好用。
- 兼容性测试
不同浏览器测试。
- 易用性测试
删除功能是否有提示;是否有回到顶部的功能;商品过多时结算按钮是否可以浮动显示。
- 性能测试
压力测试;并发测试。
134.请你进行一下弱网模拟
参考回答:
方法一:charles弱网模拟
图片
配置参数解析:
bandwidth —— 带宽,即上行、下行数据传输速度
utilisation —— 带宽可用率,大部分modern是100%
round-trip latency —— 第一个请求的时延,单位是ms。
MTU —— 最大传输单元,即TCP包的最大size,可以更真实模拟TCP层,每次传输的分包情况。
Releability —— 指连接的可靠性。这里指的是10kb的可靠率。用于模拟网络不稳定。
Stability —— 连接稳定性,也会影响带宽可用性。用于模拟移动网络,移动网络连接一般不可靠。
使用chrome的webview调试工具,缺点是只适用于web页面的弱网模拟。
方法二:chrome的webview调试工具弱网模拟
使用chrome的webview调试工具,缺点是只适用于web页面的弱网模拟。
具体步骤:
应用打开webview调试功能,具体如下:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); }
手机链接电脑,运行APP,进入具体H5页面;
chrome的DevTools中打开Webview:进入chrome://inspect/#devices,会显示已经连接设备,选中待调试webview的inspect
network页面,No throttling下拉框,可以进行网络模拟。
方法三:iOS手机自带Network Link Conditioner 弱网模拟
iPhone手机打开开发者选项
具体参考:
设置-开发者选项 > Network Link Conditioner 入口。
系统已经内置常见网络配置,也可以增加自定义配置。
具体配置参数:
in Bandwidth 下行带宽,即下行网络速度
In packet loss 下行丢包率
in delay 下行延迟,单位ms
out bandwidth 上行带宽
out packet loss 上行丢包率
out delay 上行延迟
DNS delay DNS解析延迟
protocol 支持Any,IPV4、IPV6
interface 支持Any,WI-Fi,cellular(蜂窝网)
135.你写的测试程序是怎么样的,你写过前端、后端程序吗?
参考回答:
开发测试驱动程序一般分为4步:
- 指出需要的新特性。可以记录下来,然后为其编写一个测试。
- 编写特性的概要代码,这样程序就可以运行而没有任何语法等方面的错误,但是测试会失败。看到测试失败是很重要的,这样就能确定测试可以失败。如果测试代码中出现了错误,那么就有可能出现任何情况,测试都会成功,这样等于没测试任何东西。再强调一遍:在试图测试成功之前,先要看到它失败。
- 为特性的概要编写虚设代码,能满足测试要求就行。不用准确的实现功能,只要保证测试可以通过即可。这样一来就可以保证在开发的时候总是通过测试了,(除了第一次测试的时候)甚至在最初实现功能时亦是如此。
- 现在重写(或者重构)代码,这样它就会做自己应该做的事,从而保证测试一直成功。
在编码完成时,应该保证代码处于健康状态–不要遗留下任何测试失败。
写过前端程序。
136.请问你有没有写过测试脚本,怎么写的?
参考回答:
然后,撰写测试桩与驱动,白盒测试保证代码逻辑中循环和分支都能够走到,黑盒测试保证函数和首先,代码走查结合动态单步跟踪以及观察日志与文件输出,网络、CPU状态。
功能脚本接口正确,输入输出符合设计预期。
对于异常处理,特别是变量的检查需要特别关注,变量在使用前都需要进行检查,是否为空?或者为0?对于文件名和路径必须检查,确认文件是否存在,路径是否可达之后再进行后续操作。
另外,需要考虑所依赖的其他功能脚本以及二进制工具,这些功能性单元应该如何使用,调用后的返回会有哪些情况,对于正常和异常结果,脚本是否能够捕捉到并且作出正确的判断。
137.请问你有没有写过web测试,怎么写的?
参考回答:
Web测试主要从下面几个大方向考虑:
1.功能测试
主要做链接测试,表单测试,cookies测试,设计语言测试等
- 性能测试
考虑连接速度测试,以及负载测试,例如:Web应用系统能允许多少个用户同时在线?如果超过了这个数量,会出现什么现象?Web应用系统能否处理大量用户对同一个页面的请求?还有压力测试
- 可用性测试
比如导航测试,图形测试,内容测试,整体界面测试等
- 兼容性测试
市场上有很多不同的操作系统类型,最常见的有Windows、Unix、Macintosh、Linux等。Web应用系统的最终用户究竟使用哪一种操作系统,取决于用户系统的配置。这样,就可能会发生兼容性问题,同一个应用可能在某些操作系统下能正常运行,但在另外的操作系统下可能会运行失败。因此,在Web系统发布之前,需要在各种操作系统下对Web系统进行兼容性测试。
- 安全性测试
现在的Web应用系统基本采用先注册,后登陆的方式。因此,必须测试有效和无效的用户名和密码,要注意到是否大小写敏感,可以试多少次的限制,是否可以不登陆而直接浏览某个页面等。
Web应用系统是否有超时的限制,也就是说,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。
为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进了日志文件、是否可追踪。
当使用了安全套接字时,还要测试加密是否正确,检查信息的完整性。
服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。
138.请问测试路由器怎么测,用命令行还是界面?
参考回答:
可以采用lperf这个命令
Lperf是一个网络性能测试工具,可以测量最大tcp和udp带宽,具有多种参数和特性,可以记录带宽,延迟抖动,数据包丢失,通过这些信息可以发现网络问题,检查网络质量,定位网络瓶颈。
iperf的使用非常简单,测试的原理是在wan口连接一台PC机,在LAN口连接一台PC,两边分别运行iperf服务端和客户端模式,用来测量LAN->WAN和WAN->LAN性能。具体命令如下:
服务端:iperf -s -w 1m
客户端:iperf -c -w 1m -t 20 -P 10
含义是TCP wndowsize 为1MByte,测试时间是20s,线程是10。
139.请你回答一下如何测试手机开机键?
参考回答:
功能测试:
按下开机键,屏幕能否亮起
性能测试:
按下开机键,屏幕能否在规定时间内亮起
压力测试
连续多次按下开机键,观察屏幕是否能一直亮起,到多久时间失灵
健壮性测试
给定一个中了病毒的手机或者是淘汰许久的老机子,安歇开机键观察屏幕能否亮起
可靠性测试
连续按下开机键有限次数,比如1万次,记录屏幕未亮起的次数
可用性测试
开机键按下费不费力,开机键的形状设计是否贴合手指,开机键的位置设计是否方便
140.请问你遇到过哪些印象深刻的bug,接口测试出现bug的原因有哪些?
参考回答:
面试官询问遇到过哪些印象深刻的bug,其实它并不关心你描述的这个bug是否真的有价值,或有多曲折离奇?他只是:了解你平时工作中的测试能力
所以,这就要求的你平时工作中遇到bug时试着自己去定位,定位bug的过程远比你的单纯的执行测试用例有“价值”(自我技能提高的价值),在定位bug的过程中你需要掌握和运用更多知识。
另外,建议你平时养成总结的好习惯,发现的bug,开发解决了,最好问问他原因以及解决的方法,这样再遇到类似问题时,自己也可以试着定位解决。遇到难解决的bug,也可以把最终的解决过程记录下来。(这不是就有素材了)
所以,建议你平时可以主动要求去分享一些自己工作中用到或学习的技术。或者多去参加集体活动,加强自己的表达能力。From:虫师
接口测试常见的bug有以下几个:
- 特殊值处理不当导致程序异常退出或者崩溃
- 类型边界溢出,导致数据独处和写入不一致
- 取值边界外未返回正确的错误信息
- 权限未处理,可以访问其他用户的信息
- 逻辑校验不完善,可以利用漏洞获取非正当利益
- 状态处理不当,导致逻辑出现错误
- 数组类型item个数为0或者item重复时程序异常退出
141.你在做项目中有做过压力测试吗,怎么做
参考回答:
- 首先对要测试的系统进行分析,明确需要对那一部分做压力测试,比如秒杀,支付
- 如何对这些测试点进行施压
第一种方式可以通过写脚本产生压力机器人对服务器进行发包收报操作
第二点借助一些压力测试工具比如Jmeter,LoadRunner
- 如何对这些测试点进行正确的施压
需要用压力测试工具或者其他方法录制脚本,模拟用户的操作
- 对测试点设计多大的压力比较合适?
需要明确压力测试限制的数量,即用户并发量
- 测试结束后如何通过这些数据来定位性能问题
通过测试可以得到吞吐量,平均响应时间等数据,这个数据的背后是整个后台处理逻辑综合作用的结果,这时候就可以先关注系统的CPU,内存,然后对比吞吐量,平均响应时间达到瓶颈时这些数据的情况,然后就能确认性能问题是系统的哪一块造成的
142.请问你在项目中关于功能测试和接口测试是怎么做的
- 功能测试:
首先制定测试计划,然后进行测试设计,将在测试计划阶段指定的测试活动分解,进而细化,为若干个可执行程序的子测试过程,然后执行测试,按照测试计划使用测试用例对待测项目进行逐一的,详细的排查分析评估,最后对测试结果进行统计和分析,
- 接口测试:
什么是接口(API)
API全称Application Programming Interface,这里面我们其实不用去关注AP,只需要I上就可以。一个API就是一个Interface。我们无时不刻不在使用interfaces。我们乘坐电梯里面的按钮是一个interface。我们开车一个踩油门它也是一个interface。我们计算机操作系统也是有很多的接口。(这是目前个人找到比较好理解的一段解释)
接口就是一个位于复杂系统之上并且能简化你的任务,它就像一个中间人让你不需要了解详细的所有细节。那我们今天要讲的Web API就是这么一类东西。像谷歌搜索系统,它提供了搜索接口,简化了你的搜索任务。再像用户登录页面,我们只需要调用我们的登录接口,我们就可以达到登录系统的目的。
现在市面上有非常多种风格的Web API,目前最流行的是也容易访问的一种风格是REST或者叫RESTful 风格的API。从现在开始,以下我提到的所有API都是指RESTful风格的API。
什么是接口测试和为什么要做接口测试
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
现在很多系统前后端架构是分离的,从安全层面来说,只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前端太容易了),需要后端同样进行控制,在这种情况下就需要从接口层面进行验证。
如今系统越来越复杂,传统的靠前端测试已经大大降低了效率,而且现在我们都推崇测试前移,希望测试能更早的介入测试,那接口测试就是一种及早介入的方式。例如传统测试,你是不是得等前后端都完成你才能进行测试,才能进行自动化代码编写。而如果是接口测试,只需要前后端定义好接口,那这时自动化就可以介入编写接口自动化测试代码,手工测试只需要后端代码完成就可以介入测试后端逻辑而不用等待前端工作完成。
接口测试的策略
接口测试也是属于功能测试,所以跟我们以往的功能测试流程并没有太大区别,测试流程依旧是:
- 测试接口文档(需求文档)
- 根据接口文档编写测试用例(用例编写完全可以按照以往规则来编写,例如等价类划分,边界值等设计方法)
- 执行测试,查看不同的参数请求,接口的返回的数据是否达到预期。
143.请问你有用过什么测试工具吗,用过哪些?
参考回答:
自动化测试工具用过selenium和appium
性能测试工具有用过Jmeter
144.请你设计一个微信朋友圈点赞的测试用例
参考回答:
功能测试:
点赞某条朋友圈,验证是否成功
接口测试:
点赞朋友圈,验证朋友能否收到提示信息
性能测试
点赞朋友圈,是否在规定时间显示结果,是否在规定时间在朋友手机上进行提示
兼容性测试
在不同的终端比如ipad,手机上点赞朋友圈,验证是否成功
145.请问如果用户点击微博的关注图标但是app上面没有反应,应该怎么排查这个问题
参考回答:
- 在Eclipse Devices窗口,选中app对应的包名,然后点击debug图标(绿色的小虫子),然后切换到Debug视图。
- 切换视图之后,可以看到debug下,app的线程列表。
- 对于main线程(第一个线程),选中,并将其挂起Suspend。
- 然后我们就可以看到,Suspend之后,main线程卡住的位置。
146.在做测试的过程中,假如前端和后端吵起来了都在踢皮球觉得对方该改代码,你怎么办?
参考回答:
此时就应该找技术领导拍板或leader们基于安全性、性能、可测试性、可维护性讨论敲定一个解决方案,做到开发环境方便开发,线上环境少配置
少依赖、少出错机会。
147.如果广东用户头条app刷不出东西了,你应该怎么排查问题
参考回答:
- 检查网络连接是否稳定,更换网络尝试
- 更新头条版本尝试
- 清除app缓存,应用数据
148.请你说一下能不能用机器学习去进行自动化测试,如何监控异常流量,如果是脉冲呢,如何和正常流量作区分
参考回答:
如何用机器学习去进行自动化测试,就是让自动化测试变得更加智能,在自动化测试过程中,当测试功能模块越来越多,没有太多的时间去全部覆盖,我们可以采用归纳学习的方式,基于自动化测试的执行结果或者手工测试执行的结果为数据输入,然后基于一定的模型(例如:以通过率和模块的重要率计算的平均值)得出测试推荐模块,或者当要执行一个功能模块时,基于历史数据和模型(bug出现的错误相关性,功能相关性等)计算出与该功能模块相关性最大模块,并推荐测试。
如何监控异常流量:
- 抓包
tcpdump -i eth0 -w server.cap
对包文件使用第三方工具如:wireshark做分析
- iftop
yum install iftop
- iptraf
yum install iptraf –y 或 yum install iptraf-ng -y
启动命令ifptraf-ng
149.请你说一说当前工作中涉及的测试问题(测试流程和测试性能)
参考回答:
在测试性能中,时常会出现脚本回访卡住的问题
原因有以下几种:
- runtimesetting 中的continue error没有勾选
- 录制的脚本中存在冗余的代码部分,需要对脚本进行优化,去除冗余的部分(优化脚本)
例如:在用FireFox录制脚本时,脚本中会产生一个叫”Url=http://download.cdn.mozilla.net/pub/firefox/releases/43.0.1/update/win32/zh-CN/firefox-43.0.1.complete.mar",“Referer=”, ENDITEM,”这样的代码(该代码出现的问题不止一处,在查找时一定要注意。),这是因为采用firefox浏览器录制时产生的压缩文件,在脚本回放时卡住的原因正是因为这个(建议:能采用IE录制尽量用IE浏览器)
解决办法:注释掉或者删除掉该段代码即可, 关联问题:在用loadrunner自带对比工具对比脚本后 找到需要关联的动态值。在关联后回放脚本时报错HTTP-status code 417(exception failed)错误时
产生的原因如下:
- 脚本中还存在没有关联或者关联失败的动态值,利用lr自带对比工具仔细对比
- 脚本中的动态值被做了加密策略,仔细查看脚本中动态值的部分,看看动态值是否被做了安全策略(随机生成或者打乱动态值顺序、在动态值中加入了特殊符号),由于在tree-response中的动态值是未被加密的状态,在client向server发送请求时,client的动态值发给服务器,这时服务器的动态值已经被做了参数化,所以服务器不认准client向服务器发送的动态值。
解决办法:去掉动态值的安全策略即可(JVM参数)
150. 请你说一说洗牌问题的思路并手写代码,并设计测试用例
参考回答:
洗牌问题:有个长度为2n的数组{a1,a2,a3,…,an,b1,b2,b3,…,bn},希望排序后{a1,b1,a2,b2,….,an,bn},请考虑有无时间复杂度o(n),空间复杂度0(1)的解法。
void PerfectShuffle(int *A,int n){ if(n <= 1){ return; }//if // int size = 2*n; int index,count; for(int i = n;i < size;++i){ // 交换个数 count = n - (i - n) - 1; // 待交换 index = i; for(int j = 1;j <= count;++j){ swap(A[index],A[i-j]); index = i - j; }//for }//for } };
可以就数组的类型,可以是int型的,浮点型的,还可以是大数类型,负数,进行测试。
151.请你测试一下游戏中英雄的技能
参考回答:
测试的设计都是通用的,首先功能测试看功能有没有实现,然后再对性能、压力、容量、健壮性、安全性、可靠性、恢复性、备份、协议、兼容性、可用性、配置、GUI这些非功能测试去思考。具体答案这里不再赘述
152.请你回答一下性能测试有哪些指标,对一个登录功能做性能测试,有哪些指标,怎么测出可同时处理的最大请求数量
参考回答:
性能测试常用指标:
从外部看,主要有
- 吞吐量:每秒钟系统能够处理的请求数,任务数
- 响应时间:服务处理一个请求或一个任务的耗时
- 错误率:一批请求中结果出错的请求所占比例
从服务器的角度看
性能测试关注CPU,内存,服务器负载,网络,磁盘IO
对登录功能做性能测试
单用户登陆的响应界面是否符合预期
单用户登陆时后台请求数量是否过多
高并发场景下用户登录的响应界面是否符合预期
高并发场景下服务端的监控指标是否符合预期
高集合点并发场景下是否存在资源死锁和不合理的资源等待
长时间大量用户连续登录和登出,服务器端是否存在内存泄漏
怎么测出可同时处理的最大请求数量
可以采用性能测试工具(WeTest服务器性能),该工具是腾讯wetest团队出品,使用起来很简单方便,但测试功能相当强大,能提供10w+以上的并发量,定位性能拐点,测出服务器模型最大并发
153.请问你有没有做过什么单元测试,怎么进行单元测试,对一个没有参数没有返回值但可能对全局变量有影响的怎么进行单元测试
参考回答:
如何进行单元测试:
创建单元测试,该工具可以对任何类、接口、结构等实体中的字段、属性、构造函数、方法等进行单元测试。创建单元测试大致可以分为两类:
第一类整体测试,整体测试是在类名称上右击鼠标,在下拉菜单中点击创建单元测试选项。这样就可以为整个类创建单元测试了,这时他会为整个类可以被测试的内容全部添加测试方法。开发人员直接在这些自动生成的测试方法中添加单元测试代码就可以了。
第二类单独测试,如果只想单独对某个方法、属性、字段进行测试,则可以将鼠标焦点放在这个待测试的项目名称之上,然后点击鼠标右键,在右键菜单中选择创建单元测试选项。这样就可以单独为某个方法创建单元测试了。
运行单元测试
查看测试结果
编写单元测试代码
测试没有参数的函数,它可能还有别的输入,例如全局变量,成员变量,或调用子函数获得的输入(这个要使用工具才能做到),只要函数需读取的,都应该设定初始值,如果完全没有,没有输入也是一种输入,照样测试就是了。同样道理,输出也不仅仅是返回值,没有返回值还可能修改了全局变量什么的,这些也是要判断的输出。
154.请问你有没有做过压力测试
参考回答:
在软件工程中,压力测试是对系统不断施加压力的测试,是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。例如测试一个Web 站点在大量的负荷下,何时系统的响应会退化或失败。
155. 对于有系统大量并发访问,你会如何做测试,有什么建议
参考回答:
如何做高并发系统的测试,一般而言,整体的测试策略是:先针对部分系统进行性能测试及压力测试,得到各部分的峰值处理性能,再模拟整体流程测试,重点测试整体业务流程以及业务预期负荷,着重测试以下几点:
- 不同省份,不同运营商CDN节点性能,可采用典型压力测试方案
- 核心机房BGP网络带宽,此部分重点在于测试各运行商的BGP网络可靠性,实际速率,一般采用smokeping,lxChariot等工具
- 各类硬件设备性能,一般采用专业的网络设备测试工具
- 各类服务器并发性能,分布式处理能力,可采用压力测试方案工具
- 业务系统性能,采用业务系统压力测试方案
- 数据库处理性能,这部分需要结合业务系统进行测试,以获取核心业务场景下的数据库的TPS/QPS,
- 如果有支付功能,需要进行支付渠道接口及分流测试,此部分相对而言可能是最大的瓶颈所在,此外还涉及备份方案,容灾方案,业务降级方案的测试。
156.分别说出web和app元素定位方法
- Web:id、xpath、name、class_name、tag_name、link_text、partial_link_text、css_selector
- app: id、classname、xpath
157. get和post不同点
- GET - 从指定的资源请求数据。请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接
- POST - 向指定的资源提交要被处理的数据。POST请求会把请求的数据放置在HTTP请求包的包体中
158. http和https不同点
1、HTTPS 协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(以前的网易官网是http,而网易邮箱是 https 。)
2、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。
3、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
159.selenium原理
- 当使用 Selenium 2.0 启动浏览器时,后台会同时启动基于 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。
160. appium原理
- 开源、跨平台的UI自动化测试工具,支持多种语言编写的测试脚本
- 原理:
test scripts(测试脚本发送一个请求到appium server)
appium server接收到请求后进行解析并把请求转发给 bootstrap.jar。
jar接收到appium的命令,调用UIAutomator命令实现操作
最终结果由bootstrap.jar返回给Appium server。
161.自动化测试用到的模块
- requests+unittest+ddt+httptestrunner+pymysql+openpyxl+logging 接口自动化
- selenium+pytest+allure web自动化
- appium+selenium+pytest+allure+yaml app自动化
162. OSI七层模型
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
163.cookie、session、token各自区别
- cookie:在客户端存储在客户端用于存储会话信息的
- session:在服务器端,记录用户的请求状态,一般默认时间30min
- session_id会存在cookie中,每次请求cookie中所有信息都会传递给服务器,服务器通过 session_id来识别是否是同一个用户请求,不是同一个用户的话,就会要求重新登录
- token:访问权限
- 鉴权:访问的接口是否正常,是否非法访问绕过前端。防止跳过页面直接访问接口。token
- 授权:是否具有访问接口的权限。 唯一全局动态的 。key
164.常用状态码
- 100系列:请求已收到继续处理;
- 200系列:表示成功
- 200:正常,服务器正确响应了请求
- 300系列:资源重定向;
- 301:永久重定向;请求的网页已永久移动到新位置
- 302:2临时重定向;被请求文档已经临时移至别处,此文档新的url在location响应头中给出
- 303:浏览器对于POST的响应进行重定向至新的url
- 307:浏览器对于GET的响应重定向至新的url
- 400系列:客户端错误:
- 400:错误请求;服务器不理解请求的语法。
- 401:未授权;如请求参数、方法、格式等
- 403:拒绝访问;服务器理解客户的请求,但拒绝处理它(没有权限)
- 404:请求资源不存在
- 500系列:服务器端出错
- 500:服务器内部错误
- 501:尚未实施;服务器不具备完成请求的功能
- 502:服务器网关错误
- 503:服务器由于维护或者负载过重未能应答
- 504请求超时
165. 手写adb命令
- adb 帮助:adb --help
- 启动adb 服务:adb start-server
- 关闭adb 服务:adb kill-server
- 获取设备号:adb devices
- 获取系统版本:adb shell getprop ro.build.version.release
- 发送文件到手机:adb push 电脑端⽂件路径/需要发送的文件 手机端存储的路径
- adb push C:UserswinDesktopxx.png /sdcard
- 从手机拉取文件: adb pull 手机端的路径/拉取文件名 电脑端存储文件路径
- adb pull /sdcard/xx.png C:UserswinDesktop
- 查看手机运行日志: adb logcat
- 进入到手机终端: adb shell
- 安装app到手机: adb install 路径/xxx.apk
- 卸载手机app : adb uninstall app
- 获取app启动包名和启动名(⚠手机需要先打开对应app)
- Mac/Linux: adb shell dumpsys window windows | grep mFocusedApp
- 在 Windows 终端运⾏: adb shell dumpsys window windows | findstr mCurrent
- 获取app启动时间: adb shell am start -W 包名/.启动名
- 查看设备ip地址:
- adb shell ifconfig wlan0
- adb shell netcfg
- 查看设备cpu信息: adb shell cat /proc/cpuinfo
- 查看设备内存信息: adb shell cat /proc/meminfo
166. http请求头和响应头
- http请求及其结构:
- 请求信息包含:请求行(request) 请求头部header 、空行和请求数据组成
- 响应及其结构
- 响应组成:状态行、响应头报头、空行和响应正文
167.鼠标操作常用函数
- context_click() 右击 --> 此方法模拟鼠标右键点击效果
- double_click() 双击 --> 此方法模拟双标双击效果
- drag_and_drop() 拖动 --> 此方法模拟双标拖动效果
- move_to_element() 悬停 --> 此方法模拟鼠标悬停效果
- perform() 执行 --> 此方法用来执行以上所有鼠标方法
168.键盘操作常用函数
- send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
- send_keys(Keys.SPACE) 空格键(Space)
- send_keys(Keys.TAB) 制表键(Tab)
- send_keys(Keys.ESCAPE) 回退键(Esc)
- send_keys(Keys.ENTER) 回车键(Enter)
- send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)
- send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)
- send_keys(Keys.CONTROL,'v') 全选(Ctrl+V)
- send_keys(Keys.CONTROL,'x') 复制(Ctrl+X)
169.解决手动造数据问题
- 参数化
- 手机号:
excel里边存放初始手机号 每次执行完,回写新的手机号(原来号码+1)
每次从数据库里查询最大手机号,在这个基础上加1
- 变量替换: 数据库依赖关系 ${mobile} ${regtime} ${memberid} ${loanid}
- 最关键:用例设计、用例参数之间依赖关系
170.你写框架多长时间?
初步模型:1-2周,一个月时间
171. TestCase使用
导入unittest模块、被测文件或其中的类
创建一个测试类,并继承unitest.TestCase
定义测试函数,函数名已test_开头,测试用例
调用unittest.main()方法运行测试用例
172.Selenium 中如何保证操作元素的成功率?也就是说如何保证我点击的元素一 定是可以点击的?
1.添加元素智能等待时间 driver.implicitly_wait(30)
2.添加强制等待时间 time.sleep()
3.try 方式进行id,name,clas,x path, css selector不同方式进行定位,如 果第一种失败可以自动尝试第二种
173. 你的自动化用例的执行策略是什么?
- 利用自动化测试工具,经过测试需求分 析;
- 设计出自动化测试用例;
- 从而搭建自动化测试的框架,设计与编写自动化脚 本;
- 验证测试脚本的正确性,最终完成自动化测试测试脚本(即主要功能为测试的应用软件)
- 输出测试结果
174. 常见的 POST 提交数据方式
主要有四种方式:
- application/x-www-form-urlencoded;
- multipart/form-data;
- application/json;
- text/xml
175. 目前主流的APP自动化测试框架,各个自动化适合的语言
appium macaca、robotium、UiAutomator
176.Selenium有哪几种定位方式?用的最多的是哪种?
8种单元素定位方法,8种对应的多元素定位方法;所有方法都是基于driver.find_element()和driver.find_elements()方法,如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.find_element_by_id('id') # 通过元素id属性定位元素
driver.find_element_by_name('name') # 通过元素名字属性定位元素
driver.find_element_by_tag_name('tag_name') # 通过元素的标签名称定位元素
driver.find_element_by_class_name('class_name') # 通过元素的类名称定位元素
driver.find_element_by_link_text('link_text') # 通过链接元素的完整显示文字定位元素
driver.find_element_by_partial_link_text('partial_link_text') # 通过链接元素的部分显示文字定位元素
driver.find_element_by_xpath('xpath') # 通过xpath表达式定位元素
driver.find_element_by_css_selector('css_selector') # 通过css表达式定位元素
driver.find_elements_by_id('id') # find_elements_by_xxx系列也有8种,可以定位多个满足条件的元素
driver.find_element(By.ID, 'id') # 每一个find_element_by_xxx方法都是基于find_element方法的
driver.find_elements(By.ID, 'id') # find_element()方法的复数形式,可以定位多个满足条件的元素
为了保证代码的统一性,使用的最多的是driver.find_element_by_xpath()这个方法,传入定位器,即使我们使用id作为定位器,仍然写成基于id的xpath定位器表达式,如下:
baidu_yi_xia_locator = ‘//input[@id="su"]’ # 百度一下按钮的定位器,写成了xpath,但基于的是id这个属性
baidu_yi_xia = driver.find_element_by_xpath(baidu_yi_xia_locator) #定位元素,并返回给变量
baidu_yi_xia.click() # 点击百度一下
177. UI自动化能发现多少Bug
UI自动化的目的不是为了发现多少Bug,主要是为了减轻重复的基础操作和线上监控的作用
178.monkey属于自动化吗?
monkey不属于严格意义上的自动化,monkey是生成用户或系统的伪随机事件,在屏幕上触发随机点击事件
179. 你们一般对什么case会进行自动化,自动化一般在哪个阶段进行
主要是主流程中比较容易实现的进行自动化,一般在集成阶段进行该版本的自动化监控,平常的话会一直跑线上监控的
180.app自动化你们一般用什么工具定位元素?
Uiautomatorview和appium的客户端
181.您需要一台服务器机器来运行Appium上的测试吗?
不需要服务器机器在Appium上运行测试。 Appium促进了一个2层架构,其中测试机连接到运行Appium的测试服务器并自动化整个事情。您可以在运行测试的同一台机器上运行Appium。
182.使用Appium可能遇到的错误是什么?
错误1:需要以下所需的功能,但不提供:设备名称,platformName
错误2:找不到adb。请使用Android SDK根目录路径设置ANDROID_HOME环境变量
错误3:openqa.selenium.SessionNotCreatedException:无法创建新的会话
错误4:如何在移动应用程序中查找DOM元素或XPath?
183. 简述Appium的原理?
- Appium是使用Node.js平台编写的“HTTP Server”,并使用Webdriver JSON线协议驱动iOS和Android会话。
- 在初始化Appium Server之前,必须在系统上预先安装Node.js 当Appium被下载并安装时,在我们的机器上设置一个暴露REST API的服务器
- 它从客户端接收连接和命令请求,并在移动设备(Android / iOS)上执行该命令,它响应HTTP响应。
- 再次,为了执行此请求,它使用移动测试自动化框架来驱动应用程序的用户界面。 框架像Apple Instruments for iOS(仅适用于Xcode 3.0或更高版本的OS X v10.5及更高版本)适用于Android API的Google UIAutomator 16级或更高版本Selendroid for Android API等级在15以下。
184.如何提高selenium脚本的执行速度?
- 如网速、操作步骤的繁琐程度、页面加载的速度、在脚本中设置的等待时间、运行脚本的线程数等。所以不能单方面追求运行速度的,要确保稳定性,能稳定地实现回归测试才是关键。
- 减少操作步骤,如经过三四步才能打开我们要测试的页面的话,我们就可以直接通过网址来打开,减少不必要的操作。
- 中断页面加载,如果页面加载的内容过多,我们可以查看一下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页面加载。
- 在设置等待时间的时候,可以sleep固定的时间,也可以检测某个元素出现后中断等待也可以提高速度。
- 配置testNG实现多线程。在编写测试用例的时候,一定要实现松耦合,然后在服务器允许的情况下,尽量设置多线程运行,提高执行速度。
185. 什么是持续集成?
持续集成源于极限编程(XP),是一种软件实践,软件开发过程中集成步骤是一个漫长并且无法预测的过程。集成过程中可能会爆发大量的问题,因此集成过程需要尽可能小而多,实际上持续集成讲的是不断的去做软件的集成工作。持续集成,最简单的形式是包括一个监控版本控制(SVN等等)变化的工具。当变化被发觉时,这个工具可以自动的编译并测试你的应用
186.什么是page object设计模式?
通过分离测试对象和测试脚本的抽象来实现的
187. 你觉得自动化测试最大的缺陷是什么?
- 不稳定
- 可靠性
- 不易维护
- 成本与收益
188.Selenium是否支持桌面应用软件的自动化测试。
Selenium不支持桌面软件的自动化测试,Selenium是根据网页元素的属性才定位元素,而其他桌面软件自动化测试工具是根据桌面元素的位置来定位元素,当然现在也有根据桌面元素的属性来定位的。
189. BDD是什么?你了解多少?TDD是什么?
- BDD:行为驱动开发(Behavior Driven Development)
- TDD:测试驱动开发(Test-Driven Development)
190. selenium是否可以直接读取Excel表中测试用例,来执行相关测试
可以的,需要借助第三方库
191.Selenium有哪些组件?
最早的有Selenium IDE,IDE只支持安装在fiefox上一个插件,支持录制自动化脚本。还有
remote RC、Grid 、webdriver。我们一般最重要的就是使用webdriver。
192. 如果元素定位中遇到iFrame内嵌框架,你是如何定位的?如果没有遇到id属性和name属性为空的情况,又是如何处理的?
第一个问题:遇到iFrame内嵌框架里的任何元素,和以往一样写出定位器就可以了,只是在执行脚本的时候,定位器是正确的,但是仍然脚本执行失败,报错“无法找到元素”。原因就是因为这个元素被嵌在了iFrame内嵌框架中(我们也叫子框架),所以需要在定位元素前,先写以下代码,作用是从当前的主框架切换到内嵌框架中,有多种方式:
# 切入frame有3种方式
# (1) 通过frame的id属性或name属性
driver.switch_to.frame('layui-layer-iframe1')
# (2) 通过frame的自然序号,从0开始(第1个iframe)
driver.switch_to.frame(0)
# (3) 通过定位器,配合find_element()方法,定位到框架元素后,再把这个定位到的框架元素入参iframe_loc = '//iframe[@id="layui-layer-iframe1"]'
driver.switch_to.frame(driver.find_element_by_xpath(iframe_loc))
第二个问题:没有id或者name属性,只需要用xpath写出表达式,表达式中利用元素的其他单个或多个属性的组合,只要能够保证元素的唯一性即可,如下例子:
//input[@value="百度一下"]
193.明明自己定位的元素是对的,执行自动化测试脚本时却报错,这时你有几种方法解决此问题?请写出你的解决方法。
(1)元素在iFrame里:先切入iFrame
(2)元素在打开的新窗口里:先切入新窗口
(3)元素在新跳转的页面里,但是因为各种原因,新页面跳转很慢,已经超过了Selenium中对于元素定位的最大等待时间:增加隐式等待时间或对这个元素进行智能等待
隐式等待的代码如下:
from selenium import webdriver
driver = webdriver.Chrome()
# 设置全局等待(即:隐式等待),注意只需要设置一次
driver.implicitly_wait(60) # 延长到60秒
显示等待(智能等待)的代码如下:
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
mobile_phone_loc = (By.XPATH, '//input[@name="mobilephone"]')
elem = WebDriverWait(driver, 60).until(EC.element_to_be_clickable(mobile_phone_loc))
elem.send_keys('13812345678')
194. 简单说出如何用自动化测试脚本实现遍历复选框点击功能(要求全部勾上)。
xPathRadio = '//input[@type="radio"]'
# radiobox复选框对象我们必须使用find_elements方法去定位多个元素(复选框就是多元素)
radioboxes = driver.find_elements_by_xpath(xPathRadio)
# 使用循环遍历的方式,逐个点击这些定位到的元素
for radiobox in radioboxes:
radiobox.click()
195. 写一个自动化脚本,语言不限,要求每执行一次脚本随机生成一个手机号码。
import random # 导入随机数模块
# 一开始,手机号是空的
mobile_phone = ''
# 在中国,手机号码的第一位都是1
phone_num_1 = '1'
# 把第一位生成的数字拼接到手机号
mobile_phone = mobile_phone + phone_num_1
# 根据不同的运营商,手机号码的第2位和第3位都是有固定值的,这里随便列举了几个,放入列表
phone_num_2_to_3 = ['38', '82', '88', '36', '30']
# choices方法可以随机抽取列表里的元素,从而生成第二三位手机号码,并拼接到手机号
phone_num_2_to_3 = random.choices(phone_num_2_to_3)[0]
mobile_phone = mobile_phone + phone_num_2_to_3
# 最后8个数字,循环生成
for i in range(8):
# randint方法可以随机产生0~9的值,但是为了拼接字符串,我们用str()方法转换
phone_num = str(random.randint(0, 9))
# 每一次循环都会生成一个数字,并且继续拼接到现有的电话号码里
mobile_phone = mobile_phone + phone_num
# 打印最终生成的手机号码
print(mobile_phone)
196. 你对单元测试框架了解多少
unittest、testng、nose、pytest、
197.深拷贝和浅拷贝的区别?
- 浅拷贝:浅拷贝是对于一个对象的顶层拷贝。简单理解:拷贝了引用,并没有拷贝内容(对象)
- 深拷贝:对于一个对象所有层次的拷贝(递归)
- 全都是不可变类型的数据:copy.copy、copy.deepcopy都是引用指向
- 包含不可变类型的数据:deepcopy是深拷贝,copy.copy是指向引用
- 不可变对象中包含可变对象:copy.copy是引用指向,deepcopy是开辟新的内存地址,即深层拷贝
198.web/app动态元素如何定位
对于属性值动态:
用xpath+模糊匹配定位方式:
- driver.find_element_by_xpath(“//标签名[contains(@属性,‘部分片段值’)]”)
- driver.find_element_by_xpath(“//标签名[starts-with(@属性,‘头部片段值’)]”)
- driver.find_element_by_xpath(“//标签名[ends-with(@属性,‘尾部片段值’)]”)
- 属性可以为 id、name、tag_name、link_text、partial_link_text等
用模糊组合定位:
driver.find_element_by_xpath(“//标签名[contains(@属性1,‘片段值’) and @属性2=‘属性值’ and …]")
位置动态:
采用兄弟节点/父子节点方式定位
//*[contains(@resource-id,"fixedWrap")]//*[@content-desc="自选"]
//android.widget.LinearLayout[contains(@resource-id,"home_item_layout_bg") and @index="1"]
//*[contains(@resource-id,"myfund_name_text_view") and @text="${fund_name}"]/../..//and
199、web自动化时,定位元素的方式有哪些?
答:web自动化有8种元素定位方式。与name有关的有3种:name、class_name、tag_name与link相关的有两种:link_text、partitial_link_text。还有一种是用id来定位。剩下两种是xpath和css定位,它们用元素路径来定位的。
如果元素存在id属性,我一定使用id,因为简单方便,定位最快。其次是Xpath和css,因为很多情况下html标签没有id属性。
200、如何去定位属性动态变化的元素?
答:先去找该元素不变的属性,要是都变,那就找不变的父元素,用层级定位(以不变应万变)
201、启动浏览器的时候用到的是哪个webdriver协议?
答:http协议
202、XPath中使用单斜杠和双斜杠有什么区别?
答:单斜杠表示用绝对路径定位,双斜杠表示用相对路径定位。绝对路径就是从html根目录开始表示的元素路径。相对路径就是选择一个元素作为参考点,相对这个参考点元素开始表示的元素路径。
203、Selenium中有哪些验证点?
答:Selenium主要有3种验证点
① 检查页面标题
② 检查某些文字
③ 检查某些元素(文本框,下拉菜单,表等)
204、如何清除中文本框的内容?
答:使用clear()方法
driver.find_element().clear()
205、如何模拟浏览器的前后移动?
答:
driver.back() # 后退
driver.forward() # 前进
206、find_element()和find_elements()方法有什么区别
答:两个都是查找元素的方式
findelement()查找一个页面元素,只会返回WebElement对象
findelements()查找页面是所有符合匹配的元素,返回元素集合
207、如何判断case是否通过?
答:使用断言,与预期结果比较
208、等待元素加载的方式有几种?
答:有3种,强制等待、隐式等待、显式等待
209.自己开发的自动化框架吗?为啥要开发这么一个框架呢?市面上很多自动化平台为什么不用,却要自己搭建?想过投入产出比吗?
答:自己搭建,主要是项目每次上线之前,回归重复的功能占用大量迭代时间,通过自动化框架可以节约时间,市面上的测试平台得自己部署和维护,出现问题需要自己去查底层代码解决,学习门槛较高,并且很多功能几乎用不到,自己搭建的自动化框架,开发相对简单,上手特别快,特别符合当前的项目需要。
210.说下接口自动化分别用了哪些框架,怎么实现的,你主要负责哪些部分?
答:我的主要是 springboot、testng、mysql、okhttpcilent、mq 那套东西。
211.你们这套框架最难的技术点有哪些?搭建框架过程中遇到哪些问题,怎么解决的?
答:难点技术有很多,譬如失败用例重跑机制,异步接口校验返回结果,场景测试中前置依赖接口怎么处理,涉及到 mq 怎么操作等等
212.流程场景怎么设计用例的?假如流程比较长,你怎么保障前面流程成功?
答:可以引入失败用例重跑机制 testng 有接口实现、简单接口,我们可以直接在数据库造数据。
213.数据放哪的?数据驱动怎么做的?关键字驱动怎么做的?
答:看情况,如果是灵活的数据,建议放在 excel 里面,做数据驱动,如果是账号、密码这种修改很少的数据,可以考虑放在配置文件中,如果是那种一成不变的可以写死(尽量别这么做)。
关键字驱动:测试用例的步骤 (元素) 和用例分离。关键字驱动表示把项目中的一些逻辑封装成关键字 (一个函数名)。例如 login、 register、order 进行设置变量(Set Viriable),调用不同的关键字组合实现不同的业务逻辑,从而驱动测试用例执行。
数据驱动:数据和用例步骤分离,通过 excel、yaml 等文件保存数据。数据驱动是把测试用例里面的数据提取到 excel 或者 yam 文件里面,然后通过改变 excel 或 yaml 中的数据驱动测试用例执行。
214.这套框架覆盖了开发多少业务代码,怎么统计出来的?多少用例,跑一次多长时间?
答:主要覆盖所负责业务的主要流程和一些常见的异常流程,通过 jacoco 覆盖率统计工具统计出来的,用例大概有 100+ 个,涉及到 30 多个接口,跑一次将近 2 分钟左右。
7.开发修改接口和你的自动化代码怎么同步修改,以保证自动化测试代码不报错?
215.你们公司性能测试怎么做的,说一下流程?
答:基本流程就是产研测三方开会、一起定下 tps 基准值,测试设计性能测试计划和测试用例、用例评审、进行压测、观测数据找出性能瓶颈,调优持续压测等等
216.TPS 上不去什么原因,怎么排查?响应时间太长怎么分析?
答:通过各种监控技术如 prometheus 、skywalking 等 观测系统瓶颈,基本上分为一下几个方面 带宽、连接池、硬件、垃圾回收机制、数据库等方面去分析。
217.线程阻塞和死锁问题怎么去定位分析,有什么现象?
答:在发生死锁之后,程序卡住没有任何反应,但程序仍在运行,因此需要借助一些命令来排查,用 JDK 自带的命令 jstack -pid 去查看线程信息,jstack 很快就帮我们找到了死锁的位置(在实际运行中,往往 dump 一次信息,还不足以确认问题,建议多 dump 几次,如果每次 dump 都指向同一个问题,那么就可以确定是这个问题导致的线程死锁)
218.内存泄露和内存溢出有什么区别?分别会有什么现象?怎么定位分析?
答:内存溢出(Out Of Memory):就是申请内存时,JVM 没有足够的内存空间。通俗说法就是去蹲坑发现坑位满了。
内存泄露(Memory Leak):就是申请了内存,但是没有释放,导致内存空间浪费,通俗点就是占着那啥不那啥。
219.压测线上环境都会遇到什么问题,数据隔离怎么做的?如何减小对生产影响?
答:脏数据影响真实的业务响应和数据,可以考虑落入影子库,mock 对象、或者数据带有明显标识等手段。
220.测试过程中都发现了哪些性能问题,怎么定位分析的?优化方案是什么?
答:每个人准备的问题不一致,我的就是遇到了 jvm fullgc 频繁导致接口响应时间慢,通过 java 一些命令定位分析发现 jvm 配置不合理。
221.项目架构是怎么样的?简单描述或者画图
答:微服务架构,两个入口、公众号和 web 端,请求先经过 Nginx 做负载均衡、流量均匀的打到项目的 api 网关,后面就是项目的微服务架构(采购单、供应商、库存、仓库物流等等)如果对后端采用的架构熟悉,可以顺带提一下,比如用了 springcloud 全家桶、eureka 做服务注册和发现,mq 实现异步解耦,redis 缓存有效减少数据库交互等等。
222.正向代理和反向代理区别?Nginx 了解吗?负载均衡算法
答:Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、POP3、SMTP 代理服务器;Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。
正向代理:服务器位于客户端和服务器之间,为了从服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端。这里客户端需要要进行一些正向代理的设置的。举例:***,正向代理中被代理的是客户端的请求
反向代理:客户端对代理是无感知的,客户端不需要任何配置就可以访问,客户端将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
负载均衡算***询、随机、最少连接、hash、加权等,说一下具体使用场景
223.mq 是如何测试的?你项目中怎么应用的?mq 的优缺点?为什么使用 mq?怎么保障 mq 消息的有序性、幂等性、可靠性(不丢失)
答:消息中间件 具备解耦、削峰、异步的作用,具体可自行百度
224.为什么使用 redis,redis 五种数据类型,如何测试 redis 的,项目中如何应用的?
答:基于内存查询效率高,高并发情况下保护数据库,string、hash、list、set、zset 五中数据类型,项目中主要用于请求 token 保存和失效,防重分布式锁,冷数据(改动量小)保存,幂等性校验等等。
225.都发现过哪些缓存方面的 bug,怎么定位的?
答:缓存和数据库数据不一致,缓存穿透,击穿,雪崩等
假如测试任务重,时间紧,但是人手不够你怎么处理?
答:向上反馈真实情况、加派人手、争取更多时间或削减不必要需求,测试中要充分理解需求,设计用例加强评审,需求排优先级等等
226.假如开发不认可你提出 bug,怎么办?
答:自己重新复现一下提出的 bug,如果确实是 bug,可以和开发当面沟通清楚,沟通无效则向上反馈。
227.线上有碰到过漏测的 bug 吗?怎么处理的
答:碰到过,可以说一个不大不小的漏测案例(前提是别人的 bug 才导致的),重点说下防止下次漏测措施。
228.职业规划,离职原因。
答:这个开发性题目,离职原因尽量别说上家公司坏话。
获取方式:
点击下方小卡片入群,回复面试题 ,获取《18万字228道软件测试经典面试题总结(附答案)》文档pdf,背题更方便,一文在手,面试我有。
来都来了,别走了呗