十年测试经验之谈:如何做好测试开发的工作?

从业近十年,从开始的功能测试到后来的自动化测试、测试开发、测试专家、高级测开...这段经历并不算太坎坷,也没什么太多故事,我只想从个人视角来给大家分享一下我的看法:如何做好测试开发的工作?

十年测试经验之谈:如何做好测试开发的工作?

测试开发(Test Development)指的是将测试的理念和方法深度集成到整个软件开发生命周期的过程。

测试开发的核心思想是测试和开发是同等重要的,应该并行进行,相互影响和促进。

测试开发与传统的独立测试的区别在于:

  • 测试人员不再是后期验证者,而是参与需求评审、设计评审,以确保质量的前期控制。
  • 测试开发与开发人员紧密合作,主动提出测试建议,指导开发人员增加可测试性。
  • 大量应用自动化测试方法,替代重复性手工测试。
  • 持续集成和测试驱动开发可确保及早发现和定位缺陷。
  • 优化和完善测试环境、测试数据、缺陷管理流程等,以提高效率。

很多公司有个误区,认为测试开发服务于测试,为了测试提高效率而去做测试工具、测试平台。我认为是很狭隘的,测开的工作和测试、研发是同等的,在项目中仍然是重要的角色。如果说安全测试领域中仅会使用工具、脚本来进行浅显的攻防测试的被称为“脚本小子”,那仅会开发工具、测试平台的我们也可以称为“工具小子”。

很多同学说我想进步,我也不想只是简单的点点点做功能测试,我应该从哪开始学?是先学python还是先学java?是先学微服务还是先学django?是先写接口自动化测试还是UI自动化测试?是去了解AI还是先去....

我建议你先别想太多,先去了解你的业务,你的场景是什么?哪些是高频使用的场景,哪些是易产生bug的场景,哪些是未覆盖的场景。想清楚这些你再去尝试先实现一个接口自动化(可以通过Postman内置的转代码功能,转成Python后运行),再慢慢拓展...先动动手。

简单分享下我的Roadmap:

1、业务使用Java作为研发语言:学习Java,从一开始的SSH(Struts+Spring+Hibernate)到业务使用微服务去学习Spring Cloud,从Netflix的zuul到Spring Cloud的gateway,从0跟着开源项目实现了一个微服务架构的系统。可能业务代码还不太精,但是至少我看得懂研发的代码是什么,便于我后期做白盒测试。

2、业务需要又去学习安全测试:使用Appscan/Burpsuit/kali等做“脚本小子”。

3、项目上需要精准测试:了解Jacoco,了解git diff,使用插装模式生成diff差异,func和case关联,每次提交代码仅需要对影响的case做回归,节省大量人力(实际效果一般,此处按下不表,以后有机会再分享)。

4、换了公司,业务使用Python作为研发语言:学习Python,了解Python特性和Java的差异,发现Python很简单,写起来也轻松,就是bug多(因为没有强校验,后来经过python3.5版本后优化了特性类型提示Type Hints好多了),学Django,学Flask,简单业务可以直接上手梭。

5、有了代码经验:自己写接口测试(python httpclient),UI自动化测试(selenium),网上有很多教程这里就不赘述了。

6、公司需要移动端自动化:学习appium,adb,shell,monkey。

7、需要实现web:学习vue,uniapp。

8、测试平台搭建:使用RobotFramework作为框架,逐步实现接口+UI的自动化测试,后续通过Jenkins的平台实现E2E执行。

9、内部工具使用飞书:了解飞书API、调用链、回调事件等,封装机器人实现自动化测试。

10、AI盛行:了解OpenAI,Claude2,Bard,以及国内的讯飞、文心一言、chatglm等。本地搭建知识库实践、模型微调、RAG召回。

就写这么多吧,也不是为了炫技,很多东西网上都有,一搜一大把,但是我的经历则是贴近业务,业务有需要我就学,而非创造需求。一直在思考一直在进步,拥抱开源,乐于接受新鲜事物是我的优势。

个人的努力<平台的优势,一定要对自己有清晰的认知,尽可能贴近业务,你才能知道项目真正需要什么,而不是一拍脑袋,搞些重复造轮子的蠢事。贴近业务解决业务痛点,这就是测开的意义,否则做了再多工作也只是空中楼阁锦上添花。

测试开发如何深度参与项目,可以从以下几个方面着手:

参与需求评审

测试人员应该在需求评审阶段就介入,思考需求的可测试性,提出合理的修改建议。

设计可测试的软件

与开发沟通,提高软件内部的可观察性和控制能力,增加访问测试需要的接口。

创建自动化测试框架

根据技术栈选择合适的自动化测试框架,编写常用测试模板和工具类。

编写测试用例

根据需求和设计,尽早确定测试范围和测试场景,编写详细的测试用例。

先做单元测试

在功能点开发前先创建单元测试,确保每个模块都有针对性的测试代码并通过。

做持续集成

将代码集成到主干后,自动编译和运行测试,快速发现问题。

测试驱动开发

开发人员编写功能代码之前,先写测试代码定义接口和预期结果。

建立缺陷管理流程

设立缺陷收集、分类、分配、验证、归档的标准流程。

构建模拟测试数据

通过脚本生成不同场景、不同量级的测试数据。

优化测试环境

调试测试环境,确保能稳定重现问题。

文章源自公众号  惊奇测试之旅



留言