UTP自动化测试平台是TMQ的一个联合项目,目的是方便各项目测试人员更好地开展自动化测试建设工作,减少重复平台建设的成本,提高产品的自动化测试效率。
测试用例,是测试的基础原料,没有用例,测试工作无法执行,自动化测试也是一样。实际的自动化测试开发工作,绝大多数时候都是在进行用例的编写/调试。
随着自动化测试工作的深入,测试用例的数量和类型也大幅度上升。不论从业务的角度,还是技术的角度,我们都需要有一套用例管理系统能够把自动化用例管理起来,以提升自动化运行的效率。
对于自动化用例, 用例系统需要实现下面3个技术点:
用例的解析:把自动化测试用例转换为结构化的数据, 才能进行存储和管理;
用例的展示:让测试人员可以方便的进行用例管理;
用例的输出:让执行系统能够把用例运行起来。
大家有各种各样的测试用例,有Java的,有Python的,还有Excel等。 并且每个组都有自己的规范和习惯。用例系统不可能去一一适配每个组的规范,那样的工作量是无法接受的。所以,在考察了各个组现有的用例和规范后,用例系统规定了一套公共的规范。只要用例实现了这套规范,就能被用例系统管理起来。
对于Java语言,用例系统规定了注解规范,如下:
对于Python的用例,用例系统规定了注释规范,如下:
用例解析时候,形成结构化的数据,用例系统需要把数据保存到数据库中。但是,用例是存储在SVN中,而UTP系统是运行在IDC的服务器上,IDC的服务器是无法和SVN互通的。所以,我们需要找一台能够访问SVN,也同时能够访问IDC的机器,帮助我们做数据转发。
图:节点网络结构
最终,我们将用例解析的程序部署在转发机上,解析程序定时拉取SVN最新代码,如果代码有更新,则解析用例代码生成结构化数据,然后将数据以json的格式,通过HTTP传递到UTP服务器上。
图:脚本代码解析流程
服务器收到解析器传递过来的用例数据结构以后,将数据保存在数据库中,同时将用例文件保存在硬盘里。
数据存储,是为了向用户进行展示并使用。平时,用例是在IDE中开发的,使用/调试的时候,也有可能是在IDE中执行。在IDE中,文件是以树状结构进行展示的,所以考虑到习惯,用例系统仍然以树状结构来展示用例。
但是,用例系统和IDE展示,还是会有一些不同。IDE默认是按照文件为单位进行展示,而用例系统是为了管理“用例”所以会以“用例”为单位进行展示。 一个文件可能包含多个用例,在这种情况下,对于同一个用例工程,用例系统和IDE展示的结构就会不一样。
最终,考虑到实际的项目结构,用例系统展示的树状结构如下:
图:用例展示树状结构
3 用例的输出
用例的最终目的是为了进行执行,当用户选择了用例以后,用例系统需要将用户所选择的用例参数及文件传递出去,让执行系统可以执行起来。
为了提高执行效率,UTP提供了并发执行的能力。为了满足并发,用例系统需要将用户所选择的用例进行拆分。比如,用户选择了10个用例,在5台机器上进行执行。那么用例系统需要将10个用例拆分成5份,每份2个用例,然后传递到执行系统中。
但是,并不是所有的用例都可以并发,比如用例B的执行,依赖于用例A的输出结果。这个时候如果将用例A和B拆分到不同的执行机器,会造成用例B无法执行。
同时,一些公共的用例,比如环境准备,文件清理等,也是不能并发的,它们并发没有意义。到底一个用例能否并发,用例系统是不知道的,只有脚本开发人员知道。所以,用例系统提供了一系列注解,用于标示用例的并发属性。
@SetUp : 标示此用例是前置条件, 并发时必须先执行此用例;
@TearDown: 标示此用例是后置条件, 并发执行完时必须执行此用例;
@Independent: 标示此用例没有前后依赖关系(SetUp,TearDown除外), 可以被独立并发执行。
用例被标示以后,用例系统就可以把用户所选择的用例进行拆分,目前执行平均拆分原则,也就是尽可能保持每组用例的个数尽可能一致。
具体算法流程如图所示:
图:用例并发拆分流程
举例,用户选择了下面8个测试用例:
TC_Setup1,TC_Setup2,TC_TestCase1,TC_TestCase2,TC_TestCase3,TC_TestCase4,TC_TearDown1,TC_TearDown2。
其中,4个testcase均标记@Independent
图:用例拆分例子
UTP用例系统到此的流程已经介绍完毕,最后给大家展示一下用例系统的整体架构图。
图:用例系统整体架构
版权所属,禁止转载
扫描下方二维码,关注微信公众号:腾讯移动品质中心TMQ,获取更多测试干货!