职业经验 4年 半的个人测试经历

大豆子 · 2019年02月02日 · 最后由 大豆子 回复于 2019年10月17日 · 183 次阅读

    时光冉冉, 不经意从毕业到现在已经工作 4、5 年了, 其中也迷茫过,放纵过。在看到了 testerhome 社区的一些文章后, 发现还是有很多志同道合的人, 并且从里面看着大家这么乐观且充满激情的态度,觉得自己也需要再给自己加把劲。

聊聊个人经历

    由于很少写博文, 先写个个人经历, 希望能给处于困境的其他小伙伴带来一些思路和慰藉~

先简单介绍下个人情况:

  • 14 年毕业于普通一本,计算机技术与科学专业, 大学可以说是比较荒废的度过了 4 年。
  • 没有任何实习经验。
  • 没有参加任何培训公司培训。
  • 没有去参加任何校招, 并且没有接到任何 offer。

在以上比较 "朴素" 的条件下来到了魔都开始了连自己也不太理解的工作生涯

2014/07 迷茫的开始

    在我印象中,当时找了将近一个多月的工作,其中充满了各种艰辛。由于没有任何经验,我几乎就是在 51job、智联招聘等各大招聘网站上海投,不过大概方向还是测试或者开发岗位。

  • 第一次有公司答应录用:

        一个很小的公司,招聘开发当时面试后,我说啥也不会。他们说给 3K,我当时已经找了快半个月了,差点就同意了,因为对这边的薪资概念也不是太强,只是觉得有公司要就行。

  • 第一次难受的想放弃:

        当时大夏天的早上 10 点去面试,太阳特别大,然后出了很多汗去,到了公司里面又是冷空调一吹, 在面试的过程中就觉得头昏昏的,等回到家里就已经处于整个人肚子疼的站不起来,头也特别疼。现在回想起来还觉得有点悲凉。

    不过最终我还是坚持下来了,因为接到了一家视讯监控行业公司的 offer,当时给的工资是 4.5k,工作是测试工程师。从此,我的测试生涯便开始了。(这个时候我也不知道未来到底会怎么样)

2015-2016 普通的一年

    公司的培养计划挺棒的,前 2 个月都是新人培训, 并且有相应的导师会教导你,带你做项目。由于是传统软件公司, 所以测试节奏比较慢, 工作也基本是一些界面的点点点。 在这种环境下, 个人又比较喜欢玩游戏,当时完全没有意识需要进行自我充电。。。每天基本处于白天上班, 晚上打游戏。现在回想起来,虽然不能说后悔不已,但也还是觉得挺可惜的。

    在 15 年初的时候调到另外一个产品线, 在那个时候我还是一个只会界面点点点的菜鸟, 连基本的 linux 命令都不熟悉,更不用说什么脚本语言和编程语言等其他知识了。 直到开始一个自动化部署环境平台的项目出现, 我开始接触了一些 linux 命令以及 shell 脚本,但当时完全处于一脸懵逼状态,啥也不会。。。在那个半年内我疯狂的学习 linux 命令以及为了看懂一个 shell 脚本,把代码一句句的执行,实在看不懂得就上网查资料。 后来我还有点沾沾自喜, 觉得自己什么都会了,现在想起来觉得自己当时多么的无知与幼稚。

2016/01 - 2017/09 知识积累

