作者:Hangte
商业转载请联系小编获得授权,非商业转载请注明出处。
自动化测试是持续集成/持续交付里重要的一环,互联网变化很快,企业对快速交付能力的诉求也越来越强,自动化测试也就越需要更快、更稳、更准。
那么如何让自动化测试更快、更稳、更准?自动化测试如何在可控成本范围下兼顾质量和效率?分层测试就是其中的一种探索实践。
对于分层测试,大家理解上也是千人千面,我的理解是:分层测试是一种测试实践,在测试分析的基础上,基于对软件内部实现的理解,通过对软件或系统不断地进行分层分解,寻求在软件质量和工程效率上更优解的一种测试实践。
这里包含几点:
1.是在测试分析的基础上,即需要充分理解需求本身,以测试分析为基础
2.要理解软件内部具体的实现逻辑,手段上偏白盒
3.分层测试作为一种测试实践,对于不同的软件系统,是需要结合实际,不断探索实践
从大的系统分层上,分为后台、终端
对单独的端上进行划分的话,则可像典型测试金字塔那样分为用户视图层、GUI 层、逻辑层、单元层
分层测试里的 UI 层,一般会采用 mock 或 hook 技术构造数据,模拟出待测的 UI 场景,这样无需等待服务端返回数据,速度更快。由于数据是模拟构造的,那么就可以方便地模拟构建各类场景,可以测试的更全面。也因为场景是模拟构造的,不易受 UI 变更的影响,一般稳定性也会更高。
举例:目前很多产品都有智能推荐,同样的界面,不同的用户看到的东西都是不一样的,如果是端到端的 UI,模拟用户的方式打开页面后,展示的可能是 A 布局,可能是 B 布局,也可能是 C 布局,这对于自动化测试来说就比较麻烦。若采用模拟构造场景的方式,则可以分别模拟出 A 布局、B 布局、C 布局的场景,分别进行充分测试。
“如果只是对内容进行测试,那和单元测试的区别又在哪里呢”,对内容进行测试我这里理解算是分层测试里的逻辑层,与单元测试的区别主要在于单元测试颗粒度小,逻辑层测试一般颗粒度大,包含较长的逻辑链路,具像表现:
1.单元测试一般有较为明确的 api 入口,而逻辑链接则需要去寻找适合的入口
2.单元测试链路较短,可以采用模拟构造对象的 mock 技术去隔离依赖,而逻辑层链接长,有时模拟对象很难塞到链路底层,因此还常常需要使用 hook 技术进行链路打点。
3.单元测试颗粒度小,代码变动对 case 的影响也更频繁,因此一般建议由开发人员编写;逻辑层若数据构造得当,一般受代码变动的影响较小,且与业务逻辑关系比较紧密,可由测试人员编写。