关键词

测试用例 xmind 禅道 gitlab 自动化 质量平台 api

现状

  1. 测试人员使用 xmind 编写测试概要,每个人写的用例都不一样,缺少具体的格式及规范。
  2. 测试人员执行用例通常直接在 xmind 源文件上做标记,缺乏详细的用例执行记录,测试完成没有具体的依据及报告产出。
  3. 测试用例 xmind 文件使用 git 管理,每次测试完成后会上传到 gitlab。
  4. 团队日常使用禅道作为项目管理工具,禅道有完整的测试用例、套件、测试单等功能,但目前未使用。

解决方案

  1. 制定合适的 xmind 编写用例规范,统一格式及书写习惯,让测试用例换人依然可以顺畅执行。
  2. 解析 xmind 文件为禅道格式的用例,自动更新到禅道,生成测试用例及套件,方便关联测试单。
  3. 仍然使用 gitlab 管理 xmind 源文件,同步 gitlab 更新状态,实时更新用例到禅道。
  4. 后续使用禅道执行测试用例及关联缺陷,测试完成后可以有报告产出。

技术关键点

问:如何获取 gitlab 的更新状态?
答:使用 gitlab webhook,简单来讲就是网络回调,在 gitlab 项目里配置一个网络接口,当 gitlab 有状态更新时,会把对应的更新消息推送到网络接口。推送消息里面包含了本次推送所包含的 commits 以及文件变更。

问:如何从 gitlab 拿到 xmind 源文件?
答:使用 gitlab rest api,直接访问 gitlab 可以拿到公开项目的信息,访问 private 项目的话则可以配置 access token。接口返回的数据是二进制信息,即 bytes,可使用 BytesIO 转化为 stream 流。gitlab-python客户端可以直接使用,也比较全,如果用到的 api 比较少,不想安装依赖也可以自行封装 client。

问:如何解析 xmind 文件?
答:xmind 本质上是一个压缩包,即把一系列文件打包压缩后更改后缀名为 xmind,通过解压可直接查看压缩包里面的文件,xmind8 的内容存放在 content.xml,xmind11 版本的存放在 content.json,而 xml 和 json 都是树型结构,可以把 xml 和 json 转化为树,通过遍历树可以拿到所有节点的信息。

问:如何兼容 xmind8 和 11 版本,以及其他概要、标注等信息?
答:上面讲到 8 和 11 都是存储格式不太一样,但内容大同小异,我这里是直接解析 xml,再对内容做调整,使 8 版本的 xml 直接转成 11 格式的 json 数据;标注和概要等都有具体的格式可循,既然 xmind 可以解析源文件并渲染格式,我们自然也可以解析对应格式然后拿来做更多的拓展,基础内容可参考xmind sdkxmind2testcase

问:如何把 xmind 转成测试用例?
答:我们通常使用 xmind 都是一条线写到底,分别包含了测试用例的迭代、模块、标题、前置条件、测试步骤、预期结果等信息,及树的一条路径为一条测试用例,遍历树的所有路径,即可拿到所有的测试用例,一条路径可简单理解为长度不固定的字符列表 list[str],迭代、模块信息一般是第一二个节点,测试步骤、预期结果是最后两个节点,中间的不定长节点可归为用例标题或前置条件,可按实际使用习惯去调整;如果想一条测试用例包含多个步骤和预期结果,可判断多个步骤前是否有公共父节点,如果有则可以收拢为一条用例;概要信息可以解析为所有概括节点的子节点......

问:如何把测试用例信息更新到禅道?
答:可使用禅道 web api,具体可查询官方文档;管理员账号访问后台 - 二次开发 - 接口信息;直接从前台抓接口信息;操作禅道数据库。常用接口有新建测试用例、编辑测试用例、批量删除测试用例、获取产品信息等。看具体使用情况,直接看开源代码和数据库设计也会有一些收获。

问:如何做到 case 或步骤颗粒度的增删改?
答:以迭代 (文件) 为维度,在新建或修改文件时记录测试用例信息,可简单理解为 list[Testcase],二次修改时,也解析新文件为 list[Testcase],以用例标题为衡量标准,判断两条用例是否相等,以所有测试步骤、预期结果为标准,判断用例是否有更新。通过对比两个列表,得出差异,旧列表有而新列表没有,即删除了一条用例;新列表有而旧列表没有即新增了一条用例;两者皆有但步骤、预期不一致的,即为更新用例,分别根据这些更新信息调对应禅道接口即可做到最低颗粒度的同步。

具体成效

开发工时 7 天,才刚刚开始使用,总体来说没有增加使用者成本,相对规范了测试用例的编写及执行,执行结果和测试单、报告也为测试过程提供了更好的依据。


↙↙↙阅读原文可查看相关链接,并与作者交流