# 2021年最适合测试同学学习的技术




2021年已经悄无声息的快过去1个月了，大家已经开始立年度flag了吗？如果没有的话先不急，等我们盘点完2021年最值得测试同学学习和了解的技术之后，也许大家就有立flag的冲动了。

在这里我推荐的技术都是遵循性价比高，也就是投入时间相对较少而产出相对较高这个原则来的，因为我们时间有限，相对来说容易掌握，变动性小，投入时间相对少的技术是大家可以去涉猎的。

### 语言类

测试同学掌握一门编程语言应该是以后的大趋势所在了，会一门语言意味着你有机会将一些需要花费大量人工做的事情用自动化的方式去处理，这会提高效率，简而言之就是提升了生产力，一个人可以干多个人的活，相对来说内卷的趋势也不会特别明显。前几天看了一本名为《闪电式扩张》的书，里面也提到了自动化一切是让公司在发展时候尽量不受到人力规模因素钳制的重要活动。

语言分为脚本类语言和编译型语言，理想的情况下，两种都会是最好，没有时间的话可以只会脚本类语言。

脚本类语言里推荐2门语言。

* python。没有时间精力有限就学python，除了做前端，python现在基本上是十项全能了，前些天在语言排行版上，python已经超过了老将java，并且有可能以后一直压java一筹。语言这个东西很有意思，用的人越多需求量就越大，找到合适工作和岗位的机会就越大，因此学习python对我们的工作和求职都是一定益处的。

* JavaScript。有余力的同学可以学一下js，js在前端领域还是强势的选择，不过应用范围比python确实是小很多，但在测试上，我们可以用js调用selenium，appium，cypress，k6,postman等主流工具，日常使用还是绰绰有余的。

编译型的语言推荐2门。

* java。老将java市场保有量还是很大的，而已在一些中小型公司仍然是担当主力，市场长期需求相对有保障。而且java基本上也是啥事都可以做，应用范围没有问题，java语法也相对稳定，跨平台和生态都很完善，看重既得利益的话学习java是完全没有问题的。
* go。go跟java比可能更着眼于未来一些。相对java来说，go更加现代化，语法也更简单，在一些传统java占优势的领域，比如中间件开发上，go的势头非常强劲，go入门简单精通相对难一些，这个特点很适合一些寻找工具开发语言的测试同学，毕竟很多时候自动化工作只需要简单的调用一些现有库，把流程串起来就好了。

最后的总结就是：没有时间只学python就好了，时间很多可以再学一下go。


### 测试技术类

我把测试技术狭义的分为工具使用和工具开发。

用现成的工具去解决眼下的问题，对代码的要求相对较低；工具开发其实就是开发了，只是开发的产出物是测试工具而已。

这里我们只讨论前者，我们看一下在各种测试场景或者专项测试上都有哪些工具是值得我们掌握的。

#### ui自动化测试

* web端的自动化测试首推还是selenium，毕竟市场保有量大，需求较为强烈。cypress是一个不错的学习对象，有时间也是强烈推荐学习的。
* app自动化目前还是appium的应用相对广泛一些，推荐重点关注。

#### 接口自动化测试

* postman。对于http+json的简单接口，postman+newman的组合基本上是可以搞定大部分需求的，强烈推荐，不过要想用的好还是得会一点点的js。我记得我在b站有一套postman的视频，讲的比较清楚了，大家可以去B站搜索测试圈TC去学习一下。
* 自己写代码去实现。自己写代码实现会更加灵活一些，另外一些rpc或者是私有协议的接口我们也可以比较方便的进行测试。这里需要注意的是断言和数据准备相对比较重要，大家可以去github上搜索一个叫做cypress realworld的项目，看看他们是怎么做接口自动化的，当然他们用的是cypress做接口自动化，工具其实不算特别重要，思路和用例组织才是关键。

#### 单元测试

* 各种语言内建或者标准的单元测试库。python有unittest，java有相对标准的junit，go有testing库，这些框架的优势是简单易用，用来做单元测试基本上问题不大，但缺点是过于简单，有时候需要深度定制；
* 各种语言的高级测试库。python有pytest，java有testNG等，这些框架相对功能全面很多，可以满足大家更高级的需求。

#### 服务端性能测试

* k6。k6是一个比较新的性能测试工具，支持http和grpc，对开发人员非常友好，而且官方文档讲了很多测试理念的东西，讲招式的同时又传授内功，这点跟cypress很像，推荐一下；
* wrk。只支持http协议，但是性能强大使用简单，居家常备的性能测试利器；
* jmeter。干啥都可以，但都有点麻烦的老牌性能测试工具，有ui，入门相对简单

#### 移动端性能测试工具

* perfdog。支持ios和android的性能指标采集，非常适合小白，强力推荐的工具；
* 系统自带性能测试套件。比如ios的instrument，在专业场景上有巨大的优势，比如看memory leak之类，这也还是需要掌握的；

#### pentest工具

这里我也不是很了解，等以后学会了再分享给大家。

### 通用技术类

通用技术可以让你了解你的被测系统是如何工作的，可能在哪里会存在潜在问题，也是打通跟开发交流次元壁的重要方式。

传统的通用技术这里就不列举了，不过从目前来看，机器学习技术可能是需要大家重点关注的，因为长期来看，机器学习的应用范围会越来越广，相应的测试活动应该也会有更多的市场需求。


### 总结

总之技术对于测试同学来说只是日常工作的一部分，在很多时候我们的工作重心可能还是沟通，协调，深刻理解好需求，做好质量管理和线上问题跟踪，这些可能会占据我们大部分的时间和精力。不过从内在的核心竞争力来看，技术驱动自身价值增长应该是不变的趋势。

前几天看到个视频，讲股票投资的，里面有一些观点其实比较主流。

* 当外卖送餐员可能不是一个好主意，因为在这个岗位上你无法得到提升。同样的当点来点去的测试员可能也不是好主意，没有技术壁垒和核心竞争力，长期来看成长是不足的；
* 散户投资股票长期来看是亏，投资自己收获能力提升才是普通人应该去关注的事情；

以上观点感触很深，所以跟大家分享一下，我们还学的动，还有时间，一起加油吧。

顺便立个flag，今年希望可以把机器学习给整明白，然后与大家分享。






原始封面

![课程图片](https://images.unsplash.com/photo-1494935362342-566c6d6e75b5?w=300)


