很多测试开发工程师尤其是刚入行的同学对编程语言和技术栈选择问题特别关注,毕竟掌握一门编程语言要花不少时间成本,也直接关系到未来的面试和就业(不同企业/项目对技术栈要求也不一样),根据自身情况做一个相对正确的选择确实要比盲目投入更明智也更高效。
目前最常见的情况是纠结选择 Java 还是 Python?关于这个问题,我特意请教了几位资深的测试技术专家,在这里做一个汇总整理,集“各家”之言供大家参考,也欢迎各位朋友根据自己的经验回帖补充意见。
P.S. 有一点需要强调,关于编程语言的选择和对比,不存在唯一正确的答案,也没有一劳永逸的全局解决方案。这里列举的也仅代表个人意见,仅供参考,大家还需要结合自身情况做选择。在保证大方向正确的前提下,快速学习,努力提升自己才是王道。
测试工程师该如何选择合适的编程语言?
Java or Python?这两种语言在一线测试工作中实际应用是怎样的?有哪些优劣势对比?
对测试新人和有一定经验的从业者有哪些建议?
---- @艾辉 饿了么高级测试技术经理
Java 和 Python 这两种语言在测试开发的工作中应用都很广泛,如果非要分主次,Java 相对来说更多。服务端用 Java 开发的项目居多。
关于测试工程师如何做技术栈选择?有几点需要注意:
- 业务团队的技术栈,即公司服务端用什么语言做开发;
- 自身技术基础,对编程语言熟悉程度,个人兴趣等;
- 相关语言背后的技术生态是否完善,比如做服务端自动化测试,Java 的工具库、Python 的工具库,哪个更能解决痛点问题?
对于零基础和刚入行的同学,建议从 Python 入手,因为 Python 语法简单,相对容易上手;有一定经验的测试工程师则要从解决什么问题方面考虑,然后建议 Python、Java 都熟悉掌握,能紧跟行业技术趋势和要求,比如近几年 Go 越来越火,不排除测试开发工程师之后要学习掌握 Go 语言。
测试开发的技术广度要求相对更高一些,因为你不知道下份工作中,公司业务会用到的技术栈情况,所以需要掌握迅速迁移学习的能力。但就目前来看,Java 和 Python 两门语言能熟练应用基本就可以满足大部分测试开发工作的需要,其他 Case 根据实际情况来看。
---- @方程无解 美团资深测试技术专家、Python 自动化测试技术专家
很多同学都有这个困扰。Java 和 Python 是现在开发和测试行业的两大主流语言。目前 Java 的市场占有率是第一,Python 还是第四,但 Java 的占有率在走下坡路,尤其是在 Oracle 宣布新版 JDK 收费后,会加速这种趋势。Python 作为大数据工程和 AI 的主流开发语言,一直保持强劲的上升趋势,即使目前 AI 还没有大量的成功的商业案例(盈利的)就已经很火爆了,一旦成功的商业模式建立起来,Python 开发和测试的需求更会爆发性增长。
Java 和 Python 通常在大厂里面都是并行存在的,但在创业型公司里面,Python 做测试开发的比例比 Java 高,创业型公司里面要求快速推进,推进速度会比大公司更激进。
Java 目前在市场上毕竟还是占有率第一的,Java 测试开发的绝对需求量会比 Python 多,但会 Python 的人相对比较少,竞争也会小一些。Java 用来做测试开发,还是太重了点,技术点比较复杂,学习曲线长,编写测试代码的速度慢,Python 编写速度快,非常适合测试资源不充足的情况下,快速开发测试工具。通常实现一个功能,Python 的代码量是 Java 的 1/3-1/5。
很多大厂之所以一直还用 Java 做测试开发,主要前几年积累下来的工具都是 Java 的,前几年会 Python 做测试开发的人太少了,但现在大厂新工具的开发,更多人选择了 Python。
对于小白和刚入行的同学,毫无疑问,直接学 Python,这个没有其他要讨论的。对于 Java 开发一年经验以上,或者写过 1W 行以上代码的同学,在继续深入学习 Java 的同时,也要开始学 Python。在实际工作当中,用Python 写小工具,很方便。Python 对 Java、C、 C++ 的调用都有成熟的框架,而 Java 没有。另,除了 Python 和 Java,如果大家还想学习一门新的语言,我建议大家学习 Go,那也是一个明日之星。
关于测试开发工程师如何做技术栈选择的建议:关于测试技术,建议初级测试人员(1-2年),先在一个专项测试技术上发展,然后再扩展到全栈(API、Web、App、后台、安全性测试、性能测试、数据库、Linux、中间件等)。你的技术体系应该是 T 型结构,测试人员的知识体系应该比开发人员更全面,要学的东西很多。除了测试技术外,测试人员也要不停的学习开发技术,公司用什么开发技术,你就要跟进学习。和开发人员的交流保持在一个频道下,理解其设计就会更顺畅。
---- @孙高飞 第四范式资深测试开发工程师
建议初学者先掌握 Python,而高级的测试开发者两个都要会。一般高级工程师主 Java,副 Python。
另,语言跟某些业务场景也有绑定关系,比如 RPC 协议测试,在国内Dubbo 这个框架很流行,就是基于 Java 调用的。很多 2B 企业提供的 SDK 测试,也大都是基于 Java 的 SDK 测试。
而且,大型自动化项目通常是团队多人协作的,Java 由于静态语言特性不容易出错,而 Python 容错性相对来说就要差一些,代码多了容易 hold 不住。
主要就是开发圈子里 Java 太流行了,导致测试里面 Java 系比较有好处。
---- @徐实 知乎测试技术专家
对于语言,第一选择是最好和研发的语言技术栈一致。
在测试过程中,如果只是接口自动化,或者基础平台开发,Java 与 Python 两者差异并不大。建议优先选择更熟悉的语言。
一些开源自动化框架用 Python 的相对多些,在日常工作中一些脚本工具用 Python 写会快很多。
其实个人觉着代码技术栈的选择方面,通过 Java 入门要比 Python更面向对象一些,对一些设计模式的学习也更友好一些。另外,从开发角度来讲,Java 的稳定性和可靠性及现有解决方案会更好一些。
如果面向平台开发,第一门入门语言可以选 Java,语言一通百通,Java 上手后学习 Python 的成本也不高。
但如果只是自动化测试框架,工具,两者都可以,我个人更倾向Python,新手写起来很快~。另外,如果是大数据方向的测开,最好用 Java。而如果策略算法领域的测开,Python 则更好。
---- @思寒 测试专家
Java 和 Python 都不错。这是最大众的语言。
Python 最直接,生态强大,但是没有 Java 强大。
Java 的话是分两层的。JVM + JVM 之上的各种语言。也就是说你用Python、Ruby、Java、Groovy、Kotlin、Scala 等都可以调用Java 编写的库,生态上有优势。
但这个原因还是次要的,主要还是将来要做测试左移和测试右移,分析代码、统计覆盖率等都得跟研发保持一致,而国内用 Java 的公司可能占了 90%;
另可参考 测试行业的编程语言之争 by 思寒
---- @范令凯 58 到家测试专家
- 针对没有接触过代码的小白,建议从 Python 入手,门槛低,学习成本比较低;
- 针对大数据的测试建议 Python;
- 本身 Python 和 Java 没有特别大的优劣之分,都有足够的库和插件可以完成我们的测试。遇到问题也都可以从网上快速的找到解决方案。所以选择 Python 还是 Java,最主要思路还是跟公司的技术栈保持一致。
比如我这边有 Dubbo 的接口,建议选择 Java,从接口测试到后续的代码走读,都比较方便(当然 Python 也可以实现 Dubbo 的接口测试,但可能成本比较高)。
---- @恒温 测试专家
首先,编程语言本身没有优劣之分,每种语言的粉丝都认为自己用的语言是最好的,就像 PHP 是世界上最好的语言一样。在工业界,我们可以看[ TIOBE 的语言排名]
(http://www.cncms.com.cn/hardware/20181109/11091503.html)。
一般来说 Java 和 C 都是高居版首的。至于为什么,网上的说法比较多,总结来说就是 Java 跨平台,C 语言和底层汇编最接近。但是其实有一个林迪效应,对于会自然消亡的事物,生命每增加一天,其预期寿命就会缩短一些。而对于不会自然消亡的事物,生命每增加一天,则可能意味着更长的预期剩余寿命。Java 和 C语言感觉就是这样。
Python 其实还算门新语言,1991年出来的吧,在互联网和移动互联网两个时代,也没有太大的亮点,所以一直被人当做脚本语言使用。直到 Python 作者加入了谷歌,然后谷歌大力推 Python,你也知道,中国的技术都是热闹驱动和老外驱动,老外搞啥,就搞啥,然后慢慢地带起了 Python,到了大数据时代,更是厉害,一跃到了前10,这主要得益于 Python 的学习曲线比 Java 简单平滑,然后因为以前一直在科学计算这块使用,有大量的数据生态库。
至于在公司的使用情况呢,国外不知道,国内来看的话,据我所了解的公司来看,Java 居多,尤其是进入 IOT 时代,Android 称王的时代又回来了,那用 Java 的更是多了。再去看看测试相关的开源项目或者类库,也大部分是 Java 的。那最近最火的 Appium 来说,Java Client 是更新最快,实现最好的。WebDriver 也是如此。
如果让我推荐用什么语言的话,我会说,
- 你的公司大部分人用什么,你就用什么。
- 如果你精通 Python,那么学个 Java 也不难。
- 如果你精通 Java,学 Python 也很容易。
- 如果你都不会,建议 Java 和 Python 都学一下。多一个技能,多一口饭。
- 认真学一门语言,别捡芝麻丢西瓜。
---- @大猫 测试技术专家
这两门语言都是必须要学的,并且大部分自动化都支持双版本,Python 更高级,Java 更底层点。二者都依赖生态库,小型项目用 Python,其他用 Java。学习难度是 Java 高于Python。Java 反射和工程性高于 Python。常规的效率上都差不多。Python 和 Java 都有推导表达式。
建议就是都学,二门语言加一起认真学一年就很好了。只要有耐心。:)
---- @晓光 测试技术专家
跟被测物同语言最好。
- interop 不会有坑。
- 开发能读懂,沟通不会有坑。
- 如果是单元测试或者结合很紧的接口测试可以跟生产代码放在一起。加入 CI 经常跑,保持有效性。
(文章来源于霍格沃兹测试学院)