DevOps开发理念已经逐渐成为一个行业共识,测试作为其中非常重要的一个环节,真正决定着DevOps践行的效率与程度,如果软件测试中各个闭环的环节没有做到自动化或者智能化的话,DevOps也很难达到应有的效果。我国目前软件测试行业大部分团队所面临的一个共同困境是手工测试占比高、自动化程度差导致的测试周期长、人力成本高;缺乏一站式测试活动平台。

各种测试活动需要各种工具,甚至没有工具,各种测试都有自己的平台,不同平台之间的衔接性是比较差的。比如性能测试,需要设计发现性能瓶颈的测试用例,这个测试用例本身也是一个功能测试用例,如何在成千上万个功能测试用例中找到、重用相应的测试用例,比如说最长路径或者说使用网络最长、磁盘最多等等这些跟时间效能相关的测试用例。如何去选择、如何去重用,是功能测试和性能测试之间的一个结合点。目前缺乏这样的平台,可以使测试用例之间可以相互转换。

一、基于AI的自动化测试平台整体架构

第一个模块是AI系统,软件测试代码自动化生成。目标有很多测试代码,比如说接口测试、功能测试,辅助于AI代码去进行一些测试代码的自动生成,生成一些自适应的一些测试代码。

再就是被测软件的隔离,一个软件,尤其是复杂系统的软件,比如说电力系统、银行系统、电信系统,复杂系统都是由各个子系统组建的,一个子系统有可能是A公司开发的,另一个子系统有可能是B公司开发的,AB之间的交互基本上都是通过接口,有的时候是通过后台数据的共享。A系统的数据状态改变了,造成了B系统可以现在测,因为他的数据是从A系统流过来的,有数据依赖,有时候也有控制依赖。这样测试的即时性就不高,因为不可以随时测。隔离本身也可以叫做挡板,就是为了把软件隔离开来,使得它随时可以测。

有了测试代码了,也有了被测软件的隔离了,需要运行在硬件上面,现在的硬件比二十多年前多多了,二十年前可能有PC机,有服务器,操作系统有Linux、各种的Windows等等,现在的话有手机、有Android、有Ios,现在还有智能家居、智能汽车、pos机等等,要运行的话都是要在这些系统上去运行,因此整个系统的硬件需要自成一个体系,能够一站式地创建出来。在大的公司,比如说微软,在ERP组甚至整个微软内部是有一套硬件系统的。现在也有叫云端系统、云计算中心等等,云计算本身可能更偏向于PC机或服务器,这块是非常大的一个管理体系。

在产品的发布以后,需要有一个持续的监控和软件bug自动修复。目前为止在业内绝大部分的开发组、或者产品组,bug本身是由测试组去发现,递交到bug管理系统,由产品经理、开发经理和测试经理一块把bug赋给某个开发人员,让他去修复。但是bug不一定非要开发人员去修复,这也是软件bug自动修复本身的意义所在。

至少有两种技术可以做到bug的自动修复,一种技术是符号执行,叫Symbolic Execution,这个是在NASA或者一些形式化验证的方式的软件中使用,一些非常复杂的软件、一些高可用性、高可保障性的软件,需要大量的形式化的测试。大部分的形式化的测试都是在模型上面,或者状态机上面,或者抽象的对软件的描述上面,进行一些推测,进行一些属性的描述,进行一些类似于数学,但是还没到数学那么深的,一些逻辑上的一些推测,展示出来在整个的系统内部或者模型上面是不是有问题,这是比较抽象的层面。

在实现层面上,开发人员用的是Java或者Python或者C++等等,符号执行也可以在语言级别。可以做一些非常有用的测试,比如说可以做一个从入口全面的扫描,然后去分析。代码开发完整个行为也就描述出来了,在符号执行的基础上把行为展示出来。通过一些if语句的串联去收集。if语句有可能条件是ture的,有可能条件是false的。如果是ture的说明路径从刚开始入口到这个点是可以达到的,ture的同时也反映出来所有的条件本身都符合,条件本身在代码级别是由很多变量组成的,变量是由不同的类别组成的,这些变量本身,一旦返回一个ture或者false的时候,还会返回一个中间值,不确定。

这个问题在计算机界叫NPComplete,是非常难的一个问题。一般这种问题都是通过指数级的方式或者最笨的一种方式去解决,没有一种聪明的方式可以快速地解决。一旦返回ture或false就说明,整个变量是有一个赋值,这个赋值正好是我们所需要的,从入口处所需要的测试数据,这个测试数据是指哪打哪,路径一旦找到,条件一旦积累起来,返回ture同时返回一个数据,这个数据就是所需要的测试数据。这个技术本身是非常好的一个技术。它正好是在整个的if条件里面,从刚开始的if条件到下面的if条件的一些串联,所以对if条件本身是敏感的。比如说a>b,如果a>b本身产生一个bug了,那么它试着去a<=b,它就会尝试以这种方式去修复。

另外一种bug的自动修复方式叫做AI的机器学习,像github这种测试代码库,还有很多开源的测试代码库,里面有很多bug描述也有很多相应的代码片段,这种就是通过bug的描述和提交的代码的关联进行一个大量的学习。在某种程序上,当提交一个bug的时候,可以提示以前是怎么修复的,我们应该怎么修复,推荐一些修复方式。

最后一个幂快就是Pipeline,把这几块整合起来,不管是数据流也好,控制流也好,都控制好,使得被测软件能够被一键化地被测试。

二、AI+机器人+模型(ARM)技术来构建功能自动化测试

