毕业后一直从事功能测试的工作,时间久了就没有一点想法,天天都是点点点,也没有一点提升,看着身边一个个的人都忙得不可开交,打听之后知道他们都是在技术上忙,而不像我,在杂事上忙,特别没有成就感,于是想着要提升自己,有了进阶自动化测试的想法....
怀着这份野心,先是花小半年时间学习了UI自动化,需要学的内容有很多。学习过程中所有的知识都是零散的,想要组合起来对一个小白来说确实不容易。有了UI自动化学习经验,学习接口自动化基本没有费什么功夫。
UI自动化,接口自动化学完了,因为工作需要又去学了性能,后来发现性能真的是个无底洞,需要了解开发知识、服务器架构、操作系统、测试监控工具、容器知识等等。知识面太广,现在还在苦苦挣扎。在性能测试过程中,也去学了一些开发知识,之前做UI/接口自动化或者功能测试时只能从黑盒/灰盒层面去判断BUG原因,学了开发知识后,大概就知道这个bug是如何产生了。这对我自己的测试生涯也算是有了一个提高。薪资方面也有了一个大的突破!
今天,就给大家分享一下,自动化测试的学习路线,希望可以帮助到初学的朋友。
一、做自动化测试,必须会一门语言:
第一步:先学python ------- python不过关,别谈自动化。
如果只学习Robot Framwork,通过这个来做自动化,别以为不要学习Selenium跟python了, 因为Robot Framework中的关键字可能不够用,不能满足你们的需求,那么我们需要自定义关键字,这个时候就必须自己得通过python+selenium来编写了。
二、掌握一些前端的知识:
作为一个自动化测试攻城狮,总是需要做很多的元素定位,那么元素定位,我们急需要学习前端的一些基础知识。
三、数据库的学习:
数据库是这个行业每一个从业者都应该学习的,不管是前端、后台、还是测试、项目经理、产品经理、运维人员都需要很明确的熟悉数据库相关操作,作为一名测试,更应该熟悉数据库的增删改查等命令。
四、具体学习自动化测试的内容
自动化构成: 自动化测试在当前市场上应用非常广泛,主流有接口自动化测试和UI自动化测试。在此基础上,加上持续集成,就能实现全自动化测试。
接下来我将按照自动化的这三个主要构成来给大家详细介绍自动化:
1、接口自动化测试 目前市场上大部分项目,都是前后端分离的项目,由此产生了大量的接口。而接口自动化测试,主要是对接口进行测试。 那么,咱们应该怎么进行接口自动化测试呢?这里这几个知识点和工具,必须掌握。
HTTP和HTTPS协议
在主流程的接口测试中,又有大量接口是基于HTTP协议实现,数据安全用HTTPS协议进行保障,所以HTTP和HTTPS协议必须掌握。 1.2、接口文档 在实际工作中,接口的信息的载体除了代码,那就是接口文档了(开发人员提供),了解接口文档的结构、内容和规范可以帮助我们深度参与接口测试以及接口自动化测试。
接口测试工具Jmeter和Postman
meter是近几年兴起的接口测试工具,它最大的特点就是免费开源,容易学习。 Jmeter官网:https://jmeter.apache.org/index.html
Postman工具也很强大,在实际的项目应用中,几乎每个开发都会使用Postman来调试接口请求。 Postman主界面
官网文档
Mock测试
在自动化测试中,不是所有的功能都适合自动化测试,对于一些难以处理的测试点,我们不得不使用Mock技术来模拟。 登录和注册接口中,
- 密码的Mock
- Mock支付环境
- Mock支付密码
- Mock验证码(图片验证码、滑块验证码、人脸识别等、短信验证码等等)
总结
掌握这几个知识点后,对于HTTP协议的接口自动化测试,完全可以掌握和应用;甚至还可以进行小规模的接口性能测试。 2、UI自动化测试
UI自动化测试的成本比接口测试要高,主要原因不是技术实现难度高,而是因为UI是对接用户的终端界面,它是调整最频繁,改动最剧烈的部分,所以维护成本高。
Web自动化测试
这里推荐Selenium工具和Robot framework 推荐理由:Selenium和Robot framework是世界上排名前十的自动化测试工具(不区分UI自动化和接口自动化) 如下图所示2019年最受欢迎自动化测试工具:(Selenium高居榜首)
Selenium
Selenium主要是进行Web自动化测试,同时在手机APP自动化测试中,有一些测试框架也是基于Selenium来实现。如果要进行Web自动化测试,学习selenium是不二之选, 学习Selenium的方法
- 先掌握手工功能测试,理解测试的功能业务
- 再学习HTML、CSS、JS这三大知识
- 第三学习Selenium测试框架
- 最后学习PO分层管理的思想
Robot framework
Robot Framework是python语言编写的功能自动化测试工具。具有良好的扩展性,支持关键字驱动,支持同时测试多种类型的客户端或者接口,还可以进行分布式测试。
总结
Selenium和Robot framekwork 两者如果都能够掌握,那么无论是主流的Web自动化测试,还是其他UI的自动化测试,都能够有自己的心得,并且在市场中占有一席地位。
3、持续集成 什么叫持续集成? 我们假想一个场景,现在一个测试工程师把自动化脚本都编写好了,但是这位大佬还是需要每天上班点击“开始“运行脚本,而且当开发提交新的版本时,也需要重新运行自动化脚本。 那么可以不可以让这个自动化脚本,自动的运行,并且在开发每次发布版本之后,自动的执行呢?当然可以,这就是持续集成。 要学习持续集成,我们首先推荐jenkins。
什么是持续集成工具Jenkins? Jenkins工具是JAVA编写的开源工具,无论是扩展性,还是实用性,都非常好,很多中小型公司都是用jenkins进行持续集成,一些大型公司也是在jenkins的基础上进行的二次开发。
如何学习Jenkins
- 理解CI和CD的概念 CI:持续集成(把多个开发编写的代码,集成在代码仓库,自动进行单元测试,并返回结果) CD:持续交付(把集成的代码,自动的构建、部署、测试、发布,并返回各个阶段的结果)
- 要实现这些过程,我们需要拆分学习
- 集成代码
- 单元测试
- 构建代码
- 部署代码
- 测试代码
- 发布代码
- 发送测试结果
- 使用Jenkins整合这些过程
五、总结
其实自动化测试是一个非常广泛的技术,要想深入精通到更行各业,需要至少5年的钻研才能精通,熟练到一定级别,甚至做上技术总监也不是没有可能。 对于测试来讲,测试的工作其实相对是轻松,技术难度也不是特别高,所以大家在做测试期间,一定要持续学习,持续集成,才能进步,实现自我的价值。
最后,为方便大家自学软件测试,特意给大家准备了一份13G的超实用干货学习资源,涉及的内容非常全面。 包括软件学习路线图,50多天的上课视频、16个突击实战项目,80余个软件测试用软件,37份测试文档,70个软件测试相关问题,40篇测试经验级文章,上千份测试真题分享,还有2020软件测试面试宝典,还有软件测试求职的各类精选简历,希望对大家有所帮助…..
经验及面试题分享
今年行情不好是众所周知,招一个人估计得面18个,感觉都绝望了,可能也是自己抗压能力比较弱,因为遇到的都比较坑,还好当时没有一冲动裸辞,生活还在继续,找工作还在继续,如果你和我一样奔波于各个面试中,祝愿你能找到一个满意的工作。
常见问题
软件测试的目的是什么?
1.为了发现程序中的缺陷,保证软件质量。 2.满足用户需要
软件测试的一般流程是怎么样的?
- 1.项目立项后,参加需求评审
- 2.根据需求文档制定测试用例,然后进行用例评审
- 3.项目提测后,执行用例,问题记录cp4,及时有效的跟进问题的解决情况
- 4.测试环境测试通过后,产品进行验收测试
常见的测试类型有哪些?分别说明一下?
- 1.黑盒测试,即常说的功能测试
- 2.白盒测试,即单元测试,通常由开发来完成,对程序类和方法的测试
- 3.兼容性测试,主要是浏览器的兼容测试
- 4.集成测试,即各个模块的测试
- 5.系统测试,各模块测试完成后,对整个系统的完整性测试
- 6.回归测试
- 7.验收测试
测试用例设计常用的方法有哪些?详细说明一下?
最常用的3种 等价类划分、边界值、场景法
- 1.等价类划分 分为有效等价类和无效等价类,将测试的范围划分成几个互不相交的子集,从每个子集选出若干个有代表性的值作为测试用例
- 2.边界值:选取正好等于、刚刚大于、刚刚小于边界的
- 3.场景法:划分不同的场景,然后逐一进行验证
解释下单元测试,集成测试,系统测试以及验收测试?
- 1.单元测试,通常由开发来完成,对程序类和方法的测试
- 2.集成测试,即各个模块的测试
- 3.系统测试,各模块测试完成后,对整个系统的完整性测试
- 4.验收测试,测试环境测试通过后,由产品或者用户进行验收测试,看看产品的实现,是不是满足了他们当初设计的需求
探索性测试是什么?应该怎么做?
在需求文档不完善或者压根没有需求文档的情况下,根据经验进行摸索尝试性进行的测试,是测试过程中形成的基本的思维性测试
什么是冒烟测试,如何有效的开展冒烟测试?
1.软件最基本的功能测试,通常由开发完成,只有冒烟点都通过的产品,交由测试,才会比较有意义 2.冒烟测试贯穿于测试的各个阶段,比如集成测试,系统测试等
一条高质量的缺陷记录(Bug)应该具有哪些内容?
- 1.记录bug产生的前提条件
- 2.产生bug的详细操作步骤
- 3.截图,直观的展示问题,有效帮助开发快速定位问题
缺陷的生命周期是怎样的?
1新建–提交–分配–修复–验证–验证通过关闭–验证不通过reopen
Alpha测试与Beta测试的区别?
- 1.Alpha测试:把用户请到开发方的场所来测试,用户在模拟实际操作环境下进行的测试,由开发记录下用户反馈的问题
- 2.beta测试:当开发和测试根本完成时所做的测试,很多不同的用户,在不同的环境下操作,然后用户把产生的问题,定期发给开发者,进行修复(开发不在现场)
- 3.通常现有alpha测试,后有bata测试
你认为做好软件测试应该具备哪些素质?
- 1.较好的技术能力
- 2.对业务逻辑的理解
- 3.良好的沟通能力
- 4.解决和分析事情的能力
作为测试人员,在与开发人员沟通过程中,如何有效的提高沟通效率和效果?
- 1.耐心的跟开发沟通,跟他阐述不过的重要性 说服他解决问题
- 2.充分尊重对方,哪怕再低级的bug都不要小看他
- 3.宽以待人,设身处地为他人着想 即使开发因为压力或者其他原因不肯合作 也要心平气和的跟他沟通 讨论bug的优先级
- 4.平时多跟开发沟通 无论是工作还是生活上的问题,但是测试一定要有自己的原则 对测试的产品质量负责
- 5.自己先定位问题 帮助开发缩小排查范围
你觉得软件测试工程师在一个团队中,都需要做什么?有什么价值?
- 1.在产品需求会上 可以站在用户的角度 提一些贴合用户需求的建议
- 2.测试阶段,根据自己对项目的了解和专业的测试技能 尽可能在项目上线前测出更多问题 保证产品质量
- 3.对测试过程中出现的问题 合理有效的进行风险评估。
- 4.对质量严格把关 测试不通过的 一定不能发布生产
你对软件测试最大的兴趣是什么?
- 1.行业前景比较好,而且近些年 越来越多企业更注重测试
- 2.测试时间越久 面临的困难和挑战也越多,解决问题的同时 也提高了自身的能力
- 3.自己的性格比较外向开朗 很容易跟产品和开发沟通 做起事情可以事半功倍
你对自己的职业规划是什么?
先做高级测试 有机会的话,想往管理方向发展,目前在携程做测试组长,也为以后管理做储备
在你以往的工作中,发现的影响大或印象深刻的Bug是什么?为什么?
印象深刻的bug:近期的一个项目,x发单n是发qmq消息,调用发单服务自动发单,测试过程中,我给开发提议加个手动发单–作为发单失败或者未发单的补偿,开发力争 生产不会出现发单失败的情况,但后来还是被我说服,在上线前,加个手动发单的功能。 上线第二天,公司qmq框架出现问题,产生消息消费的延迟,导致一段时间内的订单不能自动发单,这时候大家手动发单,解决部分订单,事情过后,开发更加肯定了 我当时的提的bug修复是正确的
在你以往的经历中,解决过的最困难的问题是什么?
环境问题,是所有测试人员都面临的一个难题;解决的那么多问题中,测试环境无法使用,无法快速的介入测试,仍然是比较突出的。曾经把一个长久未使用的环境,根据经验和clog定位,各个服务之间的调用,一步步完成调通
在你以往的工作或学习中,你最大的收获是什么?学到了什么?
- 1.业务的积累
- 2.通过各种自动化,如UI自动化,job自动化,api自动化,不仅提升了自己编码能力,也在每周的常规发布中,起到举足轻重的作用
- 3.长期的测试过程中,提升了自己解决问题的能力
在没有任何文档的情况下,你如何开展测试?
- 1.尽量的去获取其他的文档吧,比如开发的一 些设计文档—概要设计、功能设计、详细设计
- 2.尝试从网上找类似的项目文档,如果幸运,可以从公司的资料库找到类似的文档
- 3.按照开发的接口或者设计文档,按照功能模块划分,大致写一些用例,然后进行摸索测试,在测试过程中逐渐完善自己的用例
测试用例设计问题
测试用例是什么?如何设计有效的测试用例?
为了测试某个产品,编制的一组测试输入、执行条件以及预期结果 设计有效的测试用例:
- 1.明确需求,清晰的知道需求要实现哪些功能
- 2.根据需求文档,拆分出功能点和测试测试要点
- 3.详细的梳理业务需求,设计不同的业务场景,尽可能多的覆盖,尤其重要的逻辑,颗粒度要精细
- 4.具体逻辑的设计方法,遵循边界分析法,出问题最多的就在边界值,然后用等价类划分方法补充一些测试用例
- 5.UI测试,界面元素测试+样式+操作控件设计+浏览器兼容性相关的用例
- 6.时间充足的情况下,设计接口的测试用例,从而保证接口数据的用等价类划分方法补充一些测试用例完整性和正确性–目前携程提倡测试先行的概念,接口要在项目提测前,完成api自动化测试
输入三个整数,判断是否构成有效的三角形,针对这个设计测试用例
首先要设计满足三角形的条件,输入的三个数必须大于0,且同时满足任意两边之和大于第三边。假设三条边是A/B/C,则要满足的条件为A>0,B>0,C>0,A+B>C,A+C>B,B+C>A。以此为例来进行设计即可 有效等价类:A>0,B>0,C>0
针对文件上传功能,设计下测试用例
针对网上购物中订单提交的过程,设计测试用例
测试管理问题
你认为测试经理的工作职责和内容是什么?
- 1.负责建立和维护一个有效的测试流程;
- 2.负责测试团队的日常管理工作;
- 3.负责制定和安排测试计划、测试工作;
- 4.带领测试团队进行程序测试工作、按照制定的测试计划执行,并监督和控制测试工作的进程;
- 5.负责测试用例的质量,开发高效的测试用例;
- 6.负责与其他部门的人员沟通协作,例如与开发人员和项目管理人员进行沟通,共同推动项目的顺利进行;
- 7.负责测试团队的培训,培养团队队员的能力。
- 如果你作为测试Leader,你应该怎么建立公司的测试体系并实施它?
- 说明你作为测试团队的负责人,如何提高测试团队的技术能力?
- 列举你以往项目测试中遇到的风险以及你如何处理的?
- 如果当时间不充裕时,该如何安排测试?
- 列举你曾经做过的测试(你认为有技术含量的或者提高了测试管理能力的),并说下你从中如何受益?
- 在开发和测试存在不合作甚至对立的情况下,你如何平衡和协调工作?
自动化测试问题
- 你认为适合做自动化测试的标准是什么?
- 你认为什么类型的测试不适合做自动化测试?
- UI自动化测试的优点和缺点分别是什么?
- 在一个项目中目前还没有进行自动化,如果我想开展自动化测试,我应该怎么做(一般步骤)?
- 你认为该如何选择最适合的自动化测试工具?
- 什么是自动化测试框架?一个好的自动化测试框架应该具备什么元素?
- 说一下你写过的测试框架的代码目录结构是怎么样的?
- 自动化测试框架的类型有哪些?
- 说一下你在实施自动化测试过程中好的代码实践?
- 自动化测试是否仅仅可以是实施在UI层?为什么?
- 你是否熟悉Selenium工具?说一下它是什么?
- 你是否还熟悉其它的自动化测试工具?各自简单的介绍一下?
性能测试问题
- 什么是性能测试?为什么要进行性能测试?
- 性能测试的类型有哪些?
- 列举下用户会面对的性能问题和性能瓶颈?
- 列举下性能测试中常涉及的性能计数?
- 性能测试中并发用户点击量是什么?如何实现?
- 性能测试进入和结束的标准是什么?
- 说一下在选择性能测试工具之前需要考虑哪些东西?
- 在性能测试中,如何识别性能瓶颈?
- 在对应用程序进行性能测试期间一般会执行哪些活动?
- 性能测试中吞吐量是什么?
- 解释下什么是耐力测试和尖峰测试?
数据库问题
一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15
操作系统问题
- 列出超过10个Linux常用的命令以及其作用?
- 进程和线程是什么?它们有什么区别和联系?
- 算法问题
- Java面试题
- 基础知识
- 面向对象编程有哪些特性?
- 重写和重载的区别是什么?为什么重载不能根据返回值判断?
- 访问修饰符public,private,protected以及默认之间的区别
- 抽象类和接口的异同?
- Java中的异常有哪几类?分别怎么使用?
- 常用的集合类有哪些以及各自有什么特点?
- ArrayList和LinkedList内部的实现大致是怎样的?他们之间的区别和优缺点?
- 内存溢出是怎么回事?请举几个可能出现内存溢出的场景?
- ==和equals的区别?
- hashCode方法的作用是什么?
- HashMap实现原理,如何保证HashMap的线程安全?
- Java中一个字符占多少个字节,扩展再问int, long, double占多少字节
- 创建一个类的实例都有哪些办法?
- final/finally/finalize的区别?
- String/StringBuffer/StringBuilder的区别?
- 什么是java序列化,如何实现java序列化?
- JVM
- JVM内存结构,为什么需要GC?
- JVM堆的基本结构
- JVM的垃圾算法有哪几种?CMS垃圾回收的基本流程?
- JVM有哪些常用启动参数可以调整,描述几个?
- 如何查看JVM的内存使用情况?
- 你常用的JVM配置和调优参数都有哪些?分别什么作用?
我的自动化测试之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,也整理了不少【网盘资源】,需要的朋友可以关注点击下方链接进群免费领取