一、软件测试基础面试题1、阐述软件生命周期都有哪些阶段? 常见的软件生命周期模型有哪些? 软件生命周期是指一个计算机软件从功能确定设计,到开发成功投入使用,并在使用中不断地修改、增补和完善,直到停止该软件的使用的全过程(从酝酿到废弃的过程) 生命周期从收到应用软供开始算起,到该软件不再使用为止。 它有如下各方面的内容: 初始构思、需求分析、功能设计、内部设计、文档计划、测试计划、文档准备、集成、测 试、维护升级、再测试、逐步淘汰 (phase-out)、等等 常见的软件生命周期模型: 瀑布模型,迭代式模型,快速原型模型,螺旋模型 2、什么是版本控制,常用的版本控制系统有哪些? 版本控制 (Revision control) 是一种软件工程技巧,在在开发的过程中,确保由不同人所编辑的司一文件都得到更新及历史记录的保存。Git(读音为/git/。)是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 https://git-scm.com/docSVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设 计目标就是取代CVs .互联网上很多版本控制服务已从CVs 迁Subversion移https://tortoisesvn.net/support.htm 3、简述软件测试与软件开发之间的关系? 1.项目规划阶段:负责从单元测试到系统测试的整个测试阶段的监控。 2.需求分析阶段:确定测试需求分析、系统测试计划的制定,评审后成为管理项目。测试需求分析是对产品生命周期中测试所需求的资源配置、每阶段评判通过的规约,系统测试计划则是依据软件的需求规格说明书,制定测试计划和设计相应的测试用例。 3.详细设计和概要设计阶段: 确保集成测试计划和单元测试计划完成。 4.编码阶段: 由开发人员进行自己负责部分的代码的测试。在项目较大时,由专人进行编码阶段的测试任务 5.测试阶段(单元、集成、系统测试) : 依据测试代码进行测试,并提交相应的测试状态报告和测试结束报告开发和测试是一个有机的整体!在产品的发布之前,开发和测试是循环进行的, 测出的缺陷要经开发人员修改后继续测试。在开发的同时测试经理开始编写测试用例,测 试文档要参考开发文档,所以开发和测试是不可分割的,少了任何一个都不能开发出产品。从角色方面看,像理论和实验的关系,开发人员通过自己的想象创造出一套思想,之 后测试人员再对它进行检验、证伪,开发人员再修改的过程从而不断丰富产品。 从方法方 面看,是演绎和归纳的关系,一个要掌握大量的技术一个要不断的从实例中学习。因这 两方面的不司,所以开发和测试看上去做的工作很不一样开发与测试是相辅相承、密不可分的,开发人员开发出新的产品后要通过测试判断产 品是否完全满足用户的需求。如果发现缺陷,提交给开发人员进行修复,然后再转交测试 人员进行回归测试,直到产品符合需求规格说明。符合用户需求的产品是开发和测试 共同努力的成果 4、请根据”V”模型分别概述测试人员在软件的需求定 义阶段、设计阶段、编码阶段、系统集成阶段的工作任务及其相应生成的文档? 需求定义阶段:根据项目需求提取测试需求 并形成测试需求文档,根据提取的测试需求和项目计划进行测试计划的拟定,测试计划文档 设计阶段: 根据测试需求拟订测试方案并形成测试方案文档,根据测试方案制定测试用例,并形成测试用例文档 编码阶段:执行测试并完善测试用例文档 系统集成阶段:测试总结报告,阶段问题统计报告,测试问题报告 5、W 模型的描述? W 模型也称之为双V 模型,一个V 是开发的生命同期,另一个V 是测试的生命周期,W 模型与V模型有一个很大的不同,就是W 模型是一个并行的模型,V 模型是一个串行的模型,W 模型开始是从需求分析开始就开始了,而不是等到编码完成后才开始。 并且测试阶段的划分更清楚,而不仅仅是单元测试、集成测试、系统测试,还包括前期的测试计划、测试方案等内容,这更符合现在企业测试的流程。W 模型强调测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序需求、设计等同样要测试,也就是说,测试与开发是同步进行的。W 模型有利于尽早全面地发现问题。 从需求分析开始测试工程师就参与到项目的测试中,当需求分析完成后,测试工程师就需要参与到需求的验证和确认活动中,并需要提供可测试性需求分析说明书,这样可以尽早地发现需求阶段的缺陷。同时,对需求的测试也有利子及时了解项目难度和测试风险,及早制定应对指施,这将显著减少总体测试时间,加快项目进度。 但W 模型也存在局限性,需求、设计、编码等活动被视为是串行的,同时,测试和开发活动也保持着一种线性的前后关系,上一阶段完全结束,才可正式开始下一阶段工作,这样就无法支持迭代的开发模型。对于当前软件开发复杂多变的情况,W 模型并不能解除测试管理面临的床惑。 总之W 模型具有以下特征: (1)测试阶段戈分得更全面,不仅仅是单元测试、集成测试和系统测试, (2)测试与开发是并行的,从需求测试就应该开始介入 (3)提出尽早测试的概念,这样可以险低缺陷修复成本; (4)测试对象不仅仅是程序,还包括需求或其他的相关文档 6、编写测试计划的目的是? 使测试工作顺利进行,使项目参与人员沟通更舒畅,使测试工作更加系统化 7、测试计划编写的六要素? why一一为什么要进行这些测试 what一测试哪些方面,不同阶段的工作内容 when一测试不同阶段的起止时间 where一相应文档,缺陷的存放位置,测试环境等 who一项目有关人员组成,安排哪些测试人员进行测试 how一如何去做,使用哪些测试工具以及测试方法进行测试。 8、项目版本执行过程中,测试人员如何把控测试进度? 在项目的系统测试过程中,测试负责人要及时了解测试进度,跟踪 BUG 提交、修复及验证情况以及系统的拷机情况。在开发初期阶段,测试组执行BBFV 时,很多模块、功能点的开发完成进度和原计划会存在一定的偏差,就需要测试负责人动态的刷新WBS 计划,根据实际的开发进度调整测试计划。 在开发阶段,存在版本编译不出来导致无法测试,开发人员修复代码太随意导致版本稳定性反复,需求变更过大导致后端测试开发变更严重等现象,会导致测试工作无法正常进行。 就需要测试负责人及时反馈出来,根据项目本身的特点讲行对应的处理。当测试进度出现延期时,要及时确认问题原因如果是问题协查导致,则需及时与研发人员进行沟通协商,看问题是否必须在测试环境进行排查,若为必现问题可与研发协商要求其在自己环境进行排查,若必须占用测试环境,则需及时调整测试计划,若因此可能影响版本的发布,则应及时与 SE 确认。 若发现有较多BUG 未解决,则应主动联系 SE 及研发人员召开BUG 会确定问题的解决时间。若发现有较多BUG未验证,则应提醒项目组的测试人员及时进行验证,对于一些拷机或非必现的BUG,建议测试人员在此 BUG 上现做拷机标记连续拷机一周未再复现的做关闭处理,若再次复现则继续进行排查。疑难问题的跟控: 比较难复现的问题,怎么去尝试复现。 比较难定位的问题,怎么驱动、反馈给SE,协调开发人员定位问题。比较难处理的问题,怎么跟控反馈进度等每天下班前确认拷机内容,每天上班第一件事需确认拷机结果,只有这样才能保证拷机的效果,实现拷机的真正意义。 9、测试人员在软件开发过程中的任务是什么? 寻找 Bug;避免软件开发过程中的缺陷;衡量软件的品质,关注用户的需求。总的目标是:确保软件的质量。 10、软件缺陷有哪些? 1)软件未实现产品说明书要求的功能 2)软件出现了产品说明书指明不应该出现的错误 3)软件实现了产品说明书未提到的功能 4)软件未实现产品说明书虽未明确提及但应该实现的目标 5)软件难以理解、不易使用、运行缓慢或者从测试员的角度看最终用户会认为不好 为了发现软件产品中的各种缺陷,而对软件产品进行验证和确认的活动过程,此过程贯穿整个软件开发生命周期。简单的说,软件测试是以发现错误为目的而执行的一个程序或系统的过程。 11、你如何理解软件测试的目的?
12、软件测试有哪些原则?
优秀测试人员应具备的素质: 1)沟通能力与表达能力 2)好奇心与怀疑精神 3)责任感与抗压能力 4)自信心,坚持自己的观点 5)耐心与细心 6)逆向思维的能力 7)善于学习与总结 8)团队协作精神 9)文档编写能力 优秀测试人员应具备的技能: 1)精通业务知识 2)具备软件编程能力,比如C,C++,JAVA等。 3)可以用脚本语言编写小测试工具 4)主流操作系统应用与网络知识,可以搭建测试环境 5)熟练掌握各种数据库知识 6)精通软件测试理论与方法 7)掌握常用测试与开发工具的使用 8)优秀的文档编写能力 13、说一说软件测试的组织架构 1)项目型的测试组织: 测试人员作为项目组的固定成员,从头到尾的跟着项目走 ![]() 2)智能型的测试组织: 测试人员参与到项目中,是以独立的测试部门委派的方式进入 ![]() 3)综合型的测试组织: 项目型与职能型的结构组合并加以改造而产生的。测试部门把测试人员,分为常规项目测试人员与专项测试人员。测试部门会把常规测试人员长期委派到项目组中,成为项目中的一员。专项测试人员,一般由性能测试工程师、自动化测试工程师、安全性测试工程师等组成。只有当项目发生专门需求测试时,测试部门才灵活把专项测试人员委派到各个项目组进行专项测试。 ![]() 14、软件测试常见分类有哪些? 1)按照是否执行被测试软件来分: 静态测试:是指不运行软件,测试包括代码检查、静态结构分析、代码质量度量等,主要对软件需求说明书、设计说明书、软件源代码进行检查与分析。 动态测试:指通过运行被测程序,检查运行结果与预期结果的差异,分析差异原因,并分析软件运行效率、健壮性等性能。动态测试是目前公司主要的测试方式 2)按照测试技术分为黑盒测试和白盒测试: 黑盒测试:黑盒测试又叫功能测试或数据驱动测试,在完全不考虑程序内部结构和内部特性的情况下,通过软件的外部表现来发现其缺陷和错误。 白盒测试:白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构进行测试程序,通过测试来检测产品内部逻辑是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。 3)按照测试手段来分:可以分为手工测试和自动化测试 4)按照过程阶段来分:可以分为单元测试、集成测试、系统测试和验收测试 单元测试:通过模块(类/方法/函数)测试,使代码达到设计要求 主要目的是针对编码过程中可能存在的各种错误,例如用户输入验证过程中的边界值的错误。 集成测试:将经过单元测试的模块逐步组装成完整的程序。主要目的是检查各单元与其它程序部分之间的接口是否存在问题,各模块功能之间是否有影响。 系统测试:是将已经确认的软件、计算机硬件、外设、网络等其他元素结合在一起进行测试。系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不符或与之矛盾的地方 ,进行改正。 验收测试:验收测试是在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的最后一次软件测试活动,也称为交付测试。通常由业务专家或用户进行,以确认产品能真正符合用户业务上的需要。 15、软件开发流程和开发模型? 软件生命周期: 计划-》需求分析-》设计-》程序编写-》测试-》运行/维护 软件测试流程: 测试计划-》需求分析-》测试用例-》测试用例执行-》提交bug-》回归测试 瀑布模型:适用于需求很明确的项目,分阶段向下进行,无法回溯 迭代模型:需求不明确,迭代版本系统 敏捷开发模型: 敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。 测试驱动开发模型:先编写测试代码,再写开发代码
![]() 16、软件测试模型有哪些? V模型:反映了测试与开发阶段之间一一对应的特点,测试在开发之后,出错后回归测试量大
![]() W模型:测试伴随整个开发周期,测试与开发同步进行,有利于尽早发现问题 ![]() H模型:软件测试活动完全独立,与其他流程并行 二、WEB功能测试面试题1、Student-coures-Studentcourse表关系如下: student(sno,sname,age,sdept)学生表 course(cno,cname,teacher)课程表 Studentcourse(sno,cno,grade)选课表写出sql语句: ·查询所有课程都及格的学生号和姓名·查询平均分不及格的课程号和平均成绩 找出各门课程的平均成绩,输出课程号和平均成绩 找出没有选择c2课程的学生信息 2、请说出XHTML和HTML的区别 1、文档顶部doctype声明不同,xhtml的doctype顶部声明中明确规定了xhtml DTD的写法; 2. html元素必须正确嵌套,不能乱;3、属性必须是小写的; 4、属性值必须加引号; 5、标签必须有结束,单标签也应该用“/”来结束掉; 3、很多网站不常用table iframe这两个元素,知道原因吗 因为浏览器页面渲染的时候是从上至下的,而table和iframe这两种元素会改变这样渲染规则,他们是要等待自己元素内的内容加载完才整体渲染。用户体验会很不友好。 4、jpg和png格式的图片有什么区别? jpg是有损压缩格式,png是无损压缩格式。所以,相同的图片,jpg体积会小。 比如我们一些官网的banner图,一般都很大,所以适合用jpg类型的图片。 但png分8位的和24位的,8位的体积会小很多,但在某些浏览器下8位的png图片会有锯齿。 5、简述—下src与href的区别 浏览器会识别href引用的文档并行下载该文档,并且不会停止对当前文档的处理 当浏览器解析到src引|用时,会暂停浏览器的渲染,直到该资源加载完毕。这也是将js脚本放在底部而不是头部的原因。 6、:before和::before区别? 单冒号(t)用于CSS3伪类,双冒号(:)用于CSS3伪元素。 对于CSS2之前已有的伪元素,比如:before,单冒号和双冒号的写法::before作用是一样的。 7、如何理解HTML结构的语义化? 所谓标签语义化,就是指标签的含义。语义化的主要目的就是让大家直观的认识标签(markup)和属性(attribute)的用途和作用,对搜索引擎友好,有了良好的结构和语义我们的网页内容便自然容易被搜索引擎抓取,这种符合搜索引擎收索规则的做法,网站的推广便可以省下不少的功夫,而且可维护性更高,因为结构清晰,十分易于阅读。这也是搜索引擎优化SEO重要的一步。 8、常见的视频编码格式有几种?视频格式有几种? 视频格式:MPEG-1、MPEG-2和MPEG4 、AVl .RM、ASF和WMV格式 视频编码格式:H.264、MPEG-4、MPEG-2.WMA-HD以及VC-1 9、JS中null, undefined的区别? null表示一个对象被定义了,但存放了空指针,转换为数值时为0。 undefined表示声明的变量未初始化,转换为数值时为NAN。 typeof(null) - object; typeof(undefined) - undefined 10、什么是sql注入,什么是跨站脚本,什么是跨站请求伪造? SQL注入攻击是注入攻击最常见的形式(此外还有OS注入攻击( Struts 2的高危漏洞就是通过OGNL实施OS注入攻击导致的)),当服务器使用请求参数构造SQL语句时,恶意的SQL被嵌入到SQL中交给数据库执行。SQL注入攻击需要攻击者对数据库结构有所了解才能进行,攻击者想要获得表结构有多种方式:
xss (Cross Site Script,跨站脚本攻击)是向网页中注入恶意脚本在用户浏览网页时在用户浏览器中执行恶意脚本的攻击方式。跨站脚本攻击分有两种形式: 反射型攻击(诱使用户点击一个嵌入恶意脚本的链接以达到攻击的目标,目前有很多攻击者利用论坛、微博发布含有恶意脚本的URL就属于这种方式) 持久型攻击(将恶意脚本提交到被攻击网站的数据库中,用户浏览网页时,恶意脚本从数据库中被加载到页面执行,QQ邮箱的早期版本就曾经被利用作为持久型跨站脚本攻击的平台)。 CSRF 攻击(Cross Site Request Forgery,跨站请求伪造)是攻击者通过跨站请求,以合法的用户身份进行非法操作(如转账或发帖等)。CSRF的原理是利用浏览器的Cookie或服务器的Session ,盗取用户身份,其原理如下图所示。防范CSRF的主要手段是识别请求者的身份,主要有以下几种方式:
令牌和验证都具有一次消费性的特征,因此在原理上一致的,但是验证码是一种糟糕的用户体验,不是必要的情况下不要轻易使用验证码,目前很多网站的做法是如果在短时间内多次提交一个表单未获得成功后才要求提供验证码,这样会获得较好的用户体验。 三、APP测试面试题(1)基础篇1、请介绍一下,APP测试流程? APP测试流程与web测试流程类似,分为如下七个阶段: 1.根据需求说明书编写测试计划; 2.制定测试方案,主要是测试任务、测试人员和测试时间的分配; 3.测试准备,包括搭建测试环境,准备测试数据,确定测试方法; 4.测试用例的设计与编写,进行用例评审及补充完善; 5.执行测试时首先进行冒烟测试,然后对主功能流程进行测试,包括客户端的单个功能模块,及功能业务逻辑功能交互,回归测试; 6.提交测试结果,包括测试用例,测试计划; 7.日常维护性测试; ![]() APP测试周期可根据项目的开发周期来确定测试时间,一般测试时间为两三周,根据项目情况以及版本质量可适当缩短或延长测试时间。 2、APP测试需要提前准备哪些测试资源? 具体要准备的测试资源,根据实际项目来,可以从以下几个方面出发: 1.IOS设备、Android设备(选取市面上主流手机产品); 2.支付宝/银联支付的项目,需要提前申请支付宝/银联账户等等; 3.有秒杀专题的题目,需要规划秒杀时间表; 4.有优惠券使用的项目,需要添加优惠券数据; 3、APP测试和Web测试的区别? 单纯从功能测试的层面上来讲的话,APP 测试、web 测试在流程和功能测试上是没有区别的。 相同点: 1.同样的测试用例设计方法; 2.同样的测试方法:都会依据原型图或效果图检查UI; 3.测试页面载入和翻页的速度、登录时长、内存是否溢出等; 4.测试应用系统的稳定性; 不同点: 1.系统结构方面
2.性能方面
3.兼容性方面
4.测试工具方面
4、相对于 Web 项目,APP有哪些专项测试 1)干扰测试:中断,来电,短信,关机,重启等。 2)弱网络测试(模拟2g、3g、4g、5g,wifi网络状态以及丢包情况);网络切换测试(网络断开后重连、3g切换到4g、5g/wifi 等)。 3)安装、更新、卸载,中断、前后台切换。
4)界面操作:关于手机端测试,需注意手势,横竖屏切换,多点触控,前后台切换。 5)安全测试:安装包是否可反编译代码、安装包是否签名、权限设置,例如访问通讯录等。 6)边界测试:可用存储空间少、没有SD卡/双SD卡、飞行模式、系统时间有误、第三方依赖(QQ、微信登录)等。 7)权限测试:设置某个App是否可以获取该权限,例如是否可访问通讯录、相册、照相机等。 5、Android手机和IOS手机,系统有什么区别? 1.两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。 IOS 沙盒运行机制:
Android 虚拟机运行机制:
2.两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。 3.IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。 6、IOS和Android的APP测试有什么区别? 1.物理按键:Android长按home键呼出应用列表和切换应用,然后右滑则终止应用;iOS所有的返回上一层,只能靠页面功能实现。 2.多分辨率测试:Android端20多种;IOS较少。 3.手机操作系统:Android较多,IOS较少且不能降级,只能单向升级;新的IOS系统中的资源库不能完全兼容低版本中的IOS系统中的应用,低版本IOS系统中的应用调用了新的资源库,会直接导致闪退。 4.操作习惯:Android,Back键是否被重写,测试点击Back键后的反馈是否正确;应用数据从内存移动到SD卡后能否正常运行等。 5.push测试:Android点击home键,程序后台运行时,此时接收到push,点击后唤醒应用,此时是否可以正确跳转;IOS点击home键关闭程序和屏幕锁屏的情况(红点的显示)。 6.安装卸载测试:Android可以通过手机自带的应用市场或者是第三方的手机助手进行下载,下载和安装的平台和工具和渠道比较多;IOS主要有app store,iTunes和testflight下载。 7.升级测试:可以被升级的必要条件:新旧版本具有相同的签名;新旧版本具有相同的包名;有一个标示符区分新旧版本(如版本号)。 8.支付方式:对于一些有内购功能的APP,Android直接调用第三方支付渠道完成支付;IOS需要先在APP store里绑定支付方式,然后通过APP store去完成支付操作。 9.消息推送机制:Android使用第三方或者自建平台进行消息推送;IOS的消息推送渠道由苹果官方提供。 7、介绍一个APP抓包工具? 一般用Fiddler,主要用来做app抓包使用,先在Fiddler客户端做好各项配置,端口设置为8888;然后在手机上设置代理,就可以抓包,主要看的是服务器返回的值、还能够修改传入参数、传出的参数、模拟网络延时,构造不同场景。 8、APP日志如何抓取?
9、常用的adb命令有哪些? 1.查看帮助手册列出所有的选项说明及子命令: 2.获取设备列表及设备状态: 3.安装应用:adb install 路径\xx.apk, 安装应用;adb install -r 重新安装。 4.获取设备的状态,设备的状态有 device , offline , unknown3种,其中device:设备正常连接,offline:连接出现异常,设备无响应,unknown:没有连接设备。 5.卸载应用:adb uninstall <包名>, 后面的参数是应用的包名,区别于 apk 文件名。 6.将 Android 设备上的文件或者文件夹复制到电脑本地:adb pull <远程路径> <本地路径>, 如复制 Sdcard 下的 pull.txt 文件到 D 盘:adb pull sdcard/pull.txt d:\,重命名:adb pull sdcard/pull.txt d:\rename.txt。 7.推送本地文件至 Android 设备:adb push <本地路径> <远程路径>, 如推送 D 盘下的 ITester.txt 至 Sdcard:adb push d:\ITester.txt sdcard/ (注意sdcard 后面的斜杠不能少)。 8.结束和启动adb服务:adb kill-server /adb start-server , 结束 adb 服务/启动 adb 服务,通常两个命令一起用,设备状态异常时使用 kill-server,运行 start-server 进行重启服务。 9.打印及清除系统日志:adb logcat , 打印 Android 的系统日志 ;adb logcat -c,清除日志。 10.查找包名/活动名 10、adb三个组件是指? ADB作为一个客户端/服务器架构的命令行工具,主要由3个部分组成。
(2)进阶篇1、介绍一下Android四大组件? Android四大基本组件:Activity、BroadcastReceiver广播接收器、ContentProvider内容提供者、Service服务。
2、Activity生命周期? 生命周期即活动从开始到结束所经历的各种状态,从一个状态到另一个状态的转变,从无到有再到无,Activity本质上有四种状态:
如果一个活动在处于停止或者暂停的状态下,系统内存缺乏时会将其结束(finish)或者杀死(kill)。这种非正常情况下,系统在杀死或者结束之前会调用onSaveInstance()方法来保存信息,同时,当Activity被移动到前台时,重新启动该Activity并调用onRestoreInstance()方法加载保留的信息,以保持原有的状态。 在上面的四中常有的状态之间,还有着其他的生命周期来作为不同状态之间的过渡,用于在不同的状态之间进行转换。 3、请介绍一下,Android SDK中自带的几个工具? 有如下几个工具:
4、你所了解的APP测试工具? APP自动化测试工具:
APP稳定性测试工具:
APP性能测试工具:
APP弱网测试&抓包工具:
APP兼容性测试工具:
APP安全测试工具:
5、介绍一下冷启动、暖启动、热启动、首屏启动? APP启动会发生多个事件,测试人员需要知道整个环节是否出现问题,需要了解到具体是哪个环节存在问题:
标准:
整个启动过程可以用adb工具进行分析,利用adb logcat获取启动数据,或者录屏,使用ffmpeg拆帧分析。 首先定义一个变量,这个变量填写用到的包名。 清除缓存数据: 停止进程: 通过以上命令就做好了冷启动的环境,下面启动app并获取数据。启动App -S表示启动之前先停止应用进程 获取数据: 获取的时间如下: ![]() 6、谈谈对冷启动的理解? 应用的启动可以分为冷启动,热启动和温启动,而启动最慢、耗时最长的就是冷启动。 冷启动开始时,系统会依次执行三个任务去启动APP:
在这三个任务执行后,系统创建了应用进程,那么应用进程接下来会执行下一步:
当应用进程完成初始绘制之后,系统进程用启动页的Activity来替换当前显示的空白Window,这个时刻用户就可以使用App了。 四、接口测试常见面试题1、请描述下HTTP接口? 了解HTTP接口首先需要知道HTTP是什么。 HTTP的全称为:HyperText Transfer Protocol,即超文本传输协议 。百度百科中对HTTP协议的解释是http是一个简单的请求-响应协议,通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息及会得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。 所以HTTP是工作于 客户端/服务端架构之上的。通常情况下,常用的web服务器有Apache服务器、 IIS服务器等等。 OSI模型中的七层结构见下图,而HTTP是属于应用层,定义应用程序的功能 。 用户通过URL向HTTP服务端发送请求,HTTP服务器经过一系列的算法处理请求后再把相应的结果返回给用户(即浏览器)。 ![]() 2、GET接口与 POST接口分别有什么特点,有什么区别? GET接口是从指定的资源中获取数据的,参数通过URL发送 POST是把需要处理的数据提交到指定的资源 POST的参数不能通过URL发送,只能从请求的的消息主体中发送。 3、HTTP1.1版本中有哪些请求方法? 1.0版本中有三种方法即GET POST HEAD。 http1.1版本中新增了OPTIONS DELETE PUT CONNECT TRACE5种请求方法. 4、HTTP响应消息由哪些部分组成? 响应消息包括状态行,消息报头和响应正文 5、HTTP某个状态码的含义(如:304代表什么)或是XX状态码头的含义 1xx表示请求已接收 ,继续处理 2xx 请求成功接收 3xx 重定向 ,需要进一步操作 4xx 请求错误 ,属于客户端错误 5xx 请求合法,但服务器无法处理,属于服务端错误 常见的状态码见下图: ![]() 6、你怎么理解RPC接口,有什么作用? RPC 的全称为:Remote Procedure Call Protocol即远程过程调用协议。 RPC通过网络从远程的服务器上请求服务无需了解底层技术协议 。RPC采用的是客户端/服务端模式,RPC的作用是开发方便、直接,安全性高,特别是在一些大型项目中,内部的子系统及接口比较多的情况下,采用网络分布式的多个APP开发更加容易 。 7、RPC的工作流程是怎样的? 下图为RPC的工作流程: ![]() 8、请描述下RPC的各个核心部件 Remoting 网络通信框架 实现了消息机制 RPC远程过程调用 ,支持集群,负载均衡 Registry服务目录框架 9、接口测试的流程 接口测试流程也与公司要求、项目性质有所区别,可以适当增减节点。 阅读接口文档(接口文档形式各个公司不同) 设计接口测试用例 准备测试环境、测试工具及测试数据 执行测试 提交缺陷报告,回归测试 编写测试报告 10、你之前使用过的接口测试工具有哪些 postman、jmeter、RESTClient、loadrunner、SoapUI等 本人常用的有postman、jmeter postman使用操作非常简单,支持测试case的管理 ,文件上传、响应验证以及环境参数管理还可以批量运行 jmeter是一款免费开源的轻量工具,可以用来做简单的压力测试,也可以自己写接口脚本验证。 11、调用HTTP接口时如何获取到HTTPClient库? 使用maven管理的话可以加入GroupId及 ArtifactID均为 commons-httpclient的依赖即可。 12、你之前怎么做RPC接口测试,有哪些准备工作? 接口调用客户端依赖包 配置接口远程服务端的Consumer Provider 编写RPC接口测试脚本。 13、说说HTTP单接口测试与 RPC接口测试的特点 RPC接口编写测试脚本时是需要导入JAR包,并且配置好Consumer。Http单接口测试是提交数据的方式 ,常用的提交数据方式有application/x-www-form-urlencoded multipart/form-data 14、针对你之前做的项目中简单描述下日志工具是怎么配置的 以maven为例,首先,需要引入Log4j,在CLASSPATH目录下建立一个文件log4j.properties,然后使用API输出日志 ![]() 15、GIT代码版本控制工具的常用命令 第一次从Git下载新代码:git clone xx.git “下载目录” 从远程仓库克隆:git clone “url” 添加目录:git add “要添加的目录” 提交:commit 查看所有的本地分支:git branch 查看所有的远程分支:git branch -r 新建分支:git branch 新建分支名称 切换分支:git checkout 切换分支名称 合并分支:git merge 要合并的分支 查看git状态:git status 查看当前文件与上次时的区别:git diff 文件名 查看提交日志:git log 回退到上一个版本:git reset 删除版本库的文件:git rm 文件名 16、简要说明JUnit的测试框架 JUnit是用Java语言编写的单元测试框架,使用JUnit进行测试前需要先继承TestCase类。应用比较多的领域有重构和极限编程。 17、TestNG常用的annotation关键字的含义 @Test 标记一个类或方法 @BeforeSuite被@BeforeSuite注解的方法,会在所有测试运行之前运行。 @AfterSuite被@AfterSuite注解的方法,会在所有测试运行之后运行。 @BeforeTest被@BeforeTest注解的方法,在测试执行之前运行。 @AfterTest被@AfterTest注解的方法,在测试执行之后运行。 @BeforeClass被@BeforeClass注解的方法会在当前类的第1个测试方法运行前运行。 @AfterClass被@AfterClass注解的方法会在当前类的第1个测试方法调用后运行。 @BeforeMethod被@BeforeMethod注解的方法,会在每个测试方法调用之前运行。 @AfterMethod被@AfterMethod注解的方法会在每个测试方法调用后运行。 18、TestNG常用的断言方法 assertTrue判断是否为True assertFalse判断是否为false assertNull判断是否为null assertNotNull判断是否不为null assertSame判断引用地址是否相同 assertNotSame判断引用地址是否不同 19、TestNG多线程测试时的annotation如何使用 invocationCount \threadPoolSize 20、TestNG怎么导出测试报告 TestNG自带了导出测试报告的功能 ,但可读性较差,可以用maven下载ReportNG的依赖并在pom.xml中进行配置。也可以使用插件。 五、自动化测试面试真题(1)编程语法题1 、 python 有哪些数据类型
2 、怎么将两个字典合并
3 、 json.l python 如何将 json 写到文件里?
4 、 __init__ 和 __new__ 区别?
5 、什么是可变、不可变类型?
6 、 mysql 注入点,用工具对目标站直接写入一句话,需要哪些条件? mysql 写入一句话需要具备
7 、 python 深浅拷贝的区别
8 、 python 为什么使用 *args 和 **kwargs 如果我们不确定要往函数中传入多少个参数,或者我们想往函数中以列表和元组 的形式传参数时,那就使用*args;如果我们不知道要往函数中传入多少个关 键词参数,或者想传入字典的值作为关键词参数时,那就要使用**kwargs。args 和 kwargs 这两个标识符是约定俗成的用法,你当然还可以用*bob 和**billy, 但是这样就不太专业。 9 、重写和重载有什么区别?
10 、 python 实现 get 数据库的表?你是怎么实现的? python 当中对于不同数据库,都有不同的第三库来实现连接和数据库操作。 比较熟悉的是对 mysql 的操作。使用的是 pymysql 这个第三方库。第一步是建立 数 据 库 连 接 ;第 二 步 调 用 execute 方 法 执 行 sql 语 句 , 第 三 步 使 用 fetchone,fetchall,fetchmany 去获取不同条数的结果。 11 、对象 ( 实例 ) 方法,类方法,静态方法的定义有何不同?分别适用于什么场 景?
12 、 SQL 连表查询,去重查询,查询重复的数据? [code]两表查询:SELECT 字段 1,字段 2,字段 3,…… FROM 表名 1 INNER JOIN 表名 2
ON 关联条件;
去重查询:SELECT distinct ...;
查询重复的数据:select 列名 from 表名 group by 列名 having count(列名) > 1;[/code]
|

本文主要介绍国内外学术期刊和学位论文等LaTeX模板在本地编译报错的解决方案。 引言 我们进行学术投稿或者写毕业论文时,可能会被要求使用latex格式编写。当我们下载好期刊或学校提供好的latex模板后,在本地编译
本文分享自天翼云开发者社区《openresty中使用ngx.sleep(0)防止worker进程阻塞》.作者:小谢不用谢 1. ngx.sleep(0)的工作原理 在OpenResty中,ngx.sleep(0)函数的作用是让当前的Lua协程主动放弃CPU执行权,以便Ngin