测试开发本身核心技术:接口、UI 自动化、测试框架、平台、性能 等。作为测试开发工程师,谈谈这个几个方面所面临的挑战。
更多内容可以学习《测试工程师 Python 工具开发实战》书籍、《大话性能测试 JMeter 实战》书籍
接口自动化
接口自动化是相对比较容易实现的自动化技术,大部分公司应该有都做,工具、框架、平台用什么的都有。在我看来接口自动化的有两个难点。
1. 复杂场景的支持
接口说简单很简单,在复杂的业务中,接口测试其实也挺复杂的,一方面是数据依赖,同时也很考验你对业务的理解深度。另一方面也可能会涉及到外部数据,异步 等问题。所以,能够编写复杂场景的接口自动化其实还是有难度的。
2. 落地程度挑战
接口自动化嘛!上手难度不高,教一教都会,问题是写完了以后呢?什么时候执行,如何跟现有业务正整合,持续的产生价值?如何维护?维护成本几何?有没有更好的方式降低维护成本?--- 这里又涉及到了隐含技能,如何推动技术落地。
UI 自动化
UI 自动化是自动化测试技术最早的探索方向,按理说很成熟,很容易落地。实际情况是,几乎每个测试都会这个技术,但却少有成功落地的案例。
在我看来接口自动化有几个难点。
1. UI 越来复杂
Web UI 来讲,前端 UI 框架的确提高了开发效率,同时因为自动生成的大量的代码,所以给元素定位也带来了难度。
App UI 自动化更是一个大坑,Android/iOS 本来就要根据两个平台实现两套自动化用例,因为采用了 Flutter 框架,更是让你的元素定位来了前所未有的挑战。
2. 稳定性太差
根据自动化金字塔模型,自动化用例最稳定性由高到低依次是:
单元测试 > 接口自动化测试 > UI 自动化测试
UI 自动化测试的稳定性是最差的,Web UI 的自动化稳定性相对好些,App UI 自动化测试对于复杂的混合应用,包含 native/webview/flutter 你需要切换不同的模式去定位,有时还需要跳 浏览器 或第三方应用来完成操作。还涉及到网络问题、页面加载速度、偶尔触发的一些特殊弹窗。
3. 成本太高
这里所数的成本包含两方面:编写成本 和 维护成本
•编写成本:UI 自动化的编写成本要比 接口自动化高很多,尤其是 App UI 自动化,查看定位元素需要专门的工具,在编写的过程要反复尝试定位方式,都会导致编写过程是比较消耗时间的。
•维护成本:一方面不稳定因素太多导致的维护成本,同样环境下,可能昨天可以定位,今天不行了;或者有一定概率不能定位,那么就需要再投入时间进行调整。另一方面版本迭代产生的维护成本,没错~!当你好不容易将自动化用例稳定下来,版本变更了,我们又要应对版本的变更,不得不调整自动化用例。
4. 落地程度挑战
一方面,当你的自动化不稳定的时候,那么就是不可信任的,如果强行集成到 CI,其实会带来更大的抵触,谁会在一个不确定的问题浪费时间排查问题。另一方面,人力成本压力,因为这需要投入更多的人力去进行自动化开发和维护。而且,相比较投入的成本带来的收益有限。
这就导致 UI 自动化的落地是比较困难的。
平台
平台开发是近几年测试开发重点发展的技术,各个大小公司都在造平台或引入平台。
在我看来平台开发的难点有一些几个方面:
1. 开发技术
开发技术对于专注于业务测试的测试工程师来说还是有些门槛的,而且,测试开发往往需要兼顾到前端开发、后端开发,平台自测试,甚至包括部署上线。这就要求我们掌握全面的开发技术。
开发技术要求的面很广:比如 实现性能监控就需要掌握 websocket ,实现定时任务就需要了解多线程、队列等。
2. 设计与交互
同样是做平台,你写的平台和 MeterSphere 的差距是什么?是技术吗?显然不是,大家用的技术都差不多。那就是设计的能力,如何规划平台的功能和交互,这可是产品经理、UI/UX 设计师的工作,小到按钮的位置大小,大到功能模块划分、功能模块的划分、页面布局、交互逻辑等;测试开发可能不太具备这些,或者压根不注重这些,随便找个平台照着抄就完成。往往做出来的平台不够 “精致”,这也是造成 “难用” 的原因之一。
3. 落地程度挑战
首先,你将会面临的第一个质疑:不是已经有 xxx 平台了,你这个平台的优势是什么?要回答好这个问题还真的挺难的,所以,你开发的平台要考虑跟现有业务的整合能力;这就需要你从现有业务流程中挖掘问题的能力,然后平台化解决。
总结
不管是自动化还是平台开发其实都会面临很多问题和挑战,要想处理好这些问题都挺难的,有些困难需要一些技术突破才能解决,比如,App UI 自动化测试,需要 AI 图像识别技术才能可能解决。
落地、落地、落地:每个技术我都在说落地的挑战。再高大上的技术无法落地,无法在项目中产生持续的价值,都是无用的。你应该专注那些更可以落地的"测试技术"。
作为一个做了五、六年测试开发工作的人告诉你,如果,只是关注以上技术,并尝试将他们落地几乎没有太大生存空间。我们更多时候在做与测试不太相关的工作。比如、测试环境管理平台,这背后需要丰富 docker/k8s 相关技术。再比如,问题反馈系统,这就要求你掌握小程序开发技术。
所以,测试开发面临的最大挑战就是较强的学习能力了吧!首先,保持自己在测试技术上的优势,能够快速了解、引入新的测试技术;其次,有更加全面的开发技术,以便于应对各种需求。最后,如何推动技术的落地能力。
更多内容可以学习《测试工程师 Python 工具开发实战》书籍、《大话性能测试 JMeter 实战》书籍