自动化测试系列(二)--分层自动化测试

导读

这一篇跟大家一块探讨下自动化测试的分层理论。当下自动化覆盖了很多场景的测试,比如单元测试、接口测试、UI测试、性能测试等等,那么什么条件下更适合用自动化测试呢?先来看看经典的自动化测试分层理论吧。

分层自动化测试

自动化测试系列(二)--分层自动化测试_第1张图片
上面这个图想必大家都已经见过了,我就不多说什么了。一句话概括一下就是从下往上的投入自动化测试的ROI(投入产出比)会逐渐增高。下面就分别来说说吧。

  • 单元测试
    单元测试,毋庸置疑是投入最少产出最多的一类自动化测试。每种语言都有自己的单元测试框架,比如C语言的CUnit,Java的TestNG、JUnit,Python的unittest、pytest等,当然还有用RobotFramework做单元测试框架的。单元测试其实对dev来讲提高代码质量的最直接的手段,任何一个开发者都应该有单元测试的意识,还要想办法去落实。
    我曾经参与一个在线办公项目,项目组的成员是临时凑在一起的,而且项目工期比较紧张,领导没有让成员进行单元测试,直接开发完成就提测。结果,一轮测试bug发现将近100个(这个项目算是个小项目),而且整个测试周期持续了两个星期。其实,在发现的bug里面有30%左右的都可以在单元测试的时候发现,就是因为没有单元测试,导致Tester需要重复的验证,而且每次都会发现不同的错误,导致测试周期延长了一倍。当然,代码的质量还要因人而异,但是我觉得即便你的编码能力不如其他人,如果你多花点时间自测效果还是很明显的。
    这个例子只是从一个实际项目的bug反映出来的,并不是每个项目都会通过bug的多少来验证单元测试的效果。我们还是要通过一些手段在平时的时候就要把控单元测试,把bug扼杀在摇篮里。通过单元测试覆盖率来检查单元测试的覆盖力度是一种有效的方式。但我们要注意方式方法,有些公司要求单元测试的覆盖率为100%(真实苦了我们这帮码农 )。其实,这种检查一旦成了指标难免就会增加开发的工作压力,一切要根据实际情况而定。如果代码库里有很多不用的代码,其实也没必要去做这部分的单元测试(当然,作为一个开发还是要经常去重构下代码,删除老旧,迎来新生,对吧?)单元测试做了,但是没人执行,这也不行。相当于庄稼种在地里了,没人去收,到头来还是一场空。因此,要制定一系列可以实施的措施来保驾护航,可以在合代码的时候由PJM统一执行单元测试,也可以把单元测试放到持续集成的job中自动执行。总之,干什么事都要有始有终。
  • 服务自动化测试
    上面啰里啰嗦说了太多,后边简洁一些哈
    从目前基于web产品的自动化测试来看,主要是指接口自动化测试(其实还有像集成测试、组件测试等,我就以接口为主吧)。我所说的接口自动化测试其实包含两类,一类是纯接口的验证,一类是接口场景类的测试。
    纯接口测试比较好理解,就是我们去用Postman之类的测试工具改改参数再下发接口,查看一下结果是否符合接口逻辑,这一类相对来讲比较简单。另外一类就是由接口构造一个测试场景,实际上是一种业务功能的测试,只不过由接口来衔接。比如我要测试淘宝的清空购物车功能,我可能需要先调用登录接口,再调用清空购物车接口,最后调用查看购物车商品数量接口去验证,一个用例就有三个接口。因此,大家在去做接口自动化测试的时候可以从这两类入手。当然,第二类场景的接口自动化涉及到了业务功能的测试,往往会节省较多的测试工作量,尤其是在进行回归测试的时候。
  • UI自动化测试
    UI自动化测试主要是通过一系列的测试框架和代码包对web UI(比如:Selenium)、app UI(比如selenium、appium)、桌面应用UI(比如Autoit)模拟手工操作的步骤完成自动化测试用例的创建。通常可以通过录制和脚本开发两种方式编写测试用例。现在有很多自动化测试框架可以将录制的步骤脚本化以实现维护性高的目的。针对某些UI控件定位不准确的难题,也运用了图像识别(比如Airtest)等新技术。从这一点看,UI自动化位于分层金字塔的最上一层也是实至名归吧,投入了人力、物力、财力,但往往收获颇微啊。这其中的因素有很多,包括UI的迭代性强、使用不同的JS框架导致控件定位不准等等。看到这,可能有些TX就已经打退堂鼓了,哈哈,大家不要被吓住,还是那句话,要看性价比。比如app开发项目需要适配多个品牌的不同型号的手机(特别是安卓这个大家族),如果遇到后台重构,难道我们要去挨个机型点一遍吗?想想都头大。如果这个时候我们有一批测试核心功能的UI自动化用例,拿来跑跑不是很爽吗?是吧,即便是有些用例需要修改甚至需要写新用例,我相信也比我们去挨个点点点快很多。

总结

我想我还是赶紧结尾吧,快收不住了。。。这一篇主要是跟大家讨论了一下自动化测试分层以及每一层的“简短”介绍,希望对大家有所帮助。其实每一层都可以写不止一篇文章,尤其是服务层(权当我偷懒,只写了接口自动化)。后面会针对每一层的不同知识点再跟大家细细介绍,敬请期待吧。。。

你可能感兴趣的:(软件测试)