一、简介
怀着对技术以及高薪资的向往,很多人毕业后,间隔个1到2年,陆陆续续向阿里测试开发岗位投递简历。涉及到的阿里BU(Business Unit)包括淘宝、蚂蚁金服、阿里健康以及阿里云。失败的结果有很多种,有简历挂,一面挂,二面挂,终面挂等等。可以说是屡战屡败,屡败屡战。最终,很多人都收到了阿里测试专家的offer。
在此,把他们总结的一点面试干货和经验分享给大家。希望给各位有志于阿里测试开发岗位的同学一点帮助和启发。
二、阿里公司简介
首先要说的是,人们通常所说的“阿里”其实是个大的经济体的概念,这个经济体下挂载有很多BU(Business Unit),像阿里云、蚂蚁金服等,都是阿里的BU,每个BU做的业务不一样,具体的地理位置也不一样。除杭州外,在上海、深圳、成都等都有阿里的据点。杭州的阿里园区也有多个,包括滨江园区、西溪园区、飞天园区、未来科技城园区等。
组成可以参考下图:
三、阿里测试岗位及考核体系
具体岗位定位见下图:
考核体系:
摘录阿里巴巴的价值观如下图:
四、需要关注的前沿技术
随着 Agile 开发模式在越来越多的项目组中推广,持续集成 (CI) 作为 Agile 的重要组成部分,也被越来越多的项目组采纳并实施,在这个部署实施过程中,自动化测试在软件测试中占有越来越重要的地位,如何让我们的自动化测试能更快,更有效的运作,一直是我们探索的目标。在实际的项目中,我们可能随时面对各种不同的需要,而这些也决定了我们采用什么样的开发模式。
1、TDD
测试驱动开发(Test Driven Development)。它的想法来自于极限编程(Extreme Programming)。TDD 是 Agile 开发中的一项核心实践和技术,也是一种设计方法。引用 Wikipedia 上的关于 TDD 的介绍:
测试驱动开发(英语:Test-driven development,缩写为TDD)是一种软件开发过程中的应用方法,由极限编程中倡导,以其倡导先写测试程序,然后编码实现其功能得名。测试驱动开发始于20世纪90年代。测试驱动开发的目的是取得快速反馈并使用“illustrate the main line”方法来构建程序。
TDD 的基本思想是通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计和质量控制量化的过程。TDD 简单的说就是:每写一段代码之前,先写一个单元测试;根据单元测试的功能,开始编码;待到代码可以使之前的测试通过后,编码完成;在保持测试通过情况下,重构代码。
测试驱动开发是戴两顶帽子思考的开发方式:先戴上实现功能的帽子,在测试的辅助下,快速实现其功能;再戴上重构的帽子,在测试的保护下,通过去除冗余的代码,提高代码质量。测试驱动着整个开发过程:首先,驱动代码的设计和功能的实现;其后,驱动代码的再设计和重构。
2、ATDD
验收性测试驱动开发(Acceptance Test Driven Development)。这种开发模式是整个团队在开发工作之前,一起讨论、制定每个任务的验收标准,并提取测试用例。ATDD 是从 TDD 发展过来的,ATDD 就是为了解决 TDD 的一些缺点而出现。
因为 TDD 只涉及到开发人员,测试人员及业务经理。如果开发人员可能只完成了满足测试的代码却忽略实际需求的实现,那么将会造成测试人员写的测试用例是不够的也有可能是错误的。所以在 ATDD 中首先要求团队定义出期望的质量标准和验收细则,以明确而且达成共识的验收计划(报告测试用例)来驱动开发人员 TDD 实践和测试人员的测试脚本。
3、BDD
行为驱动开发(Behavior Driven Development)。它也是 Agile 开发的技术,引用 Wikipedia 上的关于 BDD 的介绍:
行为驱动开发(英语:Behavior-driven development,缩写BDD)是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。
这种开发模式鼓励软件项目中的开发人员,测试人员和非技术人员或者客户之间的协作,从用户的需求出发,强调系统行为。在 TDD 中,我们并不能完全保证根据设计所编写的测试就是用户所期望的功能,用户并一定能看懂测试用例。BDD 将这一部分用更接近自然语言的形式来描述,让测试用例更自然化和简单,使开发人员,测试人员和客户能在这个基础上达成一致
4、DDD
DDD的全称叫:Domain-Driven Design,中文名称叫:领域驱动设计,是一种通过将实现连接到持续进化的模型来满足复杂需求的软件开发方法。
领域驱动设计的前提是:
- 把项目的主要重点放在核心领域(core domain)和域逻辑
- 把复杂的设计放在有界域(bounded context)的模型上
- 发起一个创造性的合作之间的技术和域界专家以迭代地完善的概念模式,解决特定领域的问题
DDD主要解决什么问题?
- 解决系统架构不清晰、内聚低、耦合高;
- 减少重构风险;
- 使各业务边界清晰;
- 可以随业务发展可很好拓展
DDD是一种设计思想,通过敏捷演变而来,主要解决使系统减少重构风险,并且清晰规划业务架构、系统架构、技术架构,使系统在快速发展过程避免重构推倒重来。
五、其他测试技术
1、关于功能测试
这是测试的基础,很多测试说点点点没技术含量,其实这样理解是不正确的,我觉得功能测试才是最重要的,至少你没听说过有公司不做功能测试吧(开发自测的也算做了)?
而且,自动化、性能、安全等测试,都是功能测试主流程稳定后才开始的(这里的开始是具体的测试执行;站在项目的角度,测试是从需求调研就开始了)。
2、关于自动化测试
自动化都是用来做回归测试的,只要基于一个框架,能跑起来生成报告即可。
总之,你顶多做1-2年自动化就会深有感触,自动化后期都是复制粘贴修改脚本,没啥技术含量,而且,并不是所有项目都适合做自动化,有些自动化脚本要跑起来,需要很多依赖条件。有人说写框架有技术含量点,确实,但是哪有每天让你写框架的活?我们的框架我写好后,都很久很久没去动过了。
所以,还是多花点时间学学代码搞测试开发,或者性能,或者安全吧。另外,做自动化,推荐用python做,比较简单。
3、关于性能测试
互联网用户越来越大,所以性能测试越来越被重视,比如淘宝双十一,根据淘宝发布的2018双十一交易额,如果宕机1分钟,损失是1.5亿,可见,这是一笔多大的数字。
性能需要学的东西很多,总之就是架构师的知识面了,架构师精通的,你都要熟悉或者至少了解,包含各种服务器的监控、可调优的参数、基本操作,比如nginx,tomcat,mysql,redis,linux,这些都是最基础的,最难的,估计就是jvm,没几个开发会,会的基本上都是架构师。
性能学习路线:性能概念→loadrunner入门→jmeter提升及java基础→linux命令→各种中间件服务器定位调优。
关于性能工具,主流是jmeter和loadrunner,没有好坏之分,都是客户端并发工具而已,性能测试的重点是定位调优 。
4、关于测试开发
这个概念是最近几年从bat兴起的,其实,这个概念是很模糊的,没明确的职责定义。
按照我以往的面试经验及自己的理解,测试开发就是能写代码,哪怕简单的脚本,所以,广义上说,自动化测试也算测试开发,性能测试也算测试开发(写脚本批量造存量数据,以及开发性能脚本,比如dubbo接口,需要自己写java代码,参考:jmeter5.1测试dubbo接口),测试开发基本上就是大半个全栈测试了(可能你面的测试开发,最后还会让你做功能测试)。
另外,要大公司才会有纯的“测试开发”,就是开发测试平台、测试工具的,但是纯测试开发压力相对小,提升慢,论开发技术,肯定没有专职开发强,因为不像专职开发,用到各种前沿的技术、框架。
总之,如果喜欢开发,就转开发吧,测试开发以后就是全栈测试,啥都要会(哪需要就往哪搬),是的,你没看错,不是我在吓你,这是现实,积极面对吧。不信?没关系,去招聘网站搜索,很多测试开发都是要求会性能,甚至会安全。
测试开发框架推荐:django,flask,springboot。
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】