AI学习生成业务流程图,测试用户通过组合流程图形成积木图,机器人通过视觉和机械化方式稳定执行。快速、高效、低成本地完成.EXE应用、Web应用、iOS、Android、小程序、混合应用的UI自动化测试。

AI学习生成业务流程图,测试用户通过组合流程图形成积木图,机器人通过视觉和机械化方式稳定执行。

有3个步骤,最左边是各种类型的被测软件,中间有一个业务流程图,它类似于脑图。有了业务流程图之后,自动化和智能化就体现在代码自动生成和报告自动生成。

1、模型驱动-测试用例自动化生成 以百度搜索为例,可以进行点击操作、输入操作、断言操作,包含了测试的三要素:数据、流程和断言。

画的步骤基本上是属于自然语言,代码会自动生成,左边是数据,右边是数据驱动的测试代码。

模型驱动的理念是模型即代码,这个代码本身是可以被隐藏掉的,高级用户可以针对模型去进行修改,模型驱动99%的情况下并不需要看到代码。

比如说测试滴滴的主要业务流程。左边是一个业务流程图,是一个树型的业务流程图,抽取出一条线放到右上角放大,可以看到这是海外租车的一个流程:自驾租车页面→海外租车页面→去选车页面→选择一辆车页面→基础保险套餐页面。

步骤完全是按照自然语言去描述,按照人工测试用例设计的方式把excel或步骤的方式搬到流程图上面。有了这个模型以后,整个的代码就不用去生成、自动去运行,像下面案例所示的,每一个步骤都有一个截图。每个测试用例对应一个视频,或者一组测试用例对应一个大视频,点击测试用例可以跳转到视频的各个步骤,方便浏览整个测试用例的状态或者debug。

最后一个截图是点击保险信息,保险信息弹出框本身有一个关闭的按钮但是关闭不了,就造成了整个海外租车流程完成不下去。 从模型驱动的角度可以看到,一个业务流程图本身去描述一个复杂的软件,是基本上不可行的。复杂的软件有上万个测试用例。一万个测试用例或者一万个行为描述到一张图上面,必然是很密集,很多时候也设计不好。因此我们提出了一个像“搭积木”一样的思路,由简化繁,把测试用例的设计,通过搭积木的方式,把不同的流程图组合起来,是组合爆炸的一个方式。

假设一个场景,用户登录,登录之后去借钱,去借钱本身有两个行为,去借钱的时候有没有设置好银行卡号,如果设置好了是一个流程,没设置好银行卡号是另外一个流程,登录的话可以通过用户名密码、通过手机短信、通过微信扫码的方式去登录。登录的3个行为和借钱的两个行为如果去组合一下的话,2×3是6个行为,如果去录制,这6块是非常重要的点。

模型驱动的话,本身是有模型和一些语义在里面,有一些数据算法可以直接去应用,比如可以自动组合爆炸。上面举的这个例子一个是两个行为,一个是三个行为,画图的时候只需要画5个行为,2+3是加法,它会自动组合出来6个行为。因为模型的存在,计算机可以构建出一个新的测试用例。

比如说有个测试有10个模块,每个模块有2个行为,组合到一块的话 ,就会瞬间生成1000个组合出来的行为,设计出来非常复杂的,非常长的,数量也非常多的测试用例。这就是由于模型驱动的存在带来的好处,录制的话是1000个测试用例需要录1000次,通过模型驱动,即使要录制,也是只需要录制每一个小的模块的行为,各个小的模块的行为录制好以后,通过搭积木的方式就自动组件出来了。这是模型驱动做测试非常重要的一个价值所在。

三、AI技术在功能自动化测试中的应用

OCR是很标准的一个AI应用。OCR是做文字识别,有些是图标,没有文字,就通过 Mobilenet, 是tensorflow的一个更具体的针对与轻量级的app的训练深度学习的框架。

这样的话,像支付宝的好多设计,icon的设计、图标的设计,打上“支付宝”这三个字的标签,有了这个语义以后,在测试用例里面,就可以直接用汉字“支付宝”这三个字去定位到整个icon或者图标。 定位功能在自动化测试里面是非常重要、非常核心的。尤其是在前端经常修改的情况下,如何使得定位的方式更智能、更自适应。这也是AI在某种程度上能够适应软件变化的一个方式。

另外一个是多个页面场景的测试,这个是比较关键的,也是非常重要的。比如说携程的订飞机票和去哪儿的订飞机票非常相似,如果把携程的订飞机票测试用例学习好了,AI学会了,应用到去哪儿的订飞机票,就不用写了,因为AI已经学会了,它知道在这个页面或者出发地、目的地填什么内容,内容在某种程度上我们可以去提供,但是整体的流程它会自动去操作。整个场景的AI化在未来具有非常大的前景。

这个可以和模型驱动非常好地结合起来,因为模型驱动本身是结构化的数据,AI学习起来就会比非结构化的内容要快。这是从AI的角度上能够把刚才提出来的流程图、积木图AI化了。AI化的意思就是把流程图都消掉了,比如说“登录”,这是非常通用的,不管是web页面还是app,所有的软件都有登录,几乎都是一样的,非常简单,就是输入用户名、密码再去登录。通过AI的学习,非常简短的流程、非常简单的操作,可以作为一个通用的流程放在里面。大家通过拖拉拽的方式组建出自己的测试代码。甚至很多行业内的代码也可以通过AI学习出来进行行业内的共享。

以上就是基于AI技术的功能自动化测试平台的整体架构以及实现原理的介绍,如需获取试用版本或进行相关技术交流,可私信我。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