在第二次找工作的时候, 我又一次次被无情的打脸了,以为自己大多数知识都掌握了, 殊不知自己只掌握了一点皮毛。

    在多次无情的打脸后, 十分有幸的进入了第二家公司, 一家以数据库中间件以及数据库运维的公司。在这的 1 年半年时间里,个人知识可以说是突飞猛进的增长,当然这归功于亏 leader 以团队的培养以及个人自律学习的结果, 并且为以后工作打下了良好的经验。

  • mysql

    由于公司是基于 mysql 上做一些中间件, 在这种场景下我猛补了下 mysql 这块的知识

    • mysql 常用的 dml、ddl 语句等
    • mysql 语句分析,如通过 mysql 自带的 explain 分析 sql 语句性能
    • mysql 的性能测试,这块就不可避免的要去了解一些 mysql 常用的存储引擎 InnoDB, mysql 的基准压测工具 sysbench 以及动态跟踪技术的 dtrace 和 systemtap 等工具
  • 脚本语言

    在工作中大多数时候接触的是 linux 服务器, 需要在上面进行 mysql 部署、代码 jar 包打包下载等重复操作,为了 “偷懒” 这也促使了我开始进行脚本语言学习的动力,主要用的是 shell。

    • 由于 mysql 每次重复部署, 我学会了用 shell 脚本进行自动部署,然而实际结果往往是不尽人意的。 在服务器上会有很多中 linux 系统版本, 比如常见的 redhat, centos 等, 当时还碰到过比较稀有的 suse。为了兼容各种版本我不停的完善脚本, 在这个过程中也更近一步的掌握了更多的 shell 知识
    • 每次连接服务器或者远程 scp 内容到本机都需要进行密码输入,这一系列的重复交互操作, 又促使我学会了在 linux 上用 expect 命令编写脚本, 实行自动交互完成密码输入。
    • 每次进行日志的处理或者修改 mysql 配置的时候, 为了偷懒我又发现了 awk 命令以及 sed 命令, 这两个命令在文本统计以及文本编辑上真是帮了我很大的忙。
  • 编程语言

    在对 mysql 以及公司内部产品进行性能压测的时候, 开源的 sysbench 基准工具在部分场景不是太符合我们的要求, 在这种情况下促使我又拿起了大学里面学的 C 语言, 为什么选择了 C 语言呢。。主要是大学居然没学过 java 。。。

    • 由于每次压测都需要进行数据准备, 然后通过 sysbench 工具来进行数据准备时候都很浪费时间,即使通过 shell 脚本来进行自动准备。原因在于某些场景下 sysbench 都是单线程进行数据插入的。所以通过 C 语言编写了一个并发的数据插入工具。。用的是 linux thread 库进行开发, 当时又为了保证线程之间不互相干扰看了一段时间视频。这也是第一个我自己开发的工具, 在后面项目中的各种造数据需求我也继续完善了相应的功能。这使得我对编程语言也不是太畏惧了。
  • 性能测试

    在这里再次感谢团队以及 leader 给了这些性能压测的机会, 让我从功能测试接触到了性能测试。不仅学会了各种性能压测的方法和操作系统的知识, 主要是学会了分析问题的思路。下面进行一些操作系统方面的性能观察点以及命令的介绍(基于 linux 操作系统)

    • CPU: 压测目标是 IO 密集型还是 CPU 密集型, 什么是 CPU 的用户/系统使用率、饱和度、CPU 抢占与调度、工作负载、CPU 的运行队列的工作情况等等。
      常用命令: top、 mpstat、 uptime、 vmstat、 perf 等
    • 内存: 通过内存的使用率、饱和度来判断内存是否达到瓶颈,什么是主存、内存泄漏和内存溢出的区别,什么是换页等等。
      常用命令: vmstat、 ps、 top 等
    • 磁盘 IO: 通过 IO 使用率、饱和度来判断磁盘是否达到瓶颈, 理解同步 VS 异步等。
      常用命令: iostat、 iotop 等
    • 网络: 最经典的就是 TCP 三次握手,了解什么是带宽、网络延时、连接延时等等。
      常用命令: netstat、 tcpdump 等

2017-2019 慢慢沉淀

    以上经验都是在传统软件行业中积累的,由于个人需求以及介于魔都的房价。。。不得已从第二家公司离职进军了所谓的互联网潮流。 正在以为我可以大展身手的时候, 现实又一次把我打倒在地。。。

     在刚进入互联网公司的时候, 我突然发现这边大多数时候还是界面上的点点点且测试任务繁忙, 这个迭代任务还没完成,下个迭代的需求已经接踵而至。 需求改了又改,所谓的自动化也是走走形式。

    这种情况下, 我又开始了新一轮的学习。

  • 主要学习点(不仅是学会,重点更在于理解):

    • 学会怎么用robot framework以及使用pythonrequests库编写接口自动化框架
    • 学会怎么使用flask + python 搭建一整套 web 系统
    • 通过用python unitest + htmlTestRunner 输出优雅的自动化报告日志
    • 学会使用jenkins进行持续集成(当时还很尴尬的把自己的工作目录全部清除了。。真是坑自己的 rm -rf), 学会使用jacoco来保证代码的覆盖度
    • 为了保证每次增量覆盖, 从网上又查找资料后弄了个jacoco增量覆盖度的工具, 后续再学习通过字节码的方式去实现这个功能
    • 为了更好的构造接口自动化的数据, 学会了SpringAOP编程, 在不干扰业务代码情况下进行数据日志回收
    • 学会使用sonarQube进行静态扫描, 为了进行 sonar 规则的自定义规则开发,又要学习java编程语言, 并且学会怎么去解析java语法树
    • (至今仍在持续学习中)...

在这一轮又一轮的学习中,我感到过迷茫,感到过孤独,我也放纵过自己,有时候也很浮躁,但我仍然在坚持的学习,因为只有这样才不会被这狂奔的信息时代给抛弃。

总结

     至此算是完成了一个整体的回顾,至于为什么想到要写这些内容,我希望能够给那些曾经或者现在和我一样起点不是那么优秀,但对未来充满期望的小伙伴们说: 只要你尽自己可能的去努力,成功离你不会太远, 至少你自己会见识到自己的变化

     我现在仍然继续在这条路上前行,我相信这条道路上也不止我一个人。

