三月底被上家公司裁员后,4月份找了大概一个月的工作,接下来几篇文章主要是在公众号整理记录一下其中的一些面试题。
这篇文章主要记录的是东方甄选的测开面试题。
面试机会是猎头推荐简历获得的,当时东方甄选的那个hr不知道怎么搞的,发的线上面试链接,但是电话通知我去现场面试。面试当天下午5点到达海淀黄庄站附近的他们公司楼下。给hr打电话根本打不通,然后联系猎头,猎头再联系他们公司才有人接应。进去以后,另一个hr带我到走廊的一个小桌子就坐,一次性杯子接了杯水,然后去找面试官,面试官去开会了。。。
无奈之下,hr说她先面我,然后她开始问问题,下面是具体问题
就称之为一面吧
1.什么时候离职?出来前了解过市场行情吗?
这个问题就按情况和自己的想法说了说。
2. 上家公司是超市吗?主要做哪些业务?
这块我解释一下,因为上家公司名字和北京某超市很像,所以她会有这个疑问。主要做的业务也就是公司那些出海业务,我大概讲了讲公司的主要业务 + 自己主要负责的业务 + 自己负责的业务里面做的比较好的
3. 在上家公司感觉最有成就的事情是什么?你在这件事情里面的收获有哪些?最大的是什么?
最有成就感的事情:从零开始跟一个项目,到日活两百多万,自己一个人负责安卓、ios、服务端的侧开工作。
收获很多,比如技术方面的自己调研实践的一些自动化、从零开始的服务端接口压测(之前没有压测经验)等,流程方面的CICD相关流程建设等等。巴拉巴拉说了一堆。
收获最大的是:很多事情在之前的工作中没有接触过,这个项目中有了了解和实践经验。
4. 如何评判一个测开是好测开?有哪些指标?如何量化?
这个问题我当时答得不是很全,后来网上找了找,贴在这里。
评判的一些指标
1. 技术能力
编程基础与自动化测试技术:
精通至少一种编程语言(如Python、Java、C#等),能够编写高效、可读性强的测试代码。
熟练掌握自动化测试框架(如Selenium、Appium、TestNG、JUnit、pytest等),能够设计并实现自动化测试脚本。
理解持续集成/持续部署(CI/CD)流程,能将自动化测试集成到Jenkins、GitLab CI/CD、Azure DevOps等工具中。
测试工具与技术栈:
熟悉各种测试工具的使用,如性能测试工具(LoadRunner、JMeter)、接口测试工具(Postman、SoapUI)、静态代码分析工具、缺陷跟踪工具(Jira、Bugzilla)等。
理解和掌握现代测试技术,如BDD(行为驱动开发)、TDD(测试驱动开发)、Docker容器化测试、云测试平台等。
测试架构与框架设计:
能够设计和实施合理的测试架构,包括分层测试(单元测试、集成测试、系统测试、端到端测试)和持续测试策略。
能够构建和维护自动化测试框架,提高测试代码的复用性和可维护性。
质量保障体系:
熟悉软件质量模型、测试度量与指标,能够参与或主导测试策略制定与测试计划编写。
了解常见的测试方法论,如敏捷测试、探索性测试、回归测试等,能根据不同项目特点灵活应用。
2. 专业知识
软件工程与开发流程:
对软件开发生命周期(SDLC)有深入理解,熟悉敏捷开发、DevOps等现代开发模式。
熟悉软件架构原理,能从测试角度理解和评估系统架构的风险。
软件质量保证理论:
掌握软件缺陷分类、严重程度与优先级设定原则,能够准确识别和记录问题。
了解软件可靠性、性能、安全性、兼容性等非功能性测试领域知识。
行业标准与法规:
对所在行业的相关标准(如ISO、IEC、IEEE等)有一定了解,能确保测试活动符合合规要求。
对特定领域的法规(如数据保护、隐私法规等)有所认识,能够指导测试覆盖相关的合规性测试。
3. 软技能
沟通协作:
具备良好的团队合作精神,能够有效地与开发、产品、运维等多方沟通协调,推动问题解决。
能够清晰、准确地表达测试需求、测试结果及风险,撰写高质量的测试报告。
问题解决与创新思维:
显示出较强的分析和解决问题的能力,面对复杂问题能快速定位原因并提出解决方案。
具备创新意识,能引入新的测试技术和方法提升测试效率和质量。
学习与适应能力:
保持对新技术、新工具的关注和学习,能够快速适应技术变化和项目需求变更。
能够主动分享知识,帮助团队提升整体技术水平。
4. 业务理解与影响力
业务知识:
对所测试产品的业务逻辑有深入理解,能从业务角度出发设计测试用例,确保测试的有效性。
能够参与需求评审,从测试角度提出改进建议,影响产品设计和开发决策。
风险意识与决策力:
具备敏锐的风险识别能力,能提前预见潜在问题,制定应对策略。
在有限资源下做出明智的测试优先级决策,确保关键路径和高风险区域得到充分测试。
项目管理能力:
能够合理规划测试任务,跟踪进度,确保测试活动按时完成。
能够在项目压力下保持冷静,有效应对突发事件,保证测试工作的连续性。
综上所述,评判一个优秀的测试开发工程师不仅要看其技术硬实力,还要考察其在团队协作、业务理解、问题解决等方面的综合表现,以及对软件质量保障的深入理解和实践。这样的工程师不仅能高效地完成测试任务,还能积极推动产品质量提升和团队协作优化,成为项目成功的重要保障。
量化评估的指标:
评价一个优秀软件测试开发工程师时,除了定性的评价标准外,也可以借助一系列量化指标来客观衡量其工作成效和专业能力。以下是一些可用于量化评估的指标:
1. 自动化测试覆盖率
代码覆盖率:统计自动化测试用例覆盖源代码的程度,如语句覆盖率、分支覆盖率、条件覆盖率等。高覆盖率意味着更多的代码逻辑得到了自动化测试的验证。
功能覆盖率:衡量自动化测试对产品功能点的覆盖情况,可通过功能点清单与已实现自动化测试用例的比对来计算。
场景覆盖率:评估自动化测试对典型用户场景、异常场景以及边界条件的覆盖水平。
2. 自动化测试有效性
缺陷发现率:计算自动化测试运行期间发现的缺陷数量占总缺陷数的比例,反映自动化测试在揭示软件问题方面的效率。
回归测试效率:比较引入自动化回归测试前后,每次迭代或版本发布时发现回归缺陷所需的时间或人力成本的减少幅度。
假阳性/假阴性率:统计自动化测试误报(假阳性)和漏报(假阴性)的情况,评估自动化测试的准确性。
3. 测试效率与生产力
测试执行速度:测量自动化测试集的平均执行时间,以及与手动测试相比的时间节省比例。
测试用例维护成本:跟踪自动化测试用例的更新频率、每次更新所需工时,以及因软件变更导致的废弃测试用例比例。
持续集成(CI)中自动化测试的稳定性:统计自动化测试在CI流水线中失败的次数、失败率以及修复时间,反映自动化测试对CI流程的影响。
4. 测试代码质量
测试代码可读性与可维护性评分:采用代码审查、代码质量分析工具(如SonarQube)对测试代码进行量化评估。
测试代码复用率:计算测试代码中通用组件、模块的使用情况,反映测试框架的模块化程度和代码复用水平。
5. 个人贡献与影响力
缺陷报告质量:统计缺陷报告的完整性(如是否包含重现步骤、预期结果、实际结果、附件等)、及时性(报告提交与问题发生时间间隔)以及被开发团队接受的比例。
知识分享与培训:记录工程师进行内部培训、撰写技术文档、解答团队疑问等知识传播活动的频次与效果。
技术创新与工具改进:评估工程师引入的新工具、新技术、新方法对团队效率提升的具体贡献,如通过引入新的测试框架减少了多少手动工作,或通过优化测试环境提升了多少测试速度。
6. 项目与团队协作
需求理解与反馈:统计工程师在需求评审阶段提出的问题、建议被采纳的比例,反映其对业务理解的深度和对产品改进的影响力。
任务完成及时率:计算工程师按时完成分配测试任务的比例,以及延期原因分析。
跨部门协作评价:收集开发、产品、运维等部门对测试工程师协作态度、沟通效果、问题解决能力等方面的评分或反馈。
通过上述量化指标的综合分析,可以更加客观、精准地评价一个软件测试开发工程师的专业素质、工作
5. 在上家公司有哪些工作是由你推动完成的?
很多事情是我推动的,比如项目的压测,之前公司没有这方面的技术积累,后来还搭建了一个压测平台全公司可用,还有一些sonar代码质量检测、安全检测等,还有接口自动化测试平台,在我来这公司之前这些都没有。
6. 你在之前的经历中,你觉得可以复用到后面工作中的经验有哪些?
首先就是技术技能,就平时测开常用的一些技术栈可能可以比较容易地f复用,然后就是一些业务的积累在后面测试中有可能可以复用,再者就是一些流程建设方面的经历有可能可以复用balablabla
7. 之前的薪资是多少?期望薪资是多少?
这个就如实回答了
hr面完大概30多分钟,这时候技术面试官开完会了,过来接着面
就称之为二面吧
1. 简单做个自我介绍
这个传统的环节就是提前准备好然后一顿balabala就行
2.简历中写的游戏测试,是怎么测试的?关注哪些点?为什么?
这个也和实际项目有关,就不展开了,主要就是一个三消类和一个肉鸽类游戏。
3.讲一讲测过的你认为最复杂或者最有挑战性的项目?为什么是这个项目?你在其中做了哪些?
这里讲了自己刚进公司接手的一个项目,当时那个项目接口200多个,我以为很复杂了,balabala讲完以后,大佬说了一句,200多个在我们这里算是小项目哈,我这没见过世面的样子。。。。。。
4. 讲一讲你觉得你测过的影响最深刻的项目?让你收获最大的项目?你收获了什么?
和hr那个问题答得差不多,不展开了。
5. 接口压测怎么做的?关注哪些指标?为什么关注这些指标?遇到了什么问题?什么原因导致的这个问题?怎么解决的?
这个问题就把自己第一次做接口压测的那些过程、问题等等都展开讲了一遍,没啥卡顿,还算流畅。
6. 接着接口压测,你说只压测了首页这种访问量大的几个接口,假如某个接口不是在首页这种能直接看到的地方,但是他被其他接口调用的次数很多,要不要压测?个人中心这种页面要不要压测?
按自己的理解回答了一下,大佬没继续追问
7. fiddler怎么抓https的包?为什么要配置代理?
讲了讲大概的配置,以及扯了一下ssl有关的一些概念
8. 第三方支付,如果没有测试环境只有线上环境,你要怎么测试?为什么这么测试?这么测试的弊端有哪些?
他们主要做国内的业务,所以想问国内的支付测试,我开始讲的都是国外谷歌的沙河测试。后来沟通后才明白是要我说国内的,我说明了没有这方面经验,但是想了挡板和线上小额支付这两个方案,展开讲了讲但是没答好。
9. 讲一讲python的字典和列表的区别?
这个首先说了一些用法上的区别,然后聊到了时间复杂度,又讲了讲两个容器底层的实现是两种不同的存储方式,一个内存连续一个不连续balabala
10.一个数组nums=[1,1,0,0,0,1,0,1],口述如何实现返回 nums=[1,1,1,1,0,0,0,0]?
这个当时我用的暴力解法,后来刷了刷题才学会可以用快慢指针
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
使用快慢指针
"""
slow = 0
for fast in range(len(nums)):
if nums[fast] != 0:
nums[slow], nums[fast] = nums[fast], nums[slow]
slow += 1
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保证100%免费】