🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快
前面看到了一些面试题,总感觉会用得到,但是看一遍又记不住,所以我把面试题都整合在一起,都是来自各路大佬的分享,为了方便以后自己需要的时候刷一刷,不用再到处找题,今天把自己整理的这些面试题分享出来。
一、京东软件测试岗面试30题(干货)
1、黑盒测试的测试用例常见设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
1)等价类划分: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类.
2)边界值分析法:是对等价类划分方法的补充。测试工作经验告诉我,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.
使用边界值分析方法设计测试用例,首先应确定边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.
3)错误猜测法:基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法.
错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例. 例如, 在单元测试时曾列出的许多在模块中常见的错误. 以前产品测试中曾经发现的错误等, 这些就是经验的总结. 还有, 输入数据和输出数据为0的情况. 输入表格为空格或输入表格只有一行. 这些都是容易发生错误的情况. 可选择这些情况下的例子作为测试用例.
4)因果图方法:前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系, 相互组合等. 考虑输入条件之间的相互组合,可能会产生一些新的情况. 但要检查输入条件的组合不是一件容易的事情, 即使把所有输入条件划分成等价类,他们之间的组合情况也相当多. 因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例. 这就需要利用因果图(逻辑模型). 因果图方法最终生成的就是判定表. 它适合于检查程序输入条件的各种组合情况.
5)正交表分析法:可能因为大量的参数的组合而引起测试用例数量上的激增,同时,这些测试用例并没有明显的优先级上的差距,而测试人员又无法完成这么多数量的测试,就可以通过正交表来进行缩减一些用例,从而达到尽量少的用例覆盖尽量大的范围的可能性。
6)场景分析方法:指根据用户场景来模拟用户的操作步骤,这个比较类似因果图,但是可能执行的深度和可行性更好。
7)状态图法:通过输入条件和系统需求说明得到被测系统的所有状态,通过输入条件和状态得出输出条件;通过输入条件、输出条件和状态得出被测系统的测试用例。
8)大纲法:大纲法是一种着眼于需求的方法,为了列出各种测试条件,就将需求转换为大纲的形式。大纲表示为树状结构,在根和每个叶子结点之间存在唯一的路径。大纲中的每条路径定义了一个特定的输入条件集合,用于定义测试用例。树中叶子的数目或大纲中的路径给出了测试所有功能所需测试用例的大致数量。
2、详细的描述一个测试活动完整的过程。(供参考,本答案主要是瀑布模型的做法)
项目经理通过和客户的交流,完成需求文档,由开发人员和测试人员共同完成需求文档的评审,评审的内容包括:需求描述不清楚的地方和可能有明显冲突或者无法实现的功能的地方。项目经理通过综合开发人员,测试人员以及客户的意见,完成项目计划。然后SQA进入项目,开始进行统计和跟踪
开发人员根据需求文档完成需求分析文档,测试人员进行评审,评审的主要内容包括是否有遗漏或双方理解不同的地方。测试人员完成测试计划文档,测试计划包括的内容上面有描述。
测试人员根据修改好的需求分析文档开始写测试用例,同时开发人员完成概要设计文档,详细设计文档。此两份文档成为测试人员撰写测试用例的补充材料。
测试用例完成后,测试和开发需要进行评审。
测试人员搭建环境
开发人员提交第一个版本,可能存在未完成功能,需要说明。测试人员进行测试,发现BUG后提交给BugZilla。
开发提交第二个版本,包括Bug Fix以及增加了部分功能,测试人员进行测试。
重复上面的工作,一般是3-4个版本后BUG数量减少,达到出货的要求。
如果有客户反馈的问题,需要测试人员协助重现并重新测试。
3、BUG管理工具的跟踪过程(用BugZilla为例子)
测试人员发现了BUG,提交到Bugzilla中,状态为new,BUG的接受者为开发接口人员
开发接口将BUG分配给相关的模块的开发人员,状态修改为已分配,开发人员和测试确认BUG,如果是本人的BUG,则设置为接收;如果是别的开发人员的问题,则转发出去,由下一个开发人员来进行此行为;如果认为不是问题,则需要大家讨论并确认后,拒绝这个BUG,然后测试人员关闭此问题。
如果开发人员接受了BUG,并修改好以后,将BUG状态修改为已修复,并告知测试在哪个版本中可以测试。
测试人员在新版本中测试,如果发现问题依然存在,则拒绝验证;如果已经修复,则关闭BUG。
4、您认为在测试人员同开发人员的沟通过程中,如何提高沟通的效率和改善沟通的效果?维持测试人员同开发团队中其他成员良好的人际关系的关键是什么?
尽量面对面的沟通,其次是能直接通过电话沟通,如果只能通过Email等非及时沟通工具的话,强调必须对特性的理解深刻以及能表达清楚。
运用一些测试管理工具如TestDirector进行管理也是较有效的方法,同时要注意在TestDirector中对BUG有准确的描述。
在团队中建立测试人员与开发人员良好沟通中注意以下几点:
一真诚、二是团队精神、三是在专业上有共同语言、四是要对事不对人,工作至上
当然也可以通过直接指出一些小问题,而不是进入BUG Tracking System来增加对方的好感。
5、你对测试最大的兴趣在哪里?为什么?
回答这个面试题,没有固定统一的答案,但可能是许多企业都会问到的。提供以下答案供考:
最大的兴趣,感觉这是一个有挑战性的工作;
测试是一个经验行业,工作越久越能感觉到做好测试的难度和乐趣
通过自己的工作,能使软件产品越来越完善,从中体会到乐趣
回答此类问题注意以下几个方面:
尽可能的切合招聘企业的技术路线来表达你的兴趣,例如该企业是数据库应用的企业,那么表示你的兴趣在数据库的测试,并且希望通过测试提升自己的数据库掌握能力。
表明你做测试的目的是为了提升能力,也是为了更好的做好测试;提升能力不是为了以后转开发或其他的,除非用人企业有这样的安排。
不要过多的表达你的兴趣在招聘企业的范畴这外。比如招聘企业是做财务软件的,可是你表现出来的是对游戏软件的兴趣;或招聘是做JAVA开发的,而你的兴趣是在C类语言程序的开发。
6、你自认为测试的优势在哪里?
该面试也没有固定不变的答案,但可参考以下几点,并结合自身特点:
有韧性、有耐心、做事有条理性、喜欢面对挑战、有信心做好每一件事情、较强的沟通能力、从以前的经理处都得到了很好的评价表明我做的很好
7、简述你在以前的工作中做过哪些事情,比较熟悉什么。参考答案如下。
我过去的主要工作是系统测试和自动化测试。在系统测试中,主要是对BOSS系统的业务逻辑功能,以及软交换系统的Class 5特性进行测试。性能测试中,主要是进行的压力测试,在各个不同数量请求的情况下,获取系统响应时间以及系统资源消耗情况。自动化测试主要是通过自己写脚本以及一些第三方工具的结合来测试软交换的特性测试。
在测试中,我感觉对用户需求的完全准确的理解非常重要。另外,就是对BUG的管理,要以需求为依据,并不是所有BUG均需要修改。
测试工作需要耐心和细致,因为在新版本中,虽然多数原来发现的BUG得到了修复,但原来正确的功能也可能变得不正确。因此要注重迭代测试和回归测试。
8、在C/C++中static有什么用途?(请至少说明两种)
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
-
在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
-
在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用
9、引用与指针有什么区别?
-
引用必须被初始化,指针不必。
-
引用初始化以后不能被改变,指针可以改变所指的对象。
-
不存在指向空值的引用,但是存在指向空值的指针。
10、Internet采用哪种网络协议?该协议的主要层次结构?Internet物理地址和IP地址转换采用什么协议?
TCP/IP协议主要层次结构为: 应用层/传输层/网络层/数链路层。
ARP (Address Resolution Protocol)(地据址解析协议)
11、说说你对集成测试中自顶向下集成和自底向上集成两个策略的理解,要谈出它们各自的优缺点和主要适应于哪种类型测试;
自顶向下集成
优点:较早地验证了主要控制和判断点;按深度优先可以首先实现和验证一个完整的软件功能;功能较早证实,带来信心;只需一个驱动,减少驱动器开发的费用;支持故障隔离。
缺点:柱的开发量大;底层验证被推迟;底层组件测试不充分。
适应于产品控制结构比较清晰和稳定;高层接口变化较小;底层接口未定义或经常可能被修改;产口控制组件具有较大的技术风险,需要尽早被验证;希望尽早能看到产品的系统功能行为。
自底向上集成
优点:对底层组件行为较早验证;工作最初可以并行集成,比自顶向下效率高;减少了桩的工作量;支持故障隔离。
缺点:驱动的开发工作量大;对高层的验证被推迟,设计上的错误不能被及时发现。
适应于底层接口比较稳定;高层接口变化比较频繁;底层组件较早被完成。
12、软件验收测试包括正式验收测试、alpha测试、beta测试三种测试。
13、系统测试的策略有很多种的,有性能测试、负载测试、强度测试、易用性测试、安全测试、配置测试、安装测试、文档测试、故障恢复测试、用户界面测试、恢复测试、分布测试、可用性测试。
14、设计系统测试计划需要参考的项目文档有软件测试计划、软件需求工件、和迭代计划
15.通过画因果图来写测试用例的步骤为___、、、___及把因果图转换为状态图共五个步骤。 利用因果图生成测试用例的基本步骤是:
§ 分析软件规格说明描述中,哪些是原因(即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。
§ 分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的是什么关系? 根据这些关系,画出因果图。
§ 由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号标明约束或限制条件。 § 把因果图转换成判定表。
§ 把判定表的每一列拿出来作为依据,设计测试用例。
16、请说出这些测试最好由那些人员完成,测试的是什么?
代码、函数级测试一般由白盒测试人员完成,他们针对每段代码或函数进行正确性检验,检查其是否正确的实现了规定的功能。
模块、组件级测试主要依据是程序结构设计测试模块间的集成和调用关系,一般由测试人员完成。
系统测试在于模块测试与单元测试的基础上进行测试。了解系统功能与性能,根据测试用例进行全面的测试。
17、 设计测试用例时应该考虑哪些方面,即不同的测试用例针对那些方面进行测试?
设计测试用例时需要注意的是,除了对整体流程及功能注意外,还要注意强度测试、性能测试、压力测试、边界值测试、稳定性测试、安全性测试等多方面。(测试用例需要考虑的四个基本要素是输入、输出、操作和测试环境;另外,测试用例需要考虑的是测试类型(功能、性能、安全......),这部分可以参照TP做答。此外,还需要考虑用例的重要性和优先级)
18、 在windows下保存一个文本文件时会弹出保存对话框,如果为文件名建立测试用例,等价类应该怎样划分?
单字节,如A;双字节, AA、我我;特殊字符 /'。';、=-等;保留字,如com;文件格式为8.3格式的;文件名格式为非8.3格式的;/,,*等九个特殊字符。
19、假设有一个文本框要求输入10个字符的邮政编码,对于该文本框应该怎样划分等价类?
特殊字符,如10个*或¥;英文字母,如ABCDefghik;小于十个字符,如123;大于十个字符,如11111111111;数字和其他混合,如123AAAAAAA;空字符;保留字符
20、软件测试项目从什么时候开始?为什么?
软件测试应该在需求分析阶段就介入,因为测试的对象不仅仅是程序编码,应该对软件开发过程中产生的所有产品都测试,并且软件缺陷存在放大趋势.缺陷发现的越晚,修复它所花费的成本就越大.
21、什么是回归测试?
回归测试: (regression testing): 回归测试有两类:用例回归和错误回归;用例回归是过一段时间以后再回头对以前使用过的用例在重新进行测试,看看会重新发现问题。错误回归,就是在新版本中,对以前版本中出现并修复的缺陷进行再次验证,并以缺陷为核心,对相关修改的部分进行测试的方法。
22、单元测试、集成测试、系统测试的侧重点是什么?
单元测试针对的是软件设计的最小单元--程序模块(面向过程中是函数、过程;面向对象中是类。),进行正确性检验的测试工作,在于发现每个程序模块内部可能存在的差错.一般有两个步骤:人工静态检查\动态执行跟踪
集成测试针对的是通过了单元测试的各个模块所集成起来的组件进行检验,其主要内容是各个单元模块之间的接口,以及各个模块集成后所实现的功能.
系统测试针对的是集成好的软件系统,作为整个计算机系统的一个元素,与计算机硬件\外设\某些支持软件\数据和人员等其他系统元素结合在一起,要在实际的运行环境中,对计算机系统进行一系列的集成测试和确认测试.
23、一个测试工程师应具备那些素质?
1、责任心2、沟通能力3、团队合作精神4、耐心、细心、信心5、时时保持怀疑态度,并且有缺陷预防的意识6、具备一定的编程经验
24、你所了解的的软件测试类型都有哪些,简单介绍一下。
按测试策略分类:1、静态与动态测试2、黑盒与白盒测试 3、手工和自动测试 4、冒烟测试 5、回归测试;
按测试阶段分类:单元测试、集成测试、系统测试;
其他常见测试方法:1、功能测试 2、性能测试 3、压力测试 4、负载测试 5、易用性测试 6、安装测试 7、界面测试 8、配置测试 9、文档测试 10、兼容性测试 11、安全性测试 12、恢复测试
25、你认为做好测试计划工作的关键是什么?
明确测试的目标,增强测试计划的实用性
编写软件测试计划得重要目的就是使测试过程能够发现更多的软件缺陷,因此软件测试计划的价值取决于它对帮助管理测试项目,并且找出软件潜在的缺陷。因此,软件测试计划中的测试范围必须高度覆盖功能需求,测试方法必须切实可行,测试工具并且具有较高的实用性,便于使用,生成的测试结果直观、准确
坚持"5W"规则,明确内容与过程
"5W"规则指的是"What(做什么)"、"Why(为什么做)"、"When(何时做)"、"Where(在哪里)"、"How(如何做)"。利用"5W"规则创建软件测试计划,可以帮助测试团队理解测试的目的(Why),明确测试的范围和内容(What),确定测试的开始和结束日期(When),指出测试的方法和工具(How),给出测试文档和软件的存放位置(Where)。
采用评审和更新机制,保证测试计划满足实际需求
测试计划写作完成后,如果没有经过评审,直接发送给测试团队,测试计划内容的可能不准确或遗漏测试内容,或者软件需求变更引起测试范围的增减,而测试计划的内容没有及时更新,误导测试执行人员。
分别创建测试计划与测试详细规格、测试用例
应把详细的测试技术指标包含到独立创建的测试详细规格文档,把用于指导测试小组执行测试过程的测试用例放到独立创建的测试用例文档或测试用例管理数据库中。测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。
26、您认为做好测试用例设计工作的关键是什么?
白盒测试用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果
黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试,以最少的用例在合理的时间内发现最多的问题
27、你的测试职业发展目标是什么?
测试经验越多,测试能力越高。所以我的职业发展是需要时间累积的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年累积测试经验,不断的更新自己改正自己,做好测试任务。
28、测试结束的标准是什么?
从微观上来说,在测试计划中定义,比如系统在一定性能下平稳运行72小时,目前Bug Tracking System中,本版本中没有一般严重的BUG,普通BUG的数量在3以下,BUG修复率90%以上等等参数,然后由开发经理,测试经理,项目经理共同签字认同版本Release。
如果说宏观的,则是当这个软件彻底的消失以后,测试就结束了。
29、一套完整的测试应该由哪些阶段组成?
可行性分析、需求分析、概要设计、详细设计、编码、单元测试、集成测试、系统测试、验收测试
30、您是否了解以往所工作的企业的软件开发过程?如果了解,请试述一个完整的开发过程需要完成哪些工作?分别由哪些不同的角色来完成这些工作?您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?
开发过程---需求调研(需求人员)、需求分析(需求人员)、概要设计(设计人员)、详细设计(设计人员)、编码(开发人员)
测试过程---需求评审、系统测试设计、概要设计评审、集成测试设计、详细设计评审、单元测试设计、测试执行
测试工作的整个过程都做过,擅长做测试设计
过程决定质量,软件的过程改进正是为了提高软件的质量,将过往的种种经验教训积累起来。
二、软件测试经典面试题都在这里,前面5题必问
第一题:你为什么选择软件测试这个行业?
答:因为我喜欢软件测试,所以我选择软件测试作为职业。我觉得软件测试是一个比软件编程更具挑战性和创造性的职业。(不要说自己是开发做不下去了,才选择做软件测试,也不要说不喜欢敲代码)
第二题:谈谈你对软件测试的理解?
答:软件测试是对软件功能进行验证并生成具有良好标准的软件产品而没有缺陷,错误和故障的过程。
第三题:测试日志是什么?
答:测试日志包含完整的软件测试过程中执行的操作列表,并从测试日志中可以知道测试是通过还是失败。
第四题:手动测试和自动化测试之间的区别?
答:手动测试由用户手动执行,自动化测试在预脚本的帮助下自动完成。自动化测试更加快速,安全且具有成本效益,而手动测试则更慢,更不安全。
第五题:白盒和黑盒测试之间的区别?
答:白盒测试是一种软件测试方法,用户必须知道内部结构的实现,而在黑盒测试中,不需要知道用户的内部工作模块。在白盒测试中,用户应该具备编程技能,而在黑盒测试中,用户不需要编程技能。
第六题:黑盒测试有什么好处?
答:黑盒测试可以由几乎没有编程知识的用户完成,并且比白盒测试过程快得多。在软件产品中可能会导致很少的错误,因为软件的每个组件和模块都未经过测试。
第七题:白盒测试的优点是什么?
答:白盒测试可确保更高质量的软件产品,因为每个组件都由程序员进行测试。这是一个漫长的过程,需要比黑盒测试更多的时间。
第八题:什么是回归测试?
答:当软件被更改或修改时,重新测试以检查软件功能是否正常工作,并确保软件中没有无意的错误。这个测试过程称为回归测试。
第九题:什么是功能测试?
答:功能测试是针对客户规格的测试和验证过程,并满足客户的所有要求。
第十题:测试用例和测试脚本两者有什么关系?
三、软件测试常见的面试题
1、测试分为哪几个阶段?
一般来说分为5个阶段:单元测试、集成测试、确认测试、系统测试、验收测试。
2、软件测试方法有哪些?
黑盒、白盒、灰盒。
3、数据库中sum和count的区别以及使用
一般面试会把sum与order by 分组一起使用
count:统计你查询出来的数据记录条数:select count(*) from 学生表;
sum:求和:select sum(chengji) from 学生表 where name='张三';
4、设计一个模块测试用例
考察面试者的经验、用例设计能力、思维、以及掌握的测试方法是否全面
从功能测试、接口测试、异常测试、性能、安全测试方面分析
5、pytest如何管理测试用例?
掌握案例规则,如以test开头,类以Test命名等
案例文件执行单个py如何执行,多个文件夹的管理方式
6、你为什么选择软件测试行业
因为之前了解软件测试这个行业,觉得他的发展前景很好。
(千万不要说自己是开发干不下去了才转的测试!)
7、软件测试类型有哪些?
测试类型有:功能测试、性能测试、界面测试
8、什么是测试用例 什么是测试脚本 两者的关系是什么?
为实施测试而向被测试系统提供的输入数据、操作或各种环境设置以及期望结果的一个特定的集合。
测试脚本是为了进行自动化测试而编写的脚本。
测试脚本的编写必须对应相应的测试用例
9、怎样写测试计划和测试用例?
简单点,测试计划里应有详细的测试策略和测试方法,合理详尽的资源安排等,至于测试用例,那是依赖于需求(包括功能与非功能需求)是否细化到功能点,是否可测试等。
10、软件测试的策略是什么?
软件测试策略:在一定的软件测试标准、测试规范的指导下,依据测试项目的特定环境约束而规定的软件测试的原则、方式、方法的集合。
软件测试常见的笔试题:
判断题(Y=对,N=错)
1.软件测试的目的是尽可能多的找出软件的缺陷。(Y)
2.Beta测试是验收测试的一种。(Y)
3.验收测试是由最终用户来实施的。(N)
4.项目立项前测试人员不需要提交任何工件。(Y)
5.单元测试能发现约80%的软件缺陷。(Y)
6.代码评审是检查源代码是否达到模块设计的要求。(N)
7.自底向上集成需要测试员编写驱动程序。(Y)
8.负载测试是验证要检验的系统的能力最高能达到什么程度。(N)
9.测试人员要坚持原则,缺陷未修复完坚决不予通过。(N)
10.代码评审员一般由测试员担任。(N)
11.我们可以人为的使得软件不存在配置问题。(N)
12.集成测试计划在需求分析阶段末提交。(N)
选择题
1、下列逻辑覆盖测试方法中,覆盖能力最强的是(D)
A.语句覆盖 B.判定覆盖 C.条件覆盖 D.条件组合覆盖
2、关于黑盒测试与白盒测试的区别,下列说法正确的是(A)
A.白盒测试侧重于程序结构,黑盒测试侧重于功能
B.白盒测试可以使用自动测试工具,黑盒测试不能使用工具 测试试题100道精讲
C.白盒测试需要开发人员参与,黑盒测试不需要
D.黑盒测试比白盒测试应用更广泛
3、关于HTTP协议中状态码的表示,下列说法错误的是(D)
A.1**:表示客户端错误
B.2*:表示请求成功地接收 *
C.3**:表示完成请求,客户需要进一步细化请求
D.4**:表示服务器错误
4、在Linux中.要解包bugzilla.tar.gz并详细报告tar命令处理的文件名,应使 用命令(A)
A.tar --xvzf bugzilla.tar.gz B.tar --cvzf bugzilla.tar.gz
C.tar --cvzf bugzilla.tar.gz D.tar --cxvf bugzilla.tar.gz
5、在Redhat linux 9中,要安装一个软件包,perl.i386.rpm,并且在安装时以#号显示安装进度,应该使用的命令是(A)
A.rpm --ih perl.i386.rpm B.rpm --i perl.i386.rpm
C.rpm --e perl.i386.rpm D.rpm --V perl.i386.rpm
6、在Linux的vi编辑器中,想要不保存修改而退出vi。需要使用命令是(C)
A.:qa B.:qw C.:q! D.:!q
7、某数据库中存放两个数据表:教师表(教师编号,教师姓名)和课 程表(课程号,课程名,教师编号),若要快速查出某位教师所授的 课程,下列建立索引方式中正确的是(C)
A.在教师表上按教师编号建立索引
B.在课程表上按课程号建立索引
C.在课程表上按教师编号建立索引
D.在教师表上按教师姓名建立索引
8、要查询book表中所有书名(bookname)中包含" 计算机"的书籍情况,可使用语句(B)
A. SELECT * FROM book WHERE bookname LIKE '计算机'
B. SELECT * FROM book WHERE book_name LIKE '%计算机%'
C. SELECT * FROM book WHERE book_name='计算机'
9、下列关于alpha测试的描述中正确的是:(AD)
A.alpha测试需要用户代表参加
B.alpha测试不需要用户代表参加
C.alpha测试是系统测试的一种
D.alpha测试是验收测试的一种
10、软件测试计划评审会需要哪些人员参加?(ABCD)
A.项目经理
B.SQA负责人
C.配置负责人
D.测试组
四、全网最全软件测试面试题含答案(性能测试+功能测试+接口测试+自动化测试)
性能测试方面
简述性能测试流程?
1.分析性能需求。
2.制定性能测试计划。
3.编写测试用例
4.搭建测试环境,准备好测试数据
5.编写性能测试脚本
6.性能测试脚本调优。
7.设计测试场景。
8.分析测试结果。
9.回归性能测试。
10.编写测试报告。
你们性能测试在什么环境什么时间执行?
我们会搭建一套独立的性能测试环境进行测试,时间方面的话,
基准测试:功能测试之后,系统比较稳定的时候再做。
负载测试:夜深人静,系统没人用的时候
think_time的作用是什么?
模拟真实生产用户操作,考察对服务器所造成的影响。
在确定性能测试结果可信后,如果发现以下问题,按下面提供的思路来定位问题
有验证码的功能,怎么做性能测试?
1、将验证码暂时屏蔽,完成性能测试后,再恢复
2、使用万能的验证码
性能测试指标有哪些?
- 响应时间
- 吞吐量
- cpu
- 内存
- io
- disk
功能测试方面
你对软件测试这个行业的看法,为什么要选择软件测试?
软件测试是一个很有前途的职业,我在该行业有了比较多的经验,我觉得我很适合这个职位,也想坚定地走下去。
如果测试过程中发现bug但是开发人员认为不是bug,你应当怎么处理?
首先,将问题提交到缺陷管理平台里面进行备案登记。然后,要获取判断的依据和标准:
根据需求说明书、产品说明、设计文档等,确认实际结果是否与计划有不一致的地方,提供缺陷是否确认的直接依据;
如果没有文档依据,可以根据类似软件的一般特性来说明是否存在不一致的地方,来确认是否是缺陷;
根据用户的一般使用习惯,来确认是否是缺陷;
与设计人员、开发人员和产品经理等相关人员探讨,确认是否是缺陷。
合理的论述,向测试经理说明自己的判断的理由,注意客观、严谨,不参杂个人情绪。等待产品经理做出最终决定,如果仍然存在争议,跟测试经理确认,在发上线报告时把这个bug的风险遗留,预警,让全项目方的人都知悉这个情况。
设计测试用例的方法有哪些?
等价类、边界值、判定表、因果图。
软件测试的策略是什么?
软件测试策略:在一定的软件测试标准、测试规范的指导下,依据测试项目的特定环境约束而规定的软件测试的原则、方式、方法的集合。
测试人员在软件开发过程中的任务是什么?
(1)尽可能早的找出系统中的Bug;
(2)避免软件开发过程中缺陷的出现;
(3)衡量软件的品质,保证系统的质量;
(4)关注用户的需求,并保证系统符合用户需求。总的目标是:确保软件的质量。
接口自动化测试方面
get和post的区别?
Get请求,浏览器会把http header和data一起发送,服务器返回200响应码
Psot请求,浏览器先发送header,服务器响应100(continue),然后再发送data,服务器返回200响应码
Post的安全性比get高
接口自动化中的关联怎么处理?
把上一个请求返回的结果传入到下一个请求的参数中,将请求的结果反射到一个类属性(使用setattr()函数),下一个请求去调用这个类属性
自动化测试怎么校验结果?
断言 ,预期结果与实际结果对比
数据库校验,根据测试场景来查询数据库里的数据和请求之前的数据进行比对
说一说你对于参数化和数据驱动的理解?
这个问题牵扯到自动化测试中很重要的两个概念:参数化和数据驱动。其实在我看来他们两个是一回事--测试脚本与数据的分离。举个例子:你的登录脚本原本固定写了一组测试数据:用户名、密码。每次改数据还要改脚本,我要把数据和脚本分离出来,那就把用户名、密码提取到外面,最好放在一个外部文件中,这个就叫参数化。
对于性能测试来说,我想保证每个虚拟用户都使用不同的用户名和密码登录,这样更加贴近真实的业务场景。对于自动化测试来说,我想测试多种数据组合--比如各种类型的用户名、密码。不管是哪种场景,都要有多组数据,但登录操作流程固定不变。这个就叫数据驱动。
对于一般开发语言的单元测试框架都有数据驱动的功能,比如Python的ddt模块,TestNG的DataProvider注解。
接口产生的垃圾数据如何清理?
跟上面一样,造数据和数据清理,需用python连数据库了,做增删改查的操作
测试用例前置操作,setUp做数据准备
后置操作,tearDown做数据清理
WebUI自动化测试方面
selenium中如何判断元素是否存在?
没有提供原生的方法判断元素是否存在,一般我们可以通过定位元素+异常捕获的方式判断
selenium中hidden或者是display = none的元素是否可以定位到?
不可以,想点击的话,可以用js去掉dispalay=none的属性
如何提高selenium脚本的执行速度?
1.优化测试用例。
2.减少不必要的操作步骤。
3.中断页面加载。
4.使用Selenium grid。
什么是持续集成?
频繁的将代码集成到主干,持续性的进行项目的构架,以便能能够快速发现错误,防止分支大幅度偏离主干
什么是分层测试?
1.数据层
2.接口层'
3.UI层
App测试方面
请说明IOS手机和Android手机,系统有什么区别?
两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。
你觉得app的性能测试,即专项测试,需要重点关注那些方面?
内存、cpu占用、耗电量、流量等
请简要介绍一下安卓系统四层架构?
从上到下,依次是应用程序层、应用程序框架层、系统运行库层、Linux核心层
试过程中遇到app出现crash或者ANR,你会怎么处理?
可以先把日志过滤出来: adb logcat | findstr xxxxx(过滤日志信息) ,然后再搜索其中的关键字,比如:exception、crash,看看是那些方法或者异常导致了问题的发送,初步定位问题原因后,可以交给开发人员去具体查找深层原因并修复。
请简单介绍一下实用过的安卓UI自动化测试工具?
appium:是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。
robotium:是一款国外的Android自动化测试框架,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑动等)、查找和断言机制的API,能够对各种控件进行操作。
五、全栈自动化测试面试题
一、Web自动化测试面试题
1.Selenium中hidden或者是display = none的元素是否可以定位到?
不能,可以写JavaScript将标签中的hidden先改为0,再定位元素。
2.Selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?
添加元素智能等待时间 driver.implicitly_wait(30)
添加强制等待时间(比如python中写 sleep)
try 方式进行 id,name,clas,x path, css selector 不同方式进行定位,如果第一种失败可以自动尝试第二种
3.如何提高Selenium脚本的执行速度?
代码优化,多任务,分布式部署都是可以提升脚本执行速度的。
4.用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?
time.sleep( )
driver.implicitly_wait(30)
多用 try 捕捉,处理异常
5.你的自动化用例的执行策略是什么?
自动化测试与软件开发本质上是一样的,利用自动化测试工具,经过测试需求分析,设计出自动化测试用例,从而搭建自动化测试的框架,设计与编写自动化脚本,验证测试脚本的正确性,最终完成自动化测试测试脚本(即主要功能为测试的应用软件)并输出测试结果。
6.自动化测试的时候是不是需要连接数据库做数据校验?
从数据库层面来进行数据校验可以更方便验证系统的数据处理方面是否正确,数据处理逻辑正常后,UI层面上的校验也是需要做的。
7.id,name,class,xpath, css selector这些属性,你最偏爱哪一种,为什么?
css 、xpath 几乎所有的元素都可以定位到,但是它们的短处在于页面上更改了元素后位置很容易改变,所以首先使用的还是id或者name等。
8.如何去定位页面上动态加载的元素?
触发动态加载元素的事件,直至动态元素出现,进行定位
9.如何去定位属性动态变化的元素?
xpath或者css通过同级、父级、子级进行定位
10.点击链接以后,Selenium是否会自动等待该页面加载完毕?
会的
11.什么是page object设计模式?
简单来说,就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好的体现面向对象语言(比如java或者python)的面向对象和封装特性。
12.如何在定位元素后高亮元素(以调试为目的)?
用JavaScript等脚本来重置元素属性,给定位的元素加背景、边框。
13.什么是断言?
断言是指定一个程序必须已经存在的状态的一个逻辑表达式,或者一组程序变量在程序执行期间的某个点上必须满足的条件。
14.你觉得自动化测试最大的缺陷是什么?
不稳定
可靠性
不易维护
成本与收益
二、APPUI自动化测试面试题
1.Android APP 内存不足时, 系统如何结束进程获得内存?
系统优先结束被挂起(暂停)的进程,释放内存。
2.APP 测试常见的严重问题有哪些? 分别引起的原因有哪些?
常见的有 crash、ANR(应用无响应、卡死),一般由设备碎片化、网络波动大、内存泄漏、代码编写错误。
3.请简单介绍你曾使用过的一款 APP 自动化测试工具 ?
开放性问题,带点主观意见
对比其他熟悉的自动化工具的优缺点。
自动化的简要方案(简要的同时关键内容请具体)。(提示: appnium 等)
4.Android 测试与 web 测试有什么区别?
相同点:
设计测试用例均依据等价类、边界值等方法,测试原理相同;
大多数都采用黑盒测试方法来验证业务功能;
需要检查界面布局、风格和按钮是否美观、统一等(UI测试);
测试页面载入和翻页的速度、登录时长是否溢出等问题(性能测试)
测试应用系统的稳定性;
不同点:
手机作为通信工具,通信等一些行为会对 APP产生(中断测试)。
手机用户对 app 产品的安装卸载操作:从上一版本/上两个版本直接升级到最新。
web 自动化测试使用的工具较常用的是 selenium,而 android手机自动化测试比较常用的自动化工具是 monkey、monkeyrunner、Appium(测试工具不一样)
5.app 测试有哪几种环境?
本地环境: 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:\mylog.log
运行使用某个 app,实时获取该 app 的日志信息(cmd 里面的返回信息) :
adb shell monkey -p com.android.calendar -v 1000 > d:\mylog2.log
10.常见的 adb 命令:
查看当前连接的设备: adb devices
安装软件: adb install 路径\xx.apk
卸载软件: adb uninstall <包名>
从电脑上发送文件到设备: adb push <本地路径> <远程路径>
adb push C:\test1.txt /sdcard/
从设备上下载文件到电脑: adb pull <远程路径> <本地路径>
adb pull /sdcard/test1.txt D:
实时获取日志: adb logcat -v time > D:\mylog.log
登录终端设备 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/activity
Monkey 命令:
adb shell monkey -v -p mypackage 50
11.APP 这么多主流机型如何测试 ?
我们公司就买了,魅族,华为,小米,iphone7、iphone8 、iphone8plus 、iphone
x 测试兼容性,有些没有的机型,先借用同事的手机进行测试,同时申请公司购买,或者采
用云真机。
12.App 崩溃(闪退),可能是什么原因导致的?
缓存垃圾过多:由于安卓系统的特性,如果长时间不清理垃圾文件.会导致越来越卡.也 会出现闪退情况.
运行的程序过多,导致内存不足
应用版本兼容问题:如果应用版本太低,会导致不兼容,造成闪退。此外,有些新版本 在调试中,也会造成应用闪退。解决方法:如果是版本太旧,更新为新版本即可;如果是新版本闪退, 可能是应用在改版调 试,可卸载后安装旧版。
检查 APP 中访问网络的地方,组件中的 ImageView 是否可以正常的下载并显示到 app 页面上。
检查 APP 的 sdk 和手机的系统是否兼容。
在一些特定情况下的闪退,比如播放视频,在 Android5.0 升级到 Android6.0 的时候,
有些系统 API 老版本 有,新版本没有,到时回去对象的时候失败,报空,系统就会出现闪退
13.Appium 都有哪些启动方式
1.客户端启动
2.命令行启动
14.请简单介绍一下使用过的安卓 UI 自动化测试工具?
appium:是一个移动端的自动化框架,可用于测试原生应用,移动网页应用
和混合型应用,且是跨平台的。robotium:是一款国外的 Android 自动化测试框架,主要针
对 Android 平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑
动等)、查找和断言机制的 API,能够对各种控件进行操作。
15.请说明 Android 手机和 IOS 手机,系统有什么区别?
两者运行机制不同:IOS 采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
两者后台制度不同:IOS 中任何第三方程序都不能在后台运行;安卓中任何程序都 能在后台运行,直到没有内存才会关闭。
IOS 中用于 UI 指令权限最高,安卓中数据处理指令权限最高。
三、接口自动化测试面试题
1.Webdriver可以用来做接口测试吗?
接口测试有现成的模块来处理,WebDriver是用于做WebUI自动化测试的。如果要实现接口测试,可以使用Requests模块来实现
2.按你的理解,软件接口是什么?
就是指程序中具体负责在不同模块之间传输或接受数据的并做处理的类或者函数。
3.HTTP 和 HTTPS 协议区别?
https 协议需要到 CA(Certificate Authority,证书颁发机构)申请证书,一般免费证书 较少,因而需要一定费用;
http 是超文本传输协议,信息是明文传输,Https 协议是由 SSL+Http 协议构建的可进行加 密传输、身份认证的网络协议,比
http 协议安全;
http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443;
4.HTTPS 在哪一层?
HTTPS 在应用层。
5.get 和 post 区别是什么?
POST 和 GET 都是向服务器提交数据,并且都会从服务器获取数据。
区别:
传送方式:get 通过地址栏传输,post 通过报文传输
传送长度:get 参数有长度限制(受限于 url 长度),而 post 无限制
GET 产生一个 TCP 数据包(对于 GET 方式的请求,浏览器会把 http header 和 data 一并 发送出去,服务器响应
200 返回数据),POST 产生两个 TCP 数据包(对于 POST,浏览器先 发送 header,服务器响应 100
continue,浏览器再发送 data,服务器响应 200 ok 返回数 据)
get 请求参数会被完整保留在浏览历史记录里,而 post 中的参数不会被保留
在做数据查询时,建议用 GET 方式;而在做数据添加、修改或删除时,建议用 post 方式
6.常见的 POST 提交数据方式
主要有四种方式:application/x-www-form-urlencoded、multipart/form-data、
application/json、text/xml 等。
7.什么是 Http 协议无状态协议?怎么解决 HTTP 协议无状态协议
无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服
务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会
记录任何信息。HTTP 是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive 没能
改变这个结果。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导
致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。HTTP
协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求"点到为止"不会造成
不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。客户端与服务器进行动态
交互的 Web 应用程序出现之后,HTTP 无状态的特性严重阻碍了这些应用程序的实现,毕竟
交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,
两种用于保持 HTTP 连接状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session。
8.cookie 和 session 的区别
cookie 数据存放在客户的浏览器上,session 数据放在服务器上
cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗,考虑到安全
应当使用 session
session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑
到减轻服务器性能方面应当使用 cookie
单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie
可以将登陆信息等重要信息存放为 session;其他信息需要保存,可以放在 cookie
9.请求接口中常见的返回状态码
1xx -- 信息提示(表示临时的响应。客户端在收到常规响应之前,准备接收一个或多个 1xx 响应)
2xx -- 成功(表明服务器成功地接受了客户端请求)
3xx -- 重定向(客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请 求服务器上的不同的页面,或通过代理服务器重复该请求)
4xx -- 客户端错误(发送错误,客户端有问题。例如,客户端请求不存在的页面,客户端 未提供有效的身份证验证信息)
5xx -- 服务器错误(服务器由于遇到错误而不能完成该请求)
常见的返回码有:
200 OK - [GET]:服务器成功返回用户请求的数据
201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功
202 Aceepted - [*]:表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE]:用户删除数据成功
400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行 新建或修改数据的操作
401 Unauthorized -[*] :表示用户没有权限(令牌、用户名、密码错误)
403 Forbidden -[*] :表示用户得到授权(与 401 错误相对),但是访问被禁止
404 NOT FOUND -[*]:用户发出的请求针对得到是不存在的记录,服务器没有进行操作, 该操作是幂等的
406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求 JSON 格式,但 是只有 XML 格式)
500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是 否成功
10.什么是 DNS?
DNS 是域名系统 (Domain Name System),DNS 是用来做域名解析的,它会在你上网输入
网址后,把它转换成 IP,然后去访问对方服务器;没有它,你想上百度就要记住百度的 IP,
但有了 DNS 的处理,你只需要记住对应网站的域名,即网址就可以了。
11.请问你们公司是如何做接口测试的?
接口测试实际跟一般测试不同就是测试用例的设计部分。
获取接口规范。
设计接口测试功能用例(主要从用户角度出发看接口能否实现业务需求,用例设计就是黑 盒用例那一套)。
各种入参验证(正常情况,异常情况包括输入参数个数不对,类型不对,可选/必选,还 有考虑参数有互斥或关联的情况)。
接口返回值各种验证(符合接口文档需求)
了解接口实现逻辑,实现逻辑覆盖(语句/条件/分支/判定/...)
接口能并发执行吗、安全吗,性能满足要求吗?
采用工具或者自写代码来验证。
发现问题跟功能测试一样,该报 bug 报 bug,该跟踪状态的跟踪状态。
12.怎么设计接口测试用例?
通常,设计接口测试用例需要考虑以下几个方面:
是否满足前提条件
有些接口需要满足前提,才可成功获取数据。常见的,需要登录 Token
逆向用例:针对是否满足前置条件(假设为 n 个条件),设计 0~n 条用例
是否携带默认值参数
正向用例:带默认值的参数都不填写、不传参,必填参数都填写正确且存在的"常规"值,
其他不填写,设计 1 条用例
业务规则、功能需求
这里根据时间情况,结合接口参数说明,可能需要设计 N 条正向用例和逆向用例
参数是否必填
逆向用例:针对每个必填参数,都设计 1 条参数值为空的逆向用例
参数之间是否存在关联
有些参数彼此之间存在相互制约的关系
参数数据类型限制
逆向用例:针对每个参数都设计 1 条参数值类型不符的逆向用例
参数数据类型自身的数据范围值限制
正向用例:针对所有参数,设计 1 条每个参数的参数值在数据范围内为最大值的正向用例
13.你做接口测试,测什么?
可用性测试
根据约定的协议、方法、格式内容,传输数据到接口经处理后返回期望的结果:
接口功能是否正确实现;
返回值测试 - 返回值除了内容要正确,类型也要正确,保证调用方能够正确地解析;
参数值边界值、等价类测试;
错误和异常处理测试
输入异常值(空值、特殊字符、超过约定长度等),接口能正确处理,且按预期响应;
输入错误的参数,接口能正确处理,并按预期响应;
多输入、少输入参数,接口能正确处理,且按预期响应;
错误传输数据格式(如 json 格式写成 form 格式)测试;
安全性测试,主要指传输数据的安全性:
敏感数据(如密码、秘钥)等是否加密传输;
返回数据是否含有敏感数据,如用户密码、完整的用户银行账号信息等;
接口是否对传入的数据做安全校验,如身份 ID 加 token 类似校验;
接口是否防止恶意请求(如大量伪造请求接口致使服务器崩溃);
性能测试,如接口的响应时间、并发处理能力、压测处理情况:
并发请求相同的接口(特别为 POST 请求),接口的处理情况(如插入了相同的记录导致 数据出错,引发系统故障);
接口响应时长在用户可忍受的范围内;
对于请求量大的接口做压测,确定最大的瓶颈点是否满足当前业务需要;
14.平常用什么工具测接口的?
常用 http 协议接口测试工具,如:postman、fiddler、jmeter;webService 接口用 SoapUI、
jmeter 等。
15.没有接口文档,如果做接口测试?
本题主要考情商,通俗来说就是忽悠能力,先唬住面试官了再说,进去了也是瞎测测,随时 做好背锅的准备,当然,你肯定不能回答面试官不测(心理
mmp,脸上笑嘻嘻),接下来就是 扯犊子时间
用抓包工具把接口抓取处理,然后针对性进行测试;接口中字段信息不清楚的,找时间
集中寻求开发解答。(常用抓包工具 Fiddler、Charles 等)
16.在手工接口测试或者自动化接口测试的过程中,上下游接口有数据依赖如何处理?
用一个全局变量来处理依赖的数据,比如登录后返回 token,其它接口都需要这个 token,
那就用全局变量来传 token 参数。
17.依赖于第三方数据的接口如何进行测试?
mock接着面试官会问你,如果 mock 的,然后你就顺着坑继续挖,搭建 mock 服务。
18.接口测试中,依赖登录状态的接口如何测试?
依赖登录状态的接口的本质上是在每次发送请求时需要带上 session 或者 cookie 才能
发送成功,在构建 POST 请求时添加必要的 session 或者 cookie
19.如何模拟弱网做测试?
Fiddler 和 charles 都可以模拟弱网测试,平常说的模拟丢包,也是模拟弱网测试。具
体可以看《几种弱网模拟方法,总有一种适合你》
20.你平常做接口测试的过程中发现过哪些 bug?
面试官出这个题,主要是想知道你是不是真的做过接口测试,毕竟现在很多小伙伴简历经过 包装(不包装连面试机会都没有,没办法,为了生存,能理解)
常规错误,接口没实现,没按约定返回结果,边界值处理出错等。
输入异常值(空值、特殊字符、超过约定长度等),接口抛错,没做封装处理;
输入错误的参数、多输入、少输入参数,接口可能出现的错误;
安全性问题,如明文传输、返回结果含有敏感信息,没对用户身份信息做校验,没做恶意请 求拦截等;
性能问题,如接口并发插入多条相同操作,响应时间过长,接口压测出现瓶颈等;
21.当一个接口出现异常时候,你是如何分析异常的?
先抓包,用 fiddler(charles)工具抓包,或者浏览器上 F12 调试工具;APP 上的话,那就 用 Fiddler
做代理,通过手机设置代理去看请求和返回报文;
查看后端日志,如 Linux 系统通过 xhell 连上服务器,查看接口日志,查看是否有报错信息 (命令:tail -f 日志文件);
22.如何分析一个 bug 是前端还是后端的?
平常提 bug 的时候,前端开发和后端开发总是扯皮,不承认是对方的 bug。
这种情况很容易判断,先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就
是前端发的数据不对;
请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题咯。
23.你们做接口测试自动化吗?
现在针对大量应用,普遍推崇做接口测试自动化,维护成本低、收益高。常用的工具有
许多,如 Jmeter、Robot Framework、pytest 等。
24.列出几个 JMeter 监听器?
一些 JMeter 监听器是:
集合报告
汇总报告
查看结果树
用表格查看结果
图形结果
BeanShell Listener
摘要报告等
25.在 python 中进行数据驱动测试
在 unittest 中,没有自带的数据驱动,我们得借助 ddt 来实现,首先,我们得在 python
运行环境中安装 ddt,用下列命令安装
pip install ddt
另 外 一 个 测 试 框 架 pytest , 它 自 带 数 据 驱 动 实 现 , 是 通 过
@pytest.mark.parametrize(argnames,argvalues) 来实现参数化的。
也可以根据自己需求用 python 实现数据的读取和驱动。
26.接口自动化中的关联怎么处理?
把上一个请求返回的结果传入到下一个请求的参数中,将请求的结果反射到一个类属性(使
用 setattr()函数),下一个请求去调用这个类属性
27.自动化测试怎么校验结果?
断言 ,预期结果与实际结果对比
数据库校验,根据测试场景来查询数据库里的数据和请求之前的数据进行比对。
28.具体的在这个项目中自动化怎么应用到实际的,您对自动化结果的分析
完成所有的自动化测试框架的设计和实现后,进行接口测试,然后集成到
jenkins,配置定时执行,生成 html 报表,查看测试通过率,查看接口的功能
每次发版时,进行回归测试,新功能开发未提测前。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。