以后我也会把自己觉得有意思的内容持续更新, 最后附上我最喜欢的三句话

自律给我自由。
已知的已知, 已知的未知, 未知的未知。
偶然的现象一定存在一个或者多个充要条件。

共收到 37 条回复 时间 点赞

你的技术路线还是不错的,最后的几个技术方向都非常实用。继续深入学习吧,以后的成长不可限量。

😁 嗯嗯,多谢支持。
中间过程还是有些浮躁, 现在是多更深的对自己的技术路线进行深入和沉淀。

请问一下学习 flask 有什么好的书籍或者资料推荐吗

稳稳的 20k 大神,干嘛不转开发

hellcat 回复

开发有什么好,每天累半死

hellcat 回复

😂 对于猝死的程序猿以及发际线后移的恐惧。。。

开玩笑的, 做过一段时间开发,不是太久。 个人感觉:

  1. 大多数的时候我在开发的时候做的仅仅是业务需求, 天天就是增删改查,没完没了的 transform, 产品的需求一天接一个,上的需求没 1、2 个月又推翻重来。
  2. 没遇到好的机会转开发
Best 回复

个人当时学习的资料如下:
     flask 官网英文版
     flask 中文版
     问题前期基本是拼拼凑凑 ➕GOOGLE ➕ 多实践

     除了 flask 的基本语法,主要还有弄懂 flask 其中的蓝图 Blueprint, 实现功能模块化,有兴趣的话可以深入了解下 flask 内部实现原理。PS: 比如 flask 每次发起的请求是阻塞式还是非阻塞式等等。我个人只是感兴趣并没有再深入了。

感觉后来进入互联网行业学习快了很多,是因为学习已经形成了惯性啊

玛雅 回复
  1. 一方面因为开始时候积累少,学习的方法也仅仅是会用。 等知识慢慢的积累后,懂得了去理解为什么这么用。这样便能举一反三。所以学起来也更快些了。
  2. 另一方面当知识越来越多, 也就会发现自己不会的东西也就更多😂 😂 。。。于是乎,掉进入了循环

想问一下楼主,有什么好的自学网站可以推荐嘛,想学 python 来做自动化测试,网上基本都是要收费的。

yunxiao_li 回复

这个取决于你个人现在想具体学到什么程度。说下我当时的过程

当时我开始做这块的时候没有去笼统的进行过系统的学习,最好是能够将其分解:
1、语言:选择了 python,那么 python 的基本语法都掌握,以及一些 python 的特性. 参考python,学会使用 requests 库来进行网页或者服务接口的调用.
2、工具:大多数做接口的都是 http 协议,就可以用 requests + python + unittest/pytest 写个自动化测试框架,现成的 robotframework、selenium 等等工具也都可以直接使用, 可以自己 google 搜索下相关的工具使用教程。
3、网络:了解什么是 http 协议http 资料, 有兴趣深入的话可以查看 http 权威指南

补充下:
刚看到社区里面的开源项目中也有挺多自动化项目,有兴趣也可以研究下

看到测试工资 4.5k 的视讯监控公司,第一反应是科达

2019 开工有些小迷茫,谢谢楼主的及时雨,向楼主学习。
借用楼主的话鞭策一下自己:
自律给我自由。
已知的已知, 已知的未知, 未知的未知。
偶然的现象一定存在一个或者多个充要条件。

Felix 回复

😂 😂

zhanglimin 回复

加油😀

楼主,提醒了我不要荒废度过毕业第一年😁

wzhhey 回复

羡慕你是第一年,加油

大豆子 回复

好的,非常感谢楼主的详细解答。

和楼主第一年经历有点类似,不过我大学开始就是测试专业的普通本科,刚实习 3 个月,这家公司全都是功能测试的,在考虑转不转正。想在软件测试深入发展,但是感觉这家公司呆久会成为被淘汰的那种人。(工作太安逸了、功能测试、测试手册、客户培训。。。都是些枯燥得不行的工作)

正常迷茫阶段,学 selenium 和 appium 不知道怎么深入了,基本的自动化脚本已经可以写了

Ck.cool 回复

我目前所在的公司就跟你说的差不多,温水煮青蛙,我负责的项目只有我一个测试,操作手册,客户培训,甚至是软件实施和咨询,除了开发什么活都要我干。我是 18 年 3 月大四的时候进的这家公司,目前即将离职,当然一直逼我迫不及待想要离职的还有啥也不懂的销售,餐饮行业时间比较特殊,经常周末半夜就 call 人问问题,当然我也是想要打破舒适圈。我的建议是,你才实习 3 个月,还是继续积累些经验,业余时间进行自我充电,至少待满一年,毕竟现在出去面对的工作其实也很大程度上跟你现在正在从事的工作没多大区别。

