导语
UTP 自动化测试平台是 TMQ 的一个联合项目, 目的是方便各项目测试人员更好地开展自动化测试建设工作, 减少重复平台建设的成本, 提高产品的自动化测试效率
背景
测试用例, 是测试的基础原料, 没有用例, 测试工作无法执行, 自动化测试也是一样实际的自动化测试开发工作, 绝大多数时候都是在进行用例的编写 / 调试
随着自动化测试工作的深入, 测试用例的数量和类型也大幅度上升不论从业务的角度, 还是技术的角度, 我们都需要有一套用例管理系统能够把自动化用例管理起来, 以提升自动化运行的效率
技术
对于自动化用例, 用例系统需要实现下面 3 个技术点:
用例的解析: 把自动化测试用例转换为结构化的数据, 才能进行存储和管理;
用例的展示: 让测试人员可以方便的进行用例管理;
用例的输出: 让执行系统能够把用例运行起来
1 用例的解析
大家有各种各样的测试用例, 有 Java 的, 有 Python 的, 还有 Excel 等 并且每个组都有自己的规范和习惯用例系统不可能去一一适配每个组的规范, 那样的工作量是无法接受的所以, 在考察了各个组现有的用例和规范后, 用例系统规定了一套公共的规范只要用例实现了这套规范, 就能被用例系统管理起来
对于 Java 语言, 用例系统规定了注解规范, 如下:
对于 Python 的用例, 用例系统规定了注释规范, 如下:
用例解析时候, 形成结构化的数据, 用例系统需要把数据保存到数据库中但是, 用例是存储在 SVN 中, 而 UTP 系统是运行在 IDC 的服务器上, IDC 的服务器是无法和 SVN 互通的所以, 我们需要找一台能够访问 SVN, 也同时能够访问 IDC 的机器, 帮助我们做数据转发
图: 节点网络结构
最终, 我们将用例解析的程序部署在转发机上, 解析程序定时拉取 SVN 最新代码, 如果代码有更新, 则解析用例代码生成结构化数据, 然后将数据以 json 的格式, 通过 HTTP 传递到 UTP 服务器上
图: 脚本代码解析流程
2 用例的展示
服务器收到解析器传递过来的用例数据结构以后, 将数据保存在数据库中, 同时将用例文件保存在硬盘里
数据存储, 是为了向用户进行展示并使用平时, 用例是在 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 用例系统到此的流程已经介绍完毕, 最后给大家展示一下用例系统的整体架构图
图: 用例系统整体架构
来源: https://cloud.tencent.com/developer/article/1047747