自动化是一个老生常谈的话题,也是一个软件领域非常有技术广度和技术深度的活动,特别是在大型软件的生命周期上。
质量领域本身要求从业人员要全面了解产品、有全局风险意识,例如:产品需求/设计阶段能否发现设计缺陷、产品测试阶段能否发现深层次的bug、产品运维阶段能否制定良好的灰度策略、快速发现、定位线上问题,甚至如何做好新/老系统线上过渡切换等等,这里面都有自动化测试可发挥的空间。
从技术广度来说,不同的技术领域的质量保障需要使用不同的技术(这些技术领域都有一些代表性的工具,但不一定能完全满足实际的项目自动化测试需求),例如有做JUnit接口测试的、有做Web/AppUI测试的、有做性能测试的、有做用户体验测试的、有做AI算法测试的、有做IoT的、有做压测的、有做各种专项(如兼容性、安全、多媒体、网络)测试的等等,实在太多了......。
如果考虑到测试工具本身的可用性、系统性,除知道使用工具以外,可能还需要掌握一些基础开发技能,例如:Java/Node/Python后台、React/H5前端、或者Android/iOS客户端
做自动化测试应该掌握哪些技术?
测试理论基础
关于测试理论基础这里不赘述了,白盒/黑盒、等价类、边界值等。
通用计算机基础
建议至少掌握一门编程语言(C/C++/Java/Python,推荐Python,学习成本相对更简单一些)。相比于特定需求/领域的开发人员来说,测试人员对编码要求相对会弱化一些(当然并不意味着不需要极客精神、架构思想)。涉及到Web、桌面GUI、Android/iOS的可以到具体应用再学习相应的框架。
掌握基本的数据结构以及在程序语言具体中的应用,例如:list、map。
掌握一种代码管理工具,如git、svn。
掌握Linux的使用及基本命令使用,如:cp、grep、vi/vim等。
掌握关系数据库的基本理论和关系数据库(如MySQL)SQL基本使用、NoSQL(如Redis)的基本使用。
掌握基础的计算机网络理论,如TCP/UDP协议、IP划分。
服务端:
(1)白盒单元测试:Junit(Java)、unittest(Python)、gtest(C++)
(2)http接口测试:Postman
(3)抓包工具:Charles、Wireshark
(4)压测:Jmeter,在大厂里面都会有特定的一些写好的工具可以使用。
(5)链路依赖分析:梳理应用间的依赖关系,提供压测模型,大厂里面也有一些工具可以使用。
(6)监控&日志分析:应用稳定性监控,如qps、rt,服务器负载、cpu监控等。日志分析这块可以做一些基于规则的错误日志监控、甚至基于AI的方式(如:机器学习)对日志大数据进行聚类、问题分析/定位。
客户端(Android/iOS/H5):
(1)UI:Appium、Macaca、Airtest
(2)性能(CPU/内存/帧率):Android Studio、Instruments(iOS)
(3)稳定性:Monkey
(4)兼容性:各种云真机平台