1. 求职面试准备(记得收藏保存转发给你的朋友)
1.1 面试技巧
💡 告诫给位小伙伴,技巧不是投机取巧,起到辅助作用,技术面主要看实力,这里是基于实力之上的技巧
1.2 面试形式
😄 面试形式分为技术面和 HR 面,技术面就是考察你的专业技术水平的,HR 面主要看你这个人的综合素质以及家庭情况符不符合公司要求(一般来讲,技术招聘通过了技术面,HR 基本上没有问题)
1.3 面试前的准备:
- 首先: 肯定就是攻下我们的面试宝典,当你背下大部分问题后,面试通过率直线提升
- 再次:肯定就是系统的学习了,有一个知识的框架,哪里不会补哪里
-
最后:加分项肯定就是你的项目,在面试前,一定要回答好关于自己项目的三个问题
- 这是一个怎样的项目,包括:主要的业务、我负责的模块,我在项目扮演的角色
- 项目中用到哪些技术或工具,以及每项技术扩展,包括:管理工具、接口工具、自动化工具等
- 过程中遇到了什么重大BUG,最后是如何解决的?
1.4 面试中的几个技巧:
-
简历上引导面试官:
- 比如:在词汇上做好区分,比如熟悉 Python,了解 Java,精通 C 语言,这样表达,对自己的掌握程度能有个区分,也让面试官有个着重点去问问题,Java 只写了解,自然就不会多问你深入的一些东西了。
-
面试过程中引导面试官:
- 示范:面试过程中尽量引导到自己熟知的一个领域,比如问到你 Oracle 数据库,然后你简单回答,甚至这步也可以省略,可以直接说一句,自己实际项目中没有使用过 Oracle 数据库,但是我知道数据库中的 SQL 语句都是一样的,不同的数据库语法区别不大,我比较熟悉的有 MySQL 和 DB2 数据库,这样自然就告诉了面试官,你可以问我 MySQL 或 DB2 相关知识。
- 好处:这样你可以把整个面试过程往你熟知的地方引导,也能更倾向于体现出你的优势而不是劣势,但是引导过去,一定是自己掌握的,比如让你数据库脚本优化,你一个也说不上来,那就更尴尬了不是么?
-
自我介绍中做一个引导:
- 比如:一般面试的开头都会有一个自我介绍,在这个位置你也可以尽情的为自己的优势方面去引导,也可以更多的去适配他们的岗位要求。
-
面试过程需要录音:
- 把面试过程中录下来,然后进行复盘,非常重要,不要在一个吭里面掉下去两次。
-
面试后的总结:
- 面试完后,就不用太在意结果了,有限的时间就应该做事半功倍的事情(比如:背面试宝典)
- 我们需要及时将面试中的问题记录下来,尤其是自己回答的不够好的问题,一定要花时间去研究,并解决这些问题,下次面试再遇到相同的问题就能很好的解决,同时,每次面试后发现自己的不足,需要查缺补漏,及时调整,在不断的调整和查缺补漏的过程中,你会发现:你已经变得强大无比
2. 高频 HR 面试题(20题)
2.1 自我介绍(100%)
- 参考答案:面试官,您好!我叫二师姐 - 清弦,毕业于吉林大学,学的是计算机应用专业,在上一家公司里,我从一个测试新人,通过自己不断学习逐渐成长,从实习开始,一直做到了测试组长的位置,主要做过Web商城和小程序类,以及金融类和银行类的 APP 测试 ,我个人比较擅长Linux 搭建测试环境(包括:Jdk 环境、Tomcat 环境等),JMeter、Postman 接口工具的使用、Python 编程以及自动化方向的测试,除了工作之外,我个人很喜欢打羽毛球和爬山,现在我希望找到一份稳定而且有提升空间测试工作。
- 准备技巧:个人信息 + 过往测试项目说明 + 擅长技能 + 兴趣爱好。
-
回答误区:
- 自我介绍不宜过短或过长,1~3分钟即可
- 介绍项目时不要说的太详细,只要是减分项就不必说
-
错误示范:面试官,你好!我叫二师姐 - 清弦,毕业于广州职业技术学员,我的专业是:
开挖掘机
– 你的专业与你现在应聘的岗位没有任何关系,就是减分项。
2.2 为什么从上一家公司离职(100%)
- 参考答案:我离职的主要原因是:今年,公司业务开始变少临近倒闭,我在公司待了 2 年多,感情还是比较深的,去年年底,我已经感知到了,互联网大环境下滑,市场形势不理想,公司也受到了不小的影响,业绩急剧下滑,到眼下这一步,我觉得很遗憾,不得不离开,去寻找新的工作机会。
-
回答误区:
- 不要把离职原因说的太详细具体,不要掺杂主观负面情绪如:加班多、太辛苦、人际关系复杂、管理混乱;不能涉及个人负面人格(懒、缺乏责任感等)。
2.3 说一下你的优点(60%)
- 参考答案:我最大的优点就是执行力比较强,在面对一个新任务时,只要我确定了完成目标和实现方法,就会立即去执行,然后,在实现过程中去优化和改进。
- 举例说明:比如:在XXX 事情上,领导安排了 XXX 任务,而这个任务在之前,我没有接触过,首先:我会先对任务进行分析和拆解,做相关调查,然后列出任务拆分清单,最后,就开始逐一执行,并跟踪和反馈进度,以及形成经验文档。同时,我觉得对于我应聘的这个岗位,执行力这一方面,可以让我的工作干的更好。
-
回答误区:
- 这是 HR 最喜欢问得问题之一,很容易陷入自嗨,最后反而导致 HR 不满意;
- 回答的内容要和你的岗位匹配,不然你说的优点,在 HR眼里就不是优点;
- 最好结合自己来举例说明,不然无法证明这是你的优点。
2.4 说一下你的缺点(60%)
- 参考答案:有的时候太在意别人的感受,不敢直接表达不同意见,因为觉得会让对方丢面子,我也在努力的提高自己的沟通能力,学会委婉地表达自己观点,又不让别人感觉到不舒服。
-
回答误区:
- 不能说自己没缺点,不能把明显的优点说成缺点;
- 不能说影响工作的缺点,不能说那些让人不舒服的缺点;
- 可以说那些与工作无关,甚至从工作角度是优点的缺点。
2.5 谈谈你的一次成功经历(40%)
- 参考答案:我之前在XX项目需要做性能测试,由于项目组没人懂性能测试,我也是第一次接触,在项目开始时遇到了 XXX 的困难,经过我和小伙伴 XXX 的努力,做了 XXX 的事情,熬了 XXX 个夜晚,最后成功完成这一次性能测试,最后:因为这件事对自己能力有所提升。
-
回答误区 :
- 切记不要太夸张,成功经历要有真实感;
- 举例说明,结合自己最有把握的一件事来说明;
- 不要无中生有,因为不是自己的经历很难有真实感。
2.6 谈谈你的一次失败经历(40%)
- 参考答案:我之前做了 XXX 项目任务时,因为是首次接触,在项目一开始时就遇到了 XXX 困难,在期间不停想各种办法,最后,也没有如期完成这个项目,针对那次失败我总结了三点原因:① 在接项目任务时,没有评估项目风险;② 在解决项目困难时,太依靠公司前辈的帮忙,应该多去找解决办法;③ 遇到项目困难时,心中抱怨大于解决事情的决心。
-
回答误区:
- 不能说自己没有失败经历,也不能把那些明显成功说成失败;
- 可以说客观原因导致的失败,绝对不能说自己性格缺陷导致;
- 还需总结失败的原因,最后说一说自己是如何快速调整自己。
2.7 作为应届生,缺乏经验 ,如何胜任这项工作(80%)
- 参考答案:作为应届毕业生,在工作经验方面的确有所欠缺,因此,我在读书期间,我一直利用各种机会在这个行业做兼职。发现实际工作中积累的经验,远比书本中的知识丰富、复杂而且积累速度更快。虽然,我实际工作经验不够,但是,我有较强的责任心、适应能力和学习能力,请贵公司放心,学校所学和兼职所得的经验,一定能胜任这一份工作。
-
回答误区 :
- 应届生很怕被问的一个问题,其实,恰恰相反,回答时能体现出应聘者的诚恳、机智、果敢和敬业;
- 如果招聘单位,对应届生提出这个问题,反而说明,招聘单位并不在乎经验。
2.8 你被录用后,你如何开展工作(40%)
- 参考答案:首先,听取领导的指示和安排,然后就有关情况进行了解和熟悉,接下来制定一份近期的工作计划并汇报给领导,听听领导有什么建议,然后,按照计划开展我的工作,最后,总结工作经验并形成文档。
-
回答误区:
- 如果你对于应聘的职位缺乏足够的了解,最好不要夸夸其谈说出自己的具体实施方法;
2.9 你希望你的上级是什么样的人(30%)
- 参考答案:我心里很明白,领导是什么样的人,不是我能够选择的,而领导之所以能成为领导,肯定有很多过人之处,值得我们去学习,如果是严肃型的领导,我会学习他高效做事的态度和方法;如果是和蔼型的领导,我会学习他为人、处事、待物之道。总之,不管是什么样的领导,我尽量与之沟通并配合完成工作。
-
回答误区:
- 即是一个陷阱,又是一次机会,面试者通过应聘者对上级的希望,判断应聘者的自我意识;
- 最大的陷阱:不要具体讲对领导的希望,多谈谈对自己的要求;也可以谈谈,在工作后,如何去配合领导开展工作;
- 作为职场新人/步入新工作环境,重点不在于领导是什么样子,而是自己如何去配合领导。
2.10 你与上级意见不一致,如何处理(30%)
- 参考答案:首先,我会服从,在执行过程中进行完善,然后,我会找准时机,给领导提出我的建议,交换一下看法。最后,我还是坚决地执行上级领导的指令;其实,对于非原则性问题,我会服从上级的意见,对于涉及公司利益的重大问题上,我会考虑给更高级别的领导反馈。
-
回答误区:
- 主要考察你在团队中的原则问题,是妥协还是坚持的辩论题,和领导意见不一致时,重要的是履职尽责。
2.11 你怎么看待加班问题(50%)
- 参考答案:如果是工作需要,我会义不容辞加班,我现在也是单身,没有任何家庭负担,可以全身心的投入到工作中。但同时,我也会提高工作效率,减少不必要的加班。
-
回答误区:
- 实际上很多公司问这个问题,并不是一定要加班;只是测试你是否愿意为公司奉献;
- 不能无底线妥协:可以无条件加班;亦不能说:拒绝加班。
2.12 你怎么看待学历和能力(30%)
-
参考答案:
- 学历好:我认为学历是工作的敲门砖,是根本,但是,学历高不代表工作能力强,比如,学历好只能说明学习能力、思维逻辑、分析能力强于别人,但是在职场上,这些能力只是一部分,更多的还是实践。
- 学历不好:我认为学历很重要是基础,同时也能代表一个人的学习和理解能力,一般企业也很看重。但是,我认为,能给公司带来多少价值才是关键,虽然,我学历不占优势,但是,我的技能和经验都不比他们差。
-
回答误区:
- 这个问题主要考察:随机应变能力、自我认知
2.13 你对薪资有什么要求(100%)
- 参考答案:在回答这个问题之前,我想先了解一些贵公司的薪资体系,方便介绍一下吗?从以下几个方面:1、公司薪资结构?2、一年多少个月薪水?五险一金按缴纳比例?3、公司还有哪些其他的福利和待遇?4、试用期是多久?试用期工资如何计算?了解完成之后,目前我应聘的这个岗位,在 XXX 市这边的薪资大概是 XXX 左右,再结合您刚刚介绍的公司薪资福利情况,综合下来,我期望是 XXX 元。
-
回答误区:
- 藏住底牌,试探对方底牌;切记不要太老实;切记不要直接说薪资范围。
2.14 你有什么业余爱好(20%)
- 参考答案:我喜欢看书,不管是技术/技能书,还是其他文学书(一定要做到闭环,说了这句话,面试官可能会问:你平时都看什么书),也喜欢约朋友一起徒步旅行(做到闭环),不过,我更喜欢养一些花花草草等。
-
回答误区:
- 业余爱好能在一定程度上反映应聘者的性格、观念、心态、随机应变能力;
- 不要说自己没有业余爱好,也不要说自己仅限于读书、上网、玩游戏。
2.15 你朋友对你的评价(20%)
-
参考答案:
- 我的朋友都说我做事情比较执着,好研究,定好的目标就会坚持去实现,很有毅力;
- 我喜欢交朋友,他们都觉得我比较随和、好相处,能够为别人考虑,做事比较细心;
- 我朋友们都说我是一个可以信赖的人,一旦答应别人的事,就一定会拼尽全力做到。
-
回答误区:
- 切记不要说一大堆优点,可以说一些与工作无关疼痒的事情
2.16 你和同事们怎样相处(30%)
- 参考答案:大部分情况下都能与同事相处得很好,如果,同某人发生冲突,这时,我一般会注意寻找冲突的根源,而不是转移到对对方的攻击上。我发现这种方法十分有效,它能够使我同任何人都维持一种相互尊重的关系。另外,通过这样做,我往往都能解决问题,甚至会促进与同事的关系。
-
特别注意:
- 首先,说明自己是一个很好相处的人;
- 其次,假设发生矛盾,可以讲一讲自己如何分析矛盾,如何化解矛盾。
2.17 这么长的空窗期,你都在做什么呢(60%)
- 参考答案: 之前工作强度比较大,辞职后,休假调整了一段时间,现在也面试了不少工作,但是还没有做决定,因为下一份工作很重要,想要慎重考虑。另外在这期间我一直自主学习该岗位的相关知识或拓展知识,为下份工作做好储备,再阐述自己的各方面能力……
-
回答误区:
- 空窗期太久,一般都需提前准备好说辞,准备一些无关疼痒的说辞
2.18 谈谈你对跳槽的看法(40%)
- 参考答案: 个人认为跳槽可能是不满意自己的薪资水平,想要寻求个人更好的发展,但是,我并不赞成经常性的换工作,我希望能够从事一份稳定的工作,在工作中不断的积累自己,我认为,如果符合自己的职业规划,一份合适的工作可以一直做下去。
-
回答误区:
- 切忌频繁跳槽,实际也建议不要频繁跳槽,公司都不喜欢频繁跳槽的人
2.19 简单说一下你的职业规划(70%)
- 参考答案: 我给自己的职业规划分为三个阶段,第一阶段:熟悉项目业务,提高自己的专业和技能水平,让自己胜任这个岗位;第二阶段:在做好自己本职工作同时,持续学习行业知识和技能;第三阶段:横向扩展自己的业务能力,争取在将来为公司带来更大的价值。
-
回答误区:
- 主要考察你的职业规划和公司的发展是否匹配;
- 考察你对自己未来,是否有清晰的规划;
- 职业规划不宜过长,也不宜过短。
2.20 你还有什么问题要问的吗(90%)
-
参考答案:
- 本岗位团队规模和组织架构?
- 如果有幸加入,需要做哪些准备呢?
- 针对我的这次面试,您有没有什么建议?
- 你觉得我还有哪些地方可以加强?
-
回答误区:
- 面试官尊重你,给你一个了解公司的机会;
- 考察你的态度,考察你对公司和岗位的兴趣;
- 切记不要说:我没有什么想问的。
3. 软件测试基础(10题)
3.1 介绍一下你最近的项目(100%)
- 参考答案: XXX 项目是一款传统商铺与互联网相结合的网络销售平台,项目架构分为三个端,小程序 + Web端 + 管理后台,该项目主要有三种角色:用户、商家、平台管理员,该项目其实就是一个B2C模式(商家对客户),但是我们项目售卖商品种类市面上并不多见,主要是售卖电梯零配件,里面的二手交易,求购模块是该项目的重点,刚好可以解决用户电梯维修更换物品的需求,在该项目中我主要测试:功能测试、接口测试,以及 Web 自动化测试。
- **结构化:**项目的介绍 + 给用户解决的需求 + 主要模块功能 + 我负责的模块。
-
回答误区:
- 只简单介绍一个项目需求;
- 回答一大堆,面试官明明问的项目,你却在说你测试的细节或流程。
3.2 你在这个项目的工作职责(100%)
- 参考答案: 在这个项目中,我是全程参与的,刚开始会参与需求评审会议,产品经理会介绍产品业务和功能的细节,当然在这里我也会提出一些自己想法,之后就会根据测试计划和产品原型文档,进行测试用例的编写,后面会参与测试用例的评审,然后就是功能测试,在这里一般经历3~5轮,除了功能测试之外,在该项目我还需要编写接口测试用例和 JMeter 脚本,Web 端的兼容性和弱网模拟测试,最后针对管理后台完成 Web 自动化测试脚本。
- 结构化: 我们可以根据项目的测试流程来记忆
-
回答误区:
- 这类问题有很多问法(回答类似),就是你在这个项目中做什么?
- 你在这个项目扮演什么角色?
- 你在这个项目中主要做些什么事情?
3.3 软件项目的测试流程(70%)
- 参考答案: 之前我们是,先参与需求评审会议,产品经理会介绍产品业务和功能的细节。需求会议后,我们负责人会制定测试计划,之后我们就按照计划先进行用例的编写,用例编写完后进行测试用例的评审。等开发产品编译完毕,提交测试后,我们测试组就开始介入测试了,先进行预测,再进行正式的测试。在测试过程中发现BUG,都提交到缺陷管理平台禅道,并对 BUG 进行跟踪,进行回归测试,直至缺陷率满足用户需求。在这里一般测试3~5轮,测试结束后,对测试结果进行分析,最后编写测试报告。再最后就是运维发布上线,上线后,再关注线上产品是否正常进行。
-
回答误区:
- 直接简单说测试流程:需求分析 → 需求评审 → 编写测试计划 → 编写用例 → 用例评审 → 执行测试用例 → 提交BUG → 编写测试报告(太简单,不建议)。
3.4 黑盒测试与白盒测试的区别(50%)
- 参考答案: 两者最大的区别是:关注的对象不一样,黑盒测试又叫功能测试,这是因为黑盒测试,只需关注被测软件的功能是如何实现的,而不是代码内部逻辑,白盒测试刚刚相反,需要对系统内部的结构和工作原理有一个清楚的了解,注重代码的业务逻辑。
-
回答误区:
- 自己不懂白盒,可以直接说不知道,这个问题并不需要你懂白盒测试。
3.5 黑盒测试常见的设计方法(70%)
- 参考答案: 常用黑盒测试用例设计方法:等价类划分、边界值、因果图、场景、错误推测等等。我具体介绍一下等价类划分法和边界值分析法:等价类划分法是把所有可能的输入数据,即程序的输入划分成若干子集,然后从每一个子集中选取少量具有代表性的数据作为测试用例;边界值分析法:是对输入或输出的边界值进行测试的一种黑盒测试方法,比如:取正好等于,刚刚大于或刚刚小于边界的值作为测试数据的用例。
-
回答误区:
- 直接简单说:边界值分析法,等价类划分,错误猜测法,因果图法,场景法等
3.6 APP 测试和 Web 测试的的区别(70%)
-
参考答案: 在一定意义上 Web 测试和 APP 测试流程是一样的,都需要进行功能测试、界面、兼容、甚至性能和安全测试。但是,他们是有区别的,Web 架构:B/S 架构,通过浏览器访问。APP 架构:C/S 架构,通过客户端操作,它主要有三个区别:
- 系统架构: Web 端只需要更新服务器;APP 端需要修改 APP端和服务端,意味着客户端用户的所有核心版本都得回归测试一遍;
- 性能方面: Web 一般只需要关注响应的时间,APP 我们还要关注流量、电量、CPU、内存等占用;
- 兼容性方面: Web 是基于浏览器,所以兼容性主要考虑不同操作系统下不同主流浏览器的兼容。APP 是基于手机终端,我们需要关注不同厂商机型、操作系统、屏幕尺寸分辨率等兼容性的问题。
-
回答误区:
- 简单回答:Web 测试和 APP 测试流程是一样的,测试类型都需要进行功能测试、界面、兼容、甚至性能和安全。
3.7 你是如何做 APP 的兼容性测试(60%)
-
参考答案: APP 兼容性主要包括硬件设备系统、屏幕尺寸分辨率兼容性:
- 硬件兼容性: 我们一般需要覆盖市面上主流手机厂家及各型号的产品,如华为、荣耀、小米、OPPO、VIVO 等,当然也会把项目组人员的手机计算在内。如果公司资源有限,可以选择云测平台像 WeTest 测试;
- 系统的兼容性: 我们需要覆盖市面上主流的操作系统及其各版本,我们还需要做 APP 的安装及卸载测试专项测试,测试 APP 能否正常运行,并对核心功能进行功能验证。
-
回答误区:
- APP 兼容我主要考察不同机型和分辨率(太简单,不建议)。
3.8 怎样的测试用例才能算优秀的测试用例(60%)
-
参考答案: 一条优秀的测试用例,首先要见名知意,操作步骤清晰简洁,具体可以从三个方面:
- 覆盖程度要全: 毫无疑问,这一点应该是最重要的,无需多说,覆盖率最大化是一套测试用例的最重要评价标准,如果漏测就是一场灾难;
- 测试目的明确: 一条好的测试用例:应该是测试目的明确的,同时也需要利于理解和方便工作交接的,项目人员的变动也是难免的,这样可以在后续工作中提高效率;
- 标题、步骤、预期结果清晰明了: 用例标题见名知意,不重复不罗嗦,操作步骤清晰,即使一个小白也能根据步骤执行,预期结果不能模拟两可。
- **回答误区: **
- 说一些跟优秀用例无关的问题,例如:一条测试用例包含标题、描述、操作步骤、预期结果
3.9 如何精准的定位前后端BUG(80%)
-
参考答案: 分析前后端 BUG 十分重要,不然,前端 BUG 提交给后端,后端 BUG 提交给前端,那样,会出现双方踢皮球的事情,会影响项目测试进度,降低效率。
- 看页面: 页面上的文字、样式、交互、兼容,这些都属于前端 BUG;
- 看接口: 没有请求接口、请求接口的 URL 错误、接口请求数据错误,属于前端 BUG;
- 看传参: 接口的传参不对属于前端 BUG;
- 看响应: 接口返回的数据不对或者没有返回数据,属于后端的 BUG;
- 不明确: 凡是碰到无法定位的问题,优先提交前端,或者跟他们交流;
- 定位工具: 实际操作时,我一般采用 F12 开发者工具来进行抓包。
3.10 你发现一个BUG,开发认为不是一个BUG(90%)
-
参考答案:
- BUG 留痕: 录屏或测试详细步骤,并记录测试环境和测试版本;
- BUG 重现: 在开发的前面重新操作一遍给他看,确定大家看到的都是同一个现象;
- 核对需求: 核对需求是否需求描述不清或者理解存在偏差;
- 需求确认: 如果需求没有问题,双方意见不能成一致的,那就找产品经理确认;
- 讨论决定: 如果产品经理也不能确定 BUG,可以找相关人员一起开会讨论决定最终的决定。
-
回答误区:
- 不完整或模拟两可的回答;
- 直接找领导解决,这样很容易形成不必要的开发和测试之间的矛盾。
4. MySQL 数据库(15题)
4.1 CHAR 和 VARCHAR 的区别(60%)
- 参考答案: 他们最大的区别:CHAR 是固定长度,VARCHAR 是可变长度;像数据库字段设计时,手机号码、身份证号码,性别这种已知字段长度用 CHAR,像用户昵称、商品名称这种不确定长度的字段用 VARCHAR。
-
回答误区:
- CHAR 是固定长度,VARCHAR 是可变长度(太简单,不建议)。
4.2 Drop、Delete与 Truncate 的区别(60%)
-
参考答案:
- 速度: Drop > Truncate > Delete;
- 作用: Drop 会删除表结构及所有数据;Truncate 会清空表数据;Delete 删除表数据;
- 使用: 如果只是想删除部分数据用 Delete;如果想保留表而将所有数据删除用 Truncate;如果想把表一起删除,用 Drop。
4.3 MySQL 外连接与内连接的区别(70%)
-
参考答案:
- 内连接: 指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件;
- 外连接: 连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行;
-
外连接分为:左外连接、右外连接、全连接:
- 左连接(left join): 左表全部数据与匹配的右表数据,右表中没匹配的为空值;
- 右连接(right join): 右表全部数据与匹配的左边数据,左边中没匹配的为空值;
- 全连接(full join): 返回左右数据表的所有行。
-
需要闭环:
- 你在实际测试工作中,什么情况下使用过?(防面试官追问)
4.4 如何显示前5行的数据(50%)
- 代码示例:
SELECT * FROM my_table LIMIT 0,5 ;
-
参考答案:
- 使用 LIMIT 0,5 关键字,0 代表从第一条数据开始,显示 5 条数据;
- LIMIT 后的两个数字用逗号隔开即可,不需要括号;
- 第一个数字的索引是从 0 开始计算的。
4.5 MySQL 如何进行排序(50%)
- 代码示例:
SELECT * FROM my_table ORDER BY 字段1 ;
SELECT * FROM my_table ORDER BY 字段1 DESC;
SELECT * FROM my_table ORDER BY 字段1,字段2 DESC ;
- 参考答案: 使用 ORDER BY 关键字,默认是升序 ASC 关键字,而且关键字可以省略,降序关键字 DESC 不可以省略,如果对多个字段排序,只需要将多个字段以逗号隔开即可。
-
回答误区:
- 只简单回答 ORDER BY 关键字
4.6 MySQL 如何分组查询(50%)
- 代码示例:
-- 查询各科成绩的最高成绩
SELECT MAX(score) FROM t_score GROUP BY course_no ;
- 参考答案: 分组查询关键语法是:GROUP BY,它常常与 HAVING 语句结合使用, 作为测试人员来说,实际工作中使用并不多。
-
回答误区:
- 只简单回答 GROUP BY 关键字
4.7 WHERE与 HAVING 的区别(60%)
- 参考答案: WHERE 和 HAVING 的最大区别是执行顺序上的区别,WHERE 子句是在对查询结果进行分组前执行,即在分组之前过滤数据,条件中不能包含聚组函数,HAVING 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数。
4.8 MySQL 常用的聚合函数(50%)
- 参考答案: MySQL 的聚合函数有很多,在之前实际项目中,也就用过其中的几种,统计函数 count(),我经常用它统计查询的数据条数,还有求和函数 sum()、平均值函数** **avg()、最大值函数 max()、最小值 min()
4.9 MySQL 服务默认端口号是多少,如何修改(50%)
- 参考答案: MySQL 的默认端口是 3306,大部分情况下,测试环境都直接使用 3306 端口,除非默认端口被占用,但是生产环境一般不直接使用 3306 端口,想要修改数据库端口,先停掉 MySQL 服务,然后直接修改 my.ini 文件中的端口号。
-
需要闭环:
- 为什么生产环境不使用默认端口呢?(防面试官追问)
4.10 说一说数据库事务的四大特性(30%)
-
参考答案:
- 原子性: 一个事务是不可再分割的整体,要么全部被执行,要么全部执行;
- 一致性: 一个事务可以让数据从一种一致状态切换到另一种状态;
- 隔离性: 一个事务不受其他事务的干扰,并且多个事务彼此隔离;
- 持久性: 事务一旦提交,就永久地保存在数据库服务磁盘。
4.11 说一说数据库的索引(60%)
-
参考答案:
- 所有分类: 主键索引、唯一索引、普通索引、组合索引;
- 索引作用: 会减少查询遍历表的次数,索引的存储是有序的,通过索引查询数据,无需遍历整张表的记录就能找到对应的数据;
- 索引缺点: 创建索引和维护索引都需要耗费时间、物理空间,当增加、删除和修改数据时,索引也需要动态维护,所以说索引虽然能大大提高查询速度,但也不能乱用。
-
需要闭环:
- 一般会追问: 4.12 哪些操作会导致索引失效
4.12 哪些操作会导致索引失效(50%)
-
参考答案:
- 如果 WHERE 条件中有 OR 关键字,一般索引就会失效;
- 使用了 LIKE 模糊查询,一般索引会失效,特别是使用 %查询内容%;
- WHERE 条件中,对索引列有数学运算和函数,一般索引会失效。
4.13 如何分析一条 SQL 语句是否使用了索引(50%)
- 参考答案: 可以在查询的 SQL 前面增加 explain 命令,这样就可以分析出,查询是否使用了索引,查询出想要的数据,经历了几次数据筛选。
explain select * from t_student where s_name ='二师姐';
-
特别注意:
- 注意索引列一定要在 WHERE 条件筛选中,否则本身没有意义。
4.14 有使用过存储过程吗(高级问题)
- 参考答案: 在实际工作中,不管是功能测试或接口测试都不用过存储过程,我之前在XXX项目做性能测试时,自己写过存储过来去造测试数据,不过,我写的偏简单,我所理解的存储过程就是预编译的 SQL 语句,只进行一次创建和编译,后面直接使用 CALL + 存储过程名称 调用运行即可。
- 代码示例:
-- 对用户表批量插入100万条数据
CREATE PROCEDURE myPro()
begin
declare phoneNumber VARCHAR(11) default 18500000001 ;
while phoneNumber < 18501000001 do
insert into t_user (phone_number) VALUES (phoneNumber);
set phoneNumber = phoneNumber +1;
end while;
end
-
回答误区:
- 直接回答有或者没有(太简单、不建议)
4.15 懂MySQL中的慢查询吗(高级问题)
- ** 参考答案:** 数据库慢查询在做功能测试或接口测试时都不需要开启,只有做性能测试时才会开启,只需要设置两个参数即可,在开启之前先查看是否开启,如果没有开启,只需要使用使用 set global 关键字开始,一般会设置开启状态、慢查询界定时间,以及慢查询日志文件路径即可。
- 代码示例:
-- 查看慢查询参数设置
show variables like 'slow_query%';
show variables like 'long_query_time';
-- 慢查询开启状态 slow_query_log
-- 慢查询日志存放的位置 slow_query_log_file
-- 查询超过多少秒才记录 long_query_time
-- 修改和模拟慢查询
set global slow_query_log='ON';
set global slow_query_log_file='/var/lib/mysql/instance-1-slow.log';
set global long_query_time=1;
5. Linux 操作系统(20题)
5.1 什么是 Linux 操作系统(30%)
- 参考答案: Linux 是一套免费使用和自由传播的类似 Unix 操作系统,一般的 Web 项目都是部署都是放在 Linux 操作系统上面, Linux 支持多用户、多任务、支持多线程和多 CPU 的操作系统,是一个性能稳定的多用户网络操作系统。
5.2 如何创建一个文件(50%)
- 参考答案: 在 Linux 下创建文件命令 touch(注意千万别和创建目录弄混)
- 代码示例:
touch 文件名称
5.3 如何创建一个文件目录(50%)
- 参考答案: 在 Linux下创建目录命令 mkdir(注意千万别和创建文件弄混)
- 代码示例:
mkdir 目录名称
5.4 如何删除一个目录以及目录中所有文件(50%)
- 参考答案: 在 Linux下删除一个目录以及目录文件,采用递归删除法 rm -r 目录名称
- 代码示例:
rm -r 目录名称
5.5 使用什么命令查看 ip 地址(30%)
- 参考答案: 在 Linux下查看 IP 地址使用命令 ifconfig,注意不是 ipconfig
- 代码示例:
ifconfig
5.6 如何重命名一个文件(50%)
- 参考答案: 在 Linux下重命名文件或目录命令 mv,它与移动文件是同一命令
- 代码示例:
mv 原文件名称 新文件名称
5.7 什么是 ROOT 帐户(30%)
- 参考答案: ROOT 帐户就像一个系统管理员帐户,允许你完全控制系统,你可以在此处创建和维护用户帐户,为每个帐户分配不同的权限。相当于 Window 系统的 administrator 用户。
5.8 在a目录下找出大小超过 1MB 的文件(20%)
- ** 参考答案: ** find /a -type f -size +1024k
# 1MB = 1024k
find /a -type f -size +1024k
5.9 在a目录中找出,带有test的文件(20%)
- 参考答案: find /a -name test
find /a -name test # 区分大小写
find /a -iname test # 不区分大小写
5.10 在 Linux 下如何查看隐藏文件(20%)
- 参考答案: ls -a
ls -a # 列出当前目录所有文件(包括隐藏文件)
5.11 如何查看 Linux 磁盘空间使用情况(20%)
- 参考答案: df -h
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda6 29G 4.2G 23G 16% /
udev 1.5G 4.0K 1.5G 1% /dev
tmpfs 604M 892K 603M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 1.5G 156K 1.5G 1% /run/shm
5.12 详细说一说 VI 命令(60%)
-
参考答案: vi 编辑器常用命令以及面试特别喜欢问的问题
- 如何进入编辑模式?如何退出保存?如何只退出保存?
i: # 进入输入模式
:wq # 保存并且退出
:wq! # 强制保存并且退出
:w # 只保存不退出
:q # 不保存退出
:q! # 不保存强制退出
:0 # 光标移动到文件的首行
:$ # 光标移动至最后一行
:nu # 显示当前光标所在行号
:set nu # 所有内容显示行号
:set nonu # 不显示行号
5.13 如何查看一个文件的权限(50%)
- 参考答案: 查看一个文件有什么权限,很多人不知道,其实非常简单
ls -l
5.14 如何给一个文件赋予权限(60%)
-
参考答案: chmod 777 文件,7是由4、2、1组成
| 权限 | 数字 | 作用 |
| — | — | — |
| r | 4 | read 读取权限 |
| w | 2 | write 写入权限 |
| x | 1 | execute 执行(进入目录) |
5.15 赋予权限命令 Chmod 777,三个数字分别代表什么意思(70%)
-
参考答案:
- 数字 7 = 4 + 2 + 1,也就是文件有读写执行权限;
- chmod 777 后面的数字分别代表【文件所有者】、【群组用户】、【其他用户】。
5.16 在 Linux 下如何解压缩(70%)
- 参考答案: 解压缩文件实际使用并不多,作为测试人员搭建环境时,就会使用比较多,不同的解压缩文件,命令也不同
zip –r sum.zip a.txt # a.txt压缩成sum.zip包
unzip sum.zip # 解压缩到当前目录
unzip -o XXXX.zip # 自动覆盖解压到当前目录
unzip -d test XXX.zip # 解压到你指定的目录里面
tar cvf sum.tar aaab.txt # aaa.b压缩成sum.tar包
tar xvf sum.tar # 解压缩tar包
tar -tf sum.tar # 查看压缩包的内容
tar -rf sum.tar cccd.txt # 追加文件cccd.txt到压缩包
delete -f sum.tar aaab.txt # 删除压缩包的内容aaab.txt
tar czvf sum.tar.gzsum.tar # 压缩
tar xzvf sum.tar.gz # 解压缩
5.17 如何查看 JAVA 进程,并关闭进程(80%)
- 参考答案: 使用 ps -ef|grep java,可以找出进程号,然后通过 kill -9 进程号 命令杀掉 java 进程
ps -ef|grep java #找出进程ID(比如1234)
kill -9 1234
5.18 如何搭建 JDK 环境(高级问题)
-
参考答案: 可以把具体的搭建步骤总结起来:一般情况下,公司有JDK 搭建部署手册,我们可以分为六个步骤:
- 第一步: 下载 JDK 对应的版本 jdk.gz.tar;
- 第二步: 通过 SFTP 工具上传 JDK 到服务器;
- 第三步: 使用 tar 命令解压 jdk.tar.gz 包;
- 第四步: 使用 vi 命令修改环境变量,etc 目录的 porfile 文件;
- 第五步: 使用 source 命令,立即生效环境变量;
- 第六步: 使用 java -version 检查 JDK 版本。
5.19 如何搭建 Tomcat 环境(高级问题)
-
参考答案: 可以把具体的搭建步骤总结起来:一般情况下,公司有 Tomcat 搭建部署手册,我们可以分为六个步骤 :
- 下载 Tomcat 对应的版本;
- 通过 SFTP 工具上传 Tomcat 到服务器;
- 使用 tar 命令解压 tomcat.tar.gz 包;
- 使用 vi 命令修改 conf 目录下的 server.xml,默认 8080 端口(可以不修改);
- 上传开发打包的文件到 Tomcat 对应的 webapps 目录下;
- 进入 bin 目录,使用 ./startup.sh ,启动 tomcat。
5.20 如何搭建 MySQL 环境(高级问题)
-
参考答案: 可以把具体的搭建步骤总结起来:一般情况下,公司有 MySQL 搭建部署手册,而且操作步骤比较繁琐,很难一次性讲明白,简单来说分为七个步骤:
- 下载 Linux 版 MySQL 安装包,并上传到 Linux** **服务器上;
- 创建一个 mysql** **目录,并解压到指定目录;
- 使用 rpm -ivh** **安装 mysql 的安装包;
- 设置开启自启动,并启动 MySQL 服务;
- 查询自动生成的 root** **用户密码;
- 设置新的 root 密码,并使用新的密码进行登录;
- 如果服务器没有放开 3306 端口,还需要开放 3306 端口。
6. 接口测试(20题)
6.1 说一下 HTTP 和 HTTPS 协议区别(80%)
-
参考答案: HTTPS 是以安全未目标的 HTTP 通道,它本身就是 HTTP 的升级版本,它比 HTTP 协议更加安全,HTTPS 的安全基础是 SSL,即 HTTP + SSL,即 HTTPS 是通过安全传输机制进行传送数据,这种机制可保护网络传送的所有数据的隐秘性与完整性,可以降低非侵入性拦截攻击的可能性。
- HTTP 是超文本传输协议,是明文传输,HTTPS 则是具备安全性的 SSL 加密传输协议;
- HTTP 与 HTTPS 协议完全不同的连接方式,HTTP 采用 80 默认端口,而 HTTPS 则是 443 端口;
- HTTPS 协议需要到 CA 申请证书,而 HTTP 协议不需要。
6.2 说一下 GET 和 POST 区别是什么(80%)
-
参考答案: GET 和 POST 是 HTTP 请求的两种基本方法,主要三种区别:
- GET 通过地址栏传输,POST 通过报文传输
- GET 参数有长度限制,受限于 URL 长度,而 POST 无限制
- GET 请求参数会被完整保留在浏览历史记录里,而 POST 中的参数不会被保留
- 使用在做数据查询时,建议用 GET 方式;而在做数据添加、修改或删除时,建议用 POST
6.3 说一下 Cookie 和 Session 的区别(50%)
-
参考答案: 作为非开发人员,并不需要深入了解 Cookie 和 Session,说三点区别即可
- Cookie 数据存放在用户的浏览器上,Session 数据放在服务器上;
- Cookie 不是很安全,别人可以分析存放在本地的 Cookie 并进行 Cookie 欺骗,考虑到安全应当使用Session**;**
- Session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面应当使用 Cookie,单个 Cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 Cookie,可以将登陆信息等重要信息存放为 Session;其他信息需要保存 Cookie。
6.4 说一说常见的请求返回状态码(70%)
-
参考答案: 在说常见状态码时一定要细说,并不是所有状态码都要记住,细说三种即可。
- 1XX: 信息提示(范围 100~101),请求已被成功接收;
- 2XX: 成功(范围 200~206),服务器成功的处理了请求;
- 3XX: 重定向(范围 300~305),为了告诉客户端,访问的的资源已被移动,并告诉客户端新的资源地址位置;
- 4XX: 客户端错误(范围 400~415),客户端向服务器发送无法处理的东西就会发生错误;
- 5XX: 服务端错误(范围 500~505),客户端发送请求有效,但服务器无法处理错误。
6.5 接口测试用例和普通测试用例的区别(40%)
-
参考答案: 接口测试和功能测试目的都是一样的,都是为了验证功能的正确性,可以把设计功能测试用例的思路用到接口测试用例中。
- 参考文档不同,功能测试用例看原型文档,接口测试用例看接口文档;
- 接口测试首先保证接口功能正常运行,输入正确的参数是否能得到正确的输出参数,考虑输入参数的异常情况(必填项、长度、类型、空值、增减参数个数),接口是否做了相应处理;功能测试用例设计思路:主要使用黑盒测试常见方法进行设计;
- 相同点:数据库入库的数据是否正确,考虑数据安全性(数据输入的安全)。
6.6 如果没有接口文档,如何做接口测试(40%)
-
参考答案: 在项目中,没有接口文档这种情况我并没有碰到过,如果没有接口文档,但是,项目是可以被访问的,就可以测试,我可以通过抓包工具或 F12 开发者工具进行抓包,网上的任何数据都可以通过抓包获取。
- 我们可以获得: 接口请求 URL 地址和端口;
- 我们可以获得: 接口请求参数;
- 我们可以获得: 接口返回数据。
6.7 都用过那些接口测试工具 ?
- **参考答案:**接口测试工具目前层出不穷,像 Postman、JMeter、Apifox,其实工具使用都差不多,也各自有自己的优缺点,这几个工具我都研究过,在实际工作中使用比较多的是 JMeter。
6.8 你们之前项目需要写接口测试用例吗?
-
参考答案: 需要写接口测试用例,接口测试用例和功能测试用例的编写思路是有区别的。
- 先看接口文档,弄懂业务逻辑,然后提取接口测试点;
- 保证接口功能正常运行,输入正确的参数是否能得到正确的输出参数;
- 考虑输入参数的异常情况(必填项、长度、类型、空值、增减参数个数),接口是否做了相应处理;
- 接口之间的调用链路是否正确,看上一个接口输出是否作为输入参数传入下一个接口中;
- 考虑接口安全性,有些设计安全的接口是否做了验签加密、当我们构造一些 SQL 注入的数据是否能正常处理。
6.9 详说 JMeter 的察看结果树
-
参考答案: 察看结果树是
JMeter
的重要元素之一,我们可以通过察看结果树清晰的分析请求数据和返回数据,请求数据包括:请求头部信息、请求Body
实体信息,返回数据包括:返回头部信息、返回Body实体信息。
6.10 详说 JMeter 的聚合报告
-
参考答案: 聚合报告是
JMeter
的重要元素之一,其实单接口测试,聚合报告并不重要,但是多场景或性能测试,就变得非常重要。通过聚合报告我们可以获得:请求取样器数量、平均响应时间、50%响应时间、90%响应时间、95%响应时间、最大响应时间、最小响应时间、失败率、吞吐量等
6.11 具体说一下 JMeter 是如何做接口测试的?
-
参考答案:
- 根据开发人员提供的接口测试文档,编写接口测试用例;
- 打开
JMeter
创建测试计划和线程组; - 右键点击线程组,创建
Http
请求; - 在
Http
请求中填写请求协议、IP
端口号、请求方法、接口地址、请求入参; - 然后添加响应断言判断接口返回是否符合预期结果;
- 最后添加察看结果树、聚合报告,用于查看结果。
6.12 具体说一下 Postman 是如何做接口测试的?
-
参考答案: 虽然在项目中
Postman
使用并不多,但是,具体如何测试我是知道- 根据开发人员提供的接口测试文档,编写接口测试用例;
- 在
Postman
使用中,一个很重要的地方是:环境变量,我们可以通过环境变量做接口关联; -
Postman
接口工具还提供了很多断言方法,最常见的断言方法无非就是:判断预期结果与实际结果是否相等; -
Postman
还有前置函数,可以完成接口请求之前的数据封装; -
Postman
也可以完成自动化,但是需要通过Newman
来实现。
6.13 说一下 JMeter 与 Postman 的区别?
-
参考答案:
Postman
功能上更简单,它主要针对的是单个HTTP
请求,比较适合做单接口测试;JMeter
针对的是测试计划比较适合做自动化接口测试;Postman
的界面美观,很多程序开发人员会选择Postman
;测试人员更多会选择JMeter
,JMeter
接口工具元素特别丰富,可以满足各种情况。
6.14 说一下 JMeter 线程组的作用?
-
参考答案:
JMeter
一个线程组就是就是模拟的一个用户- **线程数:**每个线程将会完全独立的运行测试计划(互不干扰),多个线程用于模仿对服务器的并发访问;
- **ramp-up 时间:**设置启动所有线程所需要的时间;
- **循环次数:**每个线程循环的次数,如果次数设置为1,就循环一次,如果勾选了永远,就会一直循环。
6.15 解释什么是取样器,你都用过那些取样器?
-
参考答案: 取样器允许
JMeter
通过取样器将特定类型的请求发送到服务器,一些常用的取样器包括HTTP
请求、JDBC
请求等,用的最多取样器就是HTTP
请求,它主要包含:请求协议、请求方式、请求地址、编码方式、请求数据。
6.16 说一下什么是接口断言?
- 参考答案: 断言被用于验证服务器返回结果是否符合预期结果。
6.17 你都用过那些 JMeter 断言?
-
参考答案:
JMeter
断言类型有十多种,实际操作中,我用过响应断言、JSON
断言,其它基本不怎么样使用。
6.18 说一说 JMeter 如何实现接口上下游?
-
参考答案:
JMeter
实现接口关联,非常简单也非常重要,说白了,就是一个接口的入参是另一个接口的返回参数,我们只需要将需要的参数提取出来,提取方式主要是JSON
提取器、正则表达式提取器,入参的引用我们只需要使用${参数}
(这里可以使用举例说明)。
6.19 说一说 Postman 如何实现接口上下游?
-
参考答案:
Postman
实现接口关联,我们只需要在断言的JS
代码中,把参数放入环境变量中,然后,通过{{参数}}
引用即可。
6.20 在做接口测试时,都碰到过什么样的BUG ?
-
参考答案:
-
接口常见BUG有:
- 常规错误,接口没实现,没按约定返回结果,边界值问题等;
- 输入异常值(空值、特殊字符、超过约定长度等),接口报错,没做封装处理;
- 输入错误的参数,多输入,少输入参数,接口可能出现错误;
- 安全性问题,如明文传输、返回结果含有敏感信息,没对用户身份信息做校验,没有恶意请求拦截等。
-
接口常见BUG有:
- **回答误区:**完全讲不出来
7. 性能测试(10题)
7.1 什么是性能测试、负载测试和压力测试?
-
参考答案:
- 性能测试是通过测试工具,模拟用户请求对系统的各项性能指标进行测试;
- 负载测试是在一定时间内,最大支持多少并发用户数,软件请求出错率等,测试的主要是软件系统的性能;
- 压力测试是在一定时期内,系统的
CPU
利用率,内存使用率,磁盘I/O
吞吐率,网络吞吐量等,压力测试和负载测试最大的差别在于测试目的不同。
7.2 性能测试指标有那些,怎么制定?
-
参考答案: 比较重要的性能指标有:响应时间、成功率、服务端
CPU
、服务端内存、吞吐量,在XXX 性能测试项目中,由产品经理和测试经理商量决定的性能指标,不同性能测试项目不一样,下面是我们的 XXX 项目的性能指标。
| 响应时间/ms | 成功率 | CPU | 内存 |
| — | — | — | — |
| 1500 | 99.99% | 78% | 78% |文章来源:https://www.toymoban.com/news/detail-670180.html -
回答误区: 不结合实际举例来说明文章来源地址https://www.toymoban.com/news/detail-670180.html
7.3 如何分析性能测试需求的和设计性能测试方案?
- 参考答案: 先查看需求文档,从中提取性能测试需求,最终跟甲方用户交流,结合项目实际使用情况。再结合业务操作场景总结出需测试的性能关键指标,执行用例后根据提取关键性能指标来分析是否满足性能需求。
7.4 简单描述下性能测试基本流程?
-
参考答案:
- 分析性能需求,挑选用户使用最频繁的场景来测试,确定性能指标;
- 制定性能测试计划,明确测试时间和测试环境和测试工具;
- 编写性能测试用例和性能测试脚本;
- 搭建测试环境,准备好测试数据;
- 设计测试场景,运行测试脚本,监控服务器;
- 分析测试结果,收集相关的日志提单给开发;
- 回归性能测试,当测试通过后编写测试报告。
7.5 吞吐量是什么意思?
- 参考答案: 在性能测试中,吞吐量是指在给定时间段内响应客户端请求而传输到服务器的数据量。它根据每秒请求数、每天呼叫数、每年报告数、每秒点击数等进行计算。应用程序的性能取决于吞吐量值,吞吐量值越高应用程序的性能越高。
7.6 吞吐量与响应时间关系?
- 参考答案: 吞吐量与响应时间似乎没有绝对的关系,但是一般来说,当吞吐量增多的时间,响应时间一定会增长,因为吞吐量的值越大,说明服务处理的请求越多,也即说明服务器越忙,当服务器越忙,处理业务的能力肯定会下降,所以响应时间就会变长。
7.7 性能测试准入与通过标准?
- 参考答案: 性能测试开始应该是从系统设计开始准入的,准出条件是判断测试的结果是否达到性能目标,或者说是否达到可容忍标准,具体还要以甲方验收来定。
7.8 如何找出项目性能瓶颈?
-
参考答案:
- 通过负载或压力测试,以及使用相关监控工具对结果进行监控,通过分析监控数据可以帮助分析和识别性能瓶颈;
- 使用的负载或压力测试工具
JMeter
。监控的对象通常包括:数据库、前端、后端。
7.9 如何设计性能测试场景?
-
参考答案:
- 可测量场景: 用于选择任何用户场景进行性能测试的基本标准是应完全可测量;
- 最经常访问的场景: 用户浏览应用程序时大多数访问的应用场景;
- 业务关键场景: 包含业务交易的应用程序核心方案;
- 资源强化方案: 与典型场景相比,消耗更多资源的用户场景;
- 时间依赖的常用方案: 在特定情况下访问但经常访问的应用场景。
7.10 用户面临常见的性能问题有哪些?
-
参考答案:
- 持续缓慢: 应用程序一直特别慢,改变负载,对整体响应时间影响很少;
- 随着时间推进越来越慢: 负载不变,随着时间推进越来越慢,可能到达某个阈值,系统出现大量错误而崩溃;
- 随着负载增加越来越慢: 每增加若干用户,系统明显变慢,用户离开系统,系统恢复原状;
- 稳定性差: 系统一直运行正常,持续运行后,系统突然出现大量错误或锁定。
8. Python编程(12题)
8.1 Python 的模块、类、函数、变量的命名规范?
-
参考答案:Python 命名规范在编写代码中起到很重要的作用,虽然不遵循命名规范,程序可能也可以运行,但是使用命名规范可以更加直观地了解代码所代表的含义,规则有如下:
- 不能以数字开头,不能出现中文;
- 命名以字母开头,包含数字,字母(区分大小写),下划线;
- 不能包含关键字,见名知意。
8.2 说一说什么是面向对象?
-
参考答案:
- 面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做;
- 面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如 抽象、分类、继承、聚合、多态等。
-
三大特征:
- **封装:**每个类可以自由地定义属性和方法,封装可以隐藏对象的内部细节,使其对外形成一道边界,只保留有限的属性和方法与其他对象进行交互。封装的原则是使对象以外的部分不能随意的访问和操作对象的内部属性,从而避免了外界对对象内部属性的破坏;
- **继承:**子类可以轻松地复用父类的代码(非私有修饰的属性和方法),如果父类的属性不满足子类的需求,可以追加;如果父类的方法不满足子类的需求,可以覆盖。
- **多态:**父类中定义的方法被子类继承之后,可以表现出不同的行为。这使得同一个方法在父类及其各个子类中具有不同的语义。例如:“椭圆"和"多边形"都是"几何图形”,假如它们都有一个名叫"绘图"的方法的话,方法内容肯定是不同的。
8.3 说一说5个 Python 标准库?
-
参考答案:
-
math 库: 提供了数学常数和数学函数
-
举例说明:
math
标准库还包含了random
包,用于处理随机数相关的功能,也是我工作中用的比较多的库
-
举例说明:
-
datetime 库: 日期和时间的操作库
- 日期和时间的管理并不复杂,用的比较多,就是创建当前时间,时间格式化输出
-
os库: 提供了不少与操作系统相关联的函数库
-
os
库中用的比较多的是:文件操作相关,查找、删除、复制文件以及列出文件列表等都是常见的文件操作
-
- **sys库:**通常用于命令行参数的库
-
sys
包被用于管理Python
自身的运行环境
-
-
random库: 用于生成随机数的库
- 我作为测试人员,在工作中使用最多的库之一,其中的
random
函数,可以生成随机浮点数、整数、字符串,甚至帮助你随机选择列表序列中的一个元素等。
- 我作为测试人员,在工作中使用最多的库之一,其中的
-
math 库: 提供了数学常数和数学函数
8.4 Python 如何实现列表去重?
- 参考答案:最简单的方法:通过集合去重,把列表的数据放在集合中,然后转换成列表,可以完成去重
# set()列表去重
list1 = ['a', 'b', 1, 3, 9, 9, 'a']
list2 = list(set(list1))
print(list2)
8.5 Python 如何对列表数据排序?
-
参考答案: 列表有一个函数
sort()
,默认是升序,里面有一个参数reverse
参数,传True就是降序,传False就是升序
list = [1, 2, 4, 5, 66, 2]
list.sort() # 升序
list.sort(reverse=True) # 降序
print(list)
8.6 Python 如何操作文件?
-
参考答案: 用
Python
操作文件的第一步就是打开文件,第二步就是具体操作文件(包括读写文件),打开文件的方法就是在open()
功能中传一个参数再给它指定我们要打开的文件的,最后一步就是关闭文件。
8.7Python 随机生成有效电话号码实现思路?
- 参考答案: 随机生成手机号码,作为自动化测试人员很重要,我的实现思路是:可以生成任何手机号码,包括错误手机号码,因为在测试时,我们除了正向用例,还需要考虑反向用例,先把号段存放在列表,每次调用函数时,可以随机获取一个一个号段,然后,生成一个随机的8位数字,拼接起来后,就变成了一个完整的手机号码。
def random_phone_num(digit=11):
"""生成指定位数随机手机号码"""
num_start = ['134', '135', '136', '137', '138',
'139', '150', '151', '152', '158',
'159', '157', '182', '187', '188',
'147', '130', '131', '132', '155',
'156', '185', '186', '133', '153',
'180', '189']
# 从列表中随机取出一个元素
start = random.choice(num_start)
end = ''.join(random.sample(string.digits, digit - 3))
return start + end
8.8 Python 随机生成字符串的实现思路?
- 参考答案: 我获取随机字符串思路:先把需要获取的字符串存放到一个变量中,然后根据我们传入长度,进行循环拼接,并返回一个随机字符串。
def generate_random_str(randomlength=8):
"""成一个指定长度的随机字符串"""
base_str = 'ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789'
# 思考为什么要-1
length = len(base_str) - 1
random_str = ''
for i in range(randomlength):
random_str += base_str[random.randint(0, length)]
return random_str
8.9 如何在一个函数内部修改全局变量?
-
参考答案: 可以使用
global
关键字来重新赋值,具体使用参见下方:
count = 100
def update_num():
global count
count = count + 1
update_num()
print("更改后的值:",count)
8.10 Python 的列表和集合的区别?
-
参考答案:
-
集合的特点:
- 可以用
set()
函数或者方括号{}创建,元素之间用逗号分隔; - 不可索引,不可切片;
- 不可以有重复元素。
- 可以用
-
列表的特点:
- 可以用
list()
函数或者方括号[]创建,元素之间用逗号分隔; - 使用索引来访问元素,可切片;
- 可以有重复元素。
- 可以用
-
集合的特点:
8.11 Python 如何连接数据库的?
-
参考答案:
- 要想让
Python
能够连接到MySQL
,首先就是要先下载安装pymysql
的模块
- 要想让
pip install PyMySQL
- 导入
pymysql
模块,创建一个连接MySQL
的类对象,并定义初始化需要的变量
import pymysql
# 打开数据库连接
conn = pymysql.connect(host='localhost',
port=3306,
user='root',
passwd='password',
charset = 'utf8'
)
- 通过
connect
连接赋予给游标对象,后续操作数据库都使用这个cursor
,然后调用execute
方法来执行数据库脚本,可以使用fetchall()
函数来遍历数据,以及close()
函数来关闭数据库连接。
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = conn.cursor()
# 使用 execute() 方法执行 SQL 查询
cursor.execute("select * from tables_name")
# 使用 fetchone() 方法获取单条数据;使用 fetchall() 方法获取所有数据
data = cursor.fetchall()
for item in data:
print(item)
# 关闭数据库连接
cursor.close()
8.12 Python的函数,有不确定的参数如何做?
-
参考答案:
Python
中,函数的参数可以是不确定个数的,需要特别注意:参数*args
要放在参数列表的最后,其格式如下所示:
def test(a,*args):
pass
9. 自动化测试(12题)
9.1 请描述一下自动化测试流程?
-
参考答案: 自动化测试流程,首先要分析这个项目有没有必要做自动化,做自动化依据为:像项目不稳定时,项目需求频繁更改时,一次性测试案例时,这三种情况就不适合做自动化测试。
- 自动化具体实施流程:
- 编写自动化测试计划
- 编写自动化测试框架和测试脚本
- 调试并维护脚本
- 进行自动化测试
- 脚本维护和修改人们不应该在以下情况下自动化
- 自动化具体实施流程:
9.2 你是如何做接口自动化测试的?
-
参考答案: 这里以 Web 自动化流程来细说,虽然,我已经做了几年多的软件测试工作,但是,Web 自动化这一块做的并不是特别多,只在最近一两个项目中做过,我就结合最近一个项目来说说,我主要采用的是
Python
+Selenium
+Unitest
+HTMLTestRunner
来实现的接口自动化,具体步骤- 创建一个UI自动化工程项目
- 我主要使用的是
PO
模式-
Common
层,主要用于配置一些基本信息,也会把一些公用方法模块放这个包中,还有统一元素定位模块 -
testCase
层,主要编写测试用例 -
testReport
层,主要存放HTML
测试报告内容 -
tool
层,主要存放工具类(随机手机号码、随机字符串等等)
-
- 我使用的
Unitest
测试框架,这也是我比较熟悉的测试框架,我具体说说如何使用该测试框架吧- 首先,导入
Unittest
框架模块 - 其次,一个类需要使用
Unittest
,必须继承TestCase
类,当一个类继承TestCase
类后,就可以使用父类的各种断言方法,关于断言方法,用的比较多的还是直接判断预期结果是否与实际结果相同 - 最后,也是最重要的部分,需要测试用例模块,需要遵循它的命名规则(模块名称必须是
test
开头,函数方法必须是test
开头),还有一个注意点,就是Unittest
用例有执行顺序,特别是用例执行有先后顺序时,需要注意(它的顺序时先数字,后字母)
- 首先,导入
- 生成测试报告,以及发送邮件
- 关于
HTML
报告,我采用的HTMLTestRunner
的插件,直接把需要执行的测试用例集对象传入即可完成HTML
报告生成,最后报告生成完成后,发送通知邮件即可。 - 发送邮件之时其中一种方式,根据项目要求来,如果有需求实现发送钉钉,飞书都可以。
- 关于
9.3 简单介绍一下 Requets 库?
-
参考答案:
Requets
库,是Python
做接口自动化必须掌握的库,而它支持的方法也很多,但是最常见的方法只有两个,第一个是Post
方法、第二个是Get
方法,我具体说一说Post
和Get
方法使用和区别- 使用
Post
方法和Get
方法,都需要封装请求参数,和请求的URL
地址(如果有需要传入headres
,不管时Post
方法还是Get
方法都是一样) -
Get
请求传参,主要传入到params
参数中,而Post请求参数,大多数都是JSON
格式数据,所以,主要传入到JSON
中 - 它们还有一个很重要的相同点,不管传入什么类型的参数,封装之时都是采用字典形式封装
- 使用
9.4 具体说一说Unittest测试框架?
-
参考答案:
Unittest
是Python
标准库,自带的单元测试框架,所以不需要安装,如果要使用Unittest
,需要先导入Unittest
,然后集成TestCase
类,Unittest
有多种断言方法
9.5 具体说一说Pytest测试框架?
-
参考答案:
Pytest
是第三方库,所以使用前需要安装:pip install pytest
,PyTest
并不需要集成,而时直接使用Python的断言关键字assert
9.6 Unittest 与 Pytest 测试框架的区别?
-
参考答案:
-
Unittest 规则:
- 首先需要导入
unittest
- 测试类必须继承
Unittest.TestCase
- 测试方法必须以
test_
开头 - 测试类必须要有
Unittest.main()
方法
- 首先需要导入
-
Pytest 规则:
- 测试文件必须以
test_
开头 - 测试方法必须要
test_
开头 - 测试类的命名要以
Test
开头 - 运行不需要
main
方法
- 测试文件必须以
-
断言方法:
-
Unittest
提供很多断言,如:assertEqual
、assertIn
、assertTrue
、assertFalse
-
Pytest
提供assert
表达式,简单,方便(断言,主要使用逻辑运算符)
-
-
测试报告:
-
Unittest
使用HTMLTestRunner
库完成HTML
格式报告输出 -
Pytest
有pytest-HTML
插件完成HTML
格式报告输出
-
-
Unittest 规则:
9.7 接口自动化如何做接口关联测试?
-
参考答案: 所谓上下游接口自动化测试,跟
JMeter
工具测试概念一样,一个接口的入参需要依赖另一个接口的返回参数-
实现方式一:
可以把一个接口的返回数据,单独封装成公用函数,并把数据返回出去,比如登录接口,我就可以封装成公共方法,当需要token时,就去调用拿去token值,但是,这种方式有一个弊端,就是增加了接口的调用次数 -
实现方式二:
可以使用Python的global关键字来声明变量,使用global声明的变量称为全局变量,全局变量一旦声明成功,其他测试用例的函数就可以进行访问,但是,需要确保全局变量已经被声明
-
实现方式一:
9.8 谈谈你对PO模式理解?
-
参考答案:
-
PO
模式是page object
的缩写,是一种设计模式; -
PO
模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性。 - 我主要使用的是
PO
模式分为:-
Common
层,主要用于配置一些基本信心 -
testCase
层,主要编写测试用例 -
testReport
层,主要存放HTML测试报告内容 -
tool
层,主要存放工具类(随机手机号码、随机字符串等等)
-
-
9.9 做 Web 自动化如何处理验证码?
-
参考答案: 这个问题很重要,被问几率也很高
- 上线前可以找开发先把验证码注释掉,或者让开发预留一个万能验证码,只能在测试环境用;
- 使用验证码识别技术,
Python
下面的第三方库可以识别验证码,但是识别成功率并不高。
9.10 显示等待与隐式等待的区别?
-
参考答案: 首先要知道什么是显示等待、隐式等待
-
隐式等待:
- 隐式等待是一种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素,如果找到则代码继续执行,直到超时没找到元素才会报错,也就是说如果在第三秒找到元素,则剩下的7秒不会被等待
- 隐式等待是一个全局性等待,一旦设置则针对设置以后的所有
findElement
方法生效,仅仅针对查找元素生效,每一个findElement
方法都是重新计时,都是10秒 - 可以随时更改隐式等待,更改后针对他以后的所有
findElement
方法生效
-
显式等待:
- 显示等待也是一种智能等待,在指定超时时间范围内只要满足操作的条件就会继续执行后续代码,如果不满足条件则会一直等到超时
- 示等待是针对单一元素或者一组元素生效
-
隐式等待:
9.11 抓取不到元素可能是什么原因?
-
参考答案: 在 Web 自动化中,一般先要找到需要操作的元素对象,然后进行操作,定位元素成功与否,决定了你的用例的成败。所以定位元素很重要。在刚开始做 Web 自动化时,经常碰到元素抓取不到情况,我自己总结可能是这几个原因:
-
Frame/Iframe
原因定位不到元素,这里需要使用switch_to.frame()
来切换Frame
; - 定位元素不当,比如,使用
Xpath
,由于Xpath
层级太复杂,容易犯错。但是该定位方式能够有效定位绝大部分的元素; - 页面还没有加载出来,就对页面上的元素进行的操作,这种情况可以使用元素的隐式等待或显示等待,建议使用显示等待;
- 不可见元素定位,一个元素本来就是不可见的,需要触发某一个操作,才能进行定位;
- 弹出框或多窗口定位,需要切换到弹出框和其他浏览器窗口。
-
9.12 具体聊一聊自动化测试的作用?
-
参考答案:
-
缩短测试周期:
- 计算机行业更新迭代快速、大量频繁的回归测试会消耗大量的测试时间,自动化测试能够将重复的测试实行交给计算机去做,从而加快了测试速度;
-
避免人为出错:
- 测试人员额不可能持续高度集中注意力,并且人类易受外界和自身的影响(头痛脑热、精神不振)可能会造成人为错误;
-
测试信息存储:
- 自动化测试将测试信息和测试数据存储在文件中,思路清晰明确、方便交接;
-
提高覆盖率:
- 自动化测试能够解放测试人员,从而使测试人员有更多的精力去做那些重复性的工作。
-
缩短测试周期:
10. 扩展性问题(其它问题)(4题)
10.1 假若系统慢,如何查找问题?
-
参考答案: 系统慢的问题,并不是一个普通测试可以解决的,高级测试工程必须要会的问题
- 查询应用服务器,数据库服务器
CPU 使用率
、CPU负载
、带宽
、内存
- 查询数据库,查询正在执行的
SQL
,顺便也去慢查询日志文件 - 通过
explain
分析具体SQL
问题(查询语句本身设计的缺陷导致) - 让开发人员协调,是否是应用程序出现问题
- 检查是网络是否存在问题
- 查询应用服务器,数据库服务器
10.2 如何测试一个杯子?
-
参考答案: 一定要记住,给任何东西让我们去测试,都是站在测试角度:我们可以从功能测试、界面测试、性能压力测试、安全性测试、易用性测试
-
功能测试
- 能否装水,除了装水, 能否装其他液体。比如可乐,酒精
- 能装多少
ML
的水,杯子是否有刻度表 - 杯子能否泡茶,跑咖啡,杯子是否能放冰箱,做冰块
- 杯子的材质是什么(玻璃,塑料,黄金做的)
-
界面测试
- 什么颜色,外观好不好看,杯子的图案是否合理
- 杯子的形状是怎么样的
- 杯子的重量是多少
- 杯子是否有异味
-
性能压力测试
- 能否装100度的开水或泡茶,能否装0度冰水
- 装满水放几天后,是否会漏水
- 杯子内壁上的涂料是否容易脱落。
- 杯子上的颜色是否容易褪色或者脱落
-
安全性测试
- 制作杯子的材料,是否有毒
- 放微波炉里转的时候,是否会爆炸, 或者杯子是否会熔化。
- 从桌子上掉到水泥地上是否会摔碎。
- 杯子是否容易长细菌
- 杯子内壁上的材料,是否会溶解到水中
- 杯子破碎后,是否会对使用者造成伤害
-
易用性测试
- 杯子是否容易烫手,杯子是否好拿
- 杯子的水是否容易喝到,杯子是否有防滑措施
-
功能测试
10.3 微信聊天怎么测试?
-
参考答案: 微信聊天框的主要功能就是发送消息和接收别人发过来的消息,我们可以如下几方面来回答
- 消息的分类: 纯文字,图片,文件,表情,语音、视频,文字+表情
- 聊天的特殊功能:@符号、撤回功能、消息重发、发送位置信息、发送名片等功能
-
具体测试:
- 发送纯文字,图片,文件,表情,语音、视频,文字+表情消息,发送功能是否正常
- 接收纯文字,图片,文件,表情,语音、视频,文字+表情消息,接收功能是否正常
- 测试图片,文件,语音,视频,文字的最大值测试
- 是否支持群发文件、群聊文件
- 是否支持语音转文字
- 发送语音聊天、视频聊天时,是否有声音提示
- 发送失败后,是否支持消息重发
- 消息发送后,是否支持在一定时间范围内可以撤回功能,超出时间范围,是否还支持
- 发送名片、发送位置信息功能是否正常
- 语音聊天、视频聊天相互转换功能是否正常
- 发送语音聊天、视频聊天时,长时间未接听,是否有提示
- 群聊:发送消息是否所有成员全部可见
- 群聊:@单个人,多个人,全部人时,对象是否会收到提醒
- 群聊:发起群视频,群语音时,所有被邀请的成员是否能加入群聊
10.4 腾讯视频播放器如何设计测试点?
-
参考答案: 腾讯视频播放设计用例点
- 视频资源可以正常获取,不管是服务器返回还是后台添加等、
- 视频的封面图、页面 UI 等正常
- 若一个视频中涉及到上一个视频、下一个视频时点击后都能正常切换到相应的视频,且视频正常播放
- 音量大小(如静音模式下播放时无声音)
- 视频最大化、最小化(如切换到最大化时视频全屏播放)
- 播放列表的播放顺序,单循环,多循环,顺序播放,随机播放(还需要考虑下视频若是后台上传的,若在后台将某视频进行增加,删除,修改操作,验证视频播放是否正常)
- 点击视频时,视频正常播放;再次点击时暂停播放资源
- 播放视频时应用切换到后台—切换到后台后暂停播放,再次进入应用为暂停状态
- 播放时杀掉程序进程—视频播放结束,不保留观看进度,再次进入到该视频,从头播放
- 播放视频A时切换到视频列表下的视频B----播放视频B;从进度B开始播放
- 播放视频A时切换到其他项目下的视频C—播放视频C;再次切换到视频A时从头播放
- 播放时上下滚动页面—视频播放器位置恒定,滚动不影响播放
- 播放器是否与其他类型播放器兼容
- 网络切换测试:WiFi-移动网、移动网-WiFi、WiFi-无网、无网-WiFi、无网-移动网
- 无网进入时是否有提示
- 播放过程中断网时,播放完已加载的部分后停止播放且有相应提示
- 播放中切换到后台,切换到后台后暂停播放,再次进入视频为暂停状态
- 是否具备播放记忆功能
到了这里,关于软件测试高频面试题(2023全新版)你必须掌握的面试技巧,包含HR面试、基础面试、JMeter面试、Postman面试、Python面试、自动化化面试、安全性能面试题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!