对于 jacoco 增量那块儿,我也看到字节码去做但是还是没想好怎么做,可否指点一下谢谢

FyueC 回复

由于没有太多往移动自动化工具发展,但个人认为工具使用大致都是几个阶段:会用工具、理解工具、重构工具。
可以多了解下工具内部的实现逻辑,如果可以的话还可以去二次封装工具。😂 不过我也仅仅还在理解工具这阶段

gyyfifafans 回复

我文中提到了其他方式,暂时由于实现了增量的效果, 但是团队内效果不是太理想,还未尝试使用字节码这块。
当时发现社区内有通过 python 实现增量的,可以参考以下 https://testerhome.com/topics/15121

wuxuanlin 回复

太安逸了,浪费一年时间不知道值不值得

Ck.cool 回复

或许你可以出去面试试一试,哈哈。安逸可以自己学习呀,自己提升呀,网上很多课程视频的

FyueC 回复

我来说一句废话,我入行时间也短,目前重新确立目标。业务测试是干不久的,不过我觉得业务测试也很难。到现在我也没明白,从 web 端到移动端的各种需要考虑的测试点。最近我要确定一下。关于你说的 selenium 深入。我大概给你个方向,基本 demo 我都写过。jenkins+selenium+docker 实现本机 docker 部署测试环境,grid 采用多进程方式跑代码。jenkins 负责拉去最新测试代码,编译测试环境的后端代码。配置部署连接 docker,同时测试完成后使用 allure 工具生成可是化测试报告。appium 的基本流程差不多。没有用 appium 写过。需要单独实现 appium 拉去 apppackage 和 ios 的包通过 adb 安装测试环境。这种搭建跑起来到投入使用不超过一周时间。全心投入更快。后期维护优化时个难点。同时接口测试你要做的话,简单的来说你要监控 cpu 和内存还有次磁盘的 io 情况,还要智能分析比对。最好这一块也是不容易的。多敲多练。有计划去做才可以

大豆子 回复

你的 pytest+requests+python 的自动化框架是数据驱动还是代码驱动的,接口会有很多很复杂的数据吗?
还有请问,有知道 python 或者自动化测试交流群吗?

teeddybag 回复

问题 1:
本质上是代码驱动,针对不同的接口或者类, 在代码里面建一个对应数据工厂, 然后在里面创建一个接口的请求模版, 可以根据关键字变量来动态改变请求参数。 至于数据的复杂性这完全取决于你的接口定义的参数复杂度。
问题 2:
进过几个交流群但是里面有点变味。 各种推销啥的。就不了了之了。

大豆子 回复

那跟我现在做的差不多,但是有些业务场景,涉及的数据非常复杂,多层字典嵌套,还有列表,用这种方式,接口数据就会非常复杂了

大豆子 回复

这里的代码驱动的意思应该是关键字驱动吧,一般关键字驱动和数据驱动是一起使用的。

去年也是基于 Python Requests 开发请求发送、响应校验的通用自定义关键字以及上下游自定义关键字,比如 Oralce、Mysql、Redis、Mongo 数据库操作关键字,基本满足目前的接口自动化需要,同时使用 Python Locust(采用 Request 库作为客户端)实现了单接口性能的自动化关键字开发,快速构建微服务接口的功能、性能自动化测试用例。

不过基于 RF 关键字驱动的自动化测试,用例本身的维护性需要着重考虑,所以关键字设计时需要着重对可维护性需要把关,比如,代码设计复杂度、异常易于定位,输出指向明确、用例组织简洁。目前基本控制在了 4、5 行覆盖一条接口用例(包含了数据库验证)。

楼主,你 github 上有没有写好的 python 接口自动化的项目呢,给个链接学习一下,主要是我现在卡在复杂的关键字封装上了,比如说,一般业务逻辑需要调用多个接口,所以想看一下你咋处理的

你现在的状态才算刚刚起步。

这个公司的项目一般是不能放到 github 上的,你这里面说的卡在复杂关键字封装是指的 RF 框架的自定义关键字么?

大豆子 回复

我就是接口测试用的工具:pytest+request,思路是模仿 RF 的关键字思路

我这边的方法如下(仅供参考):
举个实例:
比如正常到店内扫码点餐的一个操作。其中可能需要调用获取菜品信息、菜品信息校验、下单等多个接口调用。
那么你可以根据模块单元来划分封装接口(每个接口里面最好只提供一个操作,这样可以减少依赖),
比如:
菜品模块单元里面可以包含获取菜品信息,菜品校验等接口。
下单模块单元里面包含下单,撤单,取消订单等
订单模块单元里面包含拉取订单详情等
最后在 case 里面分别调用每一个模块单元里面的单一接口。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册