平台介绍
简介
AgileTC 是一套敏捷的测试用例管理平台,支持测试用例管理、执行计划管理、进度计算、多人实时协同等能力,方便测试人员对用例进行管理和沉淀。产品以脑图方式编辑可快速上手,用例关联需求形成流程闭环,并支持组件化引用,可在各个平台嵌入使用,是测试人员的贴心助手!
功能
测试用例集管理
AgileTC 能够将用例集与需求关联,支持 xmind/xmind zen 的导入/导出,具备丰富的搜索能力,如根据用例集名称、创建人、管理需求和创建时间进行搜索。
用例编辑
AgileTC 支持多人实时协同编辑用例集,其中一个人的修改,会实时同步到打开相同用例的其他客户端,实现更加高效的测试集编写和测试执行协同。支持用例优先级和自定义标签标记。服务端和客户端增加了定时巡检探活机制保障连接稳定性。支持连接异常(如浏览器异常退出或系统故障等)场景下,自动保存用例集。
测试任务管理
用户可以根据用例中的优先级和标签圈选测试用例,组合成自身需要的测试任务。用户可以在测试任务中标记用例测试状态,并查看测试任务的整体进展。
使用方式
环境依赖
- mac/linux/windows
- java 1.8
-
下载
git clone https://github.com/didi/AgileTC.git或者 直接Download ZIP
修改步骤
创建数据库,application-dev.properties 中配置数据库名称为 case_manager
- 利用 sql 中的脚本配置对应表。创建脚本路径:case-server/sql/case-server.sql
修改 application-dev.properties 中 spring.datasource 的配置。默认数据库端口号为 3306
运行
mvn spring-boot:run (在case-server目录下执行)
浏览器打开 http://localhost:8094
项目架构
技术难点
多人协同
多人协同经历了3个版本。 最开始采用了加锁的方案,不支持多人实时协同。其中1个用户打开编辑后,其他用户无法编辑。 之后有些人反馈的多人协同的诉求。为了支持快速上线,我们采用了 diff-patch 的方案解决编辑冲突,用 polling 实现实时通信。如图所示。用户 A 变更后,会将 diff 发送到服务端,而每个客户端会定时从服务端拉起最新的 case。这里就存在1个问题,如果拉去时间设置过短,客户端与服务端的交互就会特别频繁;设置时间过长,由于更新不及时,就会导致用例丢失。
实际该功能上线之后交互体验较差。 最后采用了 websocket 的方式解决实时通信问题。如图所示,客户端 A 的变更会及时发送到服务端,服务端接受变更后,会推送给其他的客户端。
分布式部署
分布式部署的好处:
避免单点故障导致的服务不可用
- 承载更大的用户量
如果直接进行分布式部署,会存在如下图所示的问题。A/B/C 三个客户端,均打开1个用例,服务端会建立3个 session 来保存与客户端的链接信息。这时出现3个 session 不在1个容器中。例如用户 A 编辑用例后,同步到服务端,服务端发送变更到 clientB,但是 C 就无法获取最新的变更。
这是一个服务间通信的问题。首先想到的就是用消息队列的方式,如图所示,用户 A 变更后,同步到服务端,服务端会将变更发送到客户端 B,并且发送内容到消息队列,服务2就可以消费消息,更新用例,并同步到客户端 C。此时存在一个问题是:消息是一个异步动作。这里,如果 clientC 是1个新打开用例集的用户,如果连接到服务2上,可能会发现没有打开过该用例,就会从数据库读取用例,就会读到老的用例。因此增加了1层 redis。来存 session 中最新的 case content。
github:https://github.com/didi/AgileTC/blob/master/README_zh-CN.md
官方介绍:https://github.com/didi/AgileTC/wiki
