Macaca 全周期的数据环境方案 - Macaca DataHub

达峰的夏天 · 2018年03月22日 · 最后由 达峰的夏天 回复于 2019年01月24日 · 4058 次阅读
本帖已被设为精华帖!

上一篇 - Native App 测试用例原则

前言

环境问题一直困扰我们各位,缺乏数据或数据管理不善都会导致研发整体效率低下。行业内也有许多 Mock 平台,以集中式服务为主。

Macaca DataHub 能为项目研发全周期提供数据服务,Hub 顾名思义。官网地址

DataHub - Continuous data provider for development, testing, staging and production.

主要特性

  • 测试友好
  • 去中心化
  • 开源开放
  • 端到端切入

数据源问题

研发期数据缺失,终端同学与服务端根据产品需求,或者已有服务,约定业务交互字段。此时终端同学会根据业务字段创建可以用来 Mock 的数据,数据源需要满足如下几个原则:

  • 标准化:由于终端几乎都基于同一层面的数据协议,各业务在数据交互上的通用性足以满足统一的要求,这里杜绝的个性化引入数据源而增加学习成本和 backup 成本
  • 非侵入:数据源注入不侵入项目代码本身,也就是说业务逻辑的代码不会感知数据来自哪里
  • 去中心:无中心服务依赖,工程本地即有数据备份,任何人可离线开发

场景问题

在面向复杂场景时,最常讲到的就是场景问题,除富交互编辑器一类的业务外,展示型业务的复杂往往意味着场景多,场景组合情况多,业务流转过程中分支多。组合场景的情况很容易遗漏关键场景,而且不好管理。一旦多人交叉协同时,前后交互字段有调整导致信息流反复,追溯成本变高。

  • 可管理:场景数据需要可维护和管理,支持场景数据的语义化和基本的增删改
  • 版本化:场景数据需要与业务逻辑一样,具备可版本化能力,场景数据以明文形式在当前工程中集成

生命周期问题

研发期的数据相对好解决,但从研发全环节覆盖的视角看待这个问题时,需要考虑后续的问题才能从整体上解决。

  • 可迭代:场景数据可以随项目通过 Git timeline 管理,并作为交付必要部分
  • 一致性:数据源应该由上一个周期延续,并在系统集成测试时对接真实数据源
  • 文档化:一致性使得接口文档维护不再散乱、滞后,接口文档自动生成并保持迭代能力是最优解
  • 可测试:无论是进行交付前的函数单元测试、UI 单元测试,还是测试期的系统集成测试都需要依赖可组合数据源,集成测试阶段稳定性要求高,需要数据源服务对外围服务做屏蔽

其它问题

  • 录入成本:数据源人工初次录入成本较高,尤其是在联调期应该支持由请求快照自动录入
  • 问题排查:生产环境应该支持切换数据源,支持代理和快照记录

多环节覆盖

DataHub 支持从本地开发阶段,到集成测试阶段,以及上线前验证阶段的一系列数据环境需求,研发同学与测试同学直接面向 DataHub 管理数据即可,DataHub 可支持 iOS, Android 和前端工程。

去中心化

DataHub 采用去中心化设计,本地研发阶段每项实例都拥有一份独立的数据备份,数据为明文,可随当前项目版本管理工具进行版本化归档,使得项目数据能做到随开随用,支持离线开发。

另外,每份数据都可向远端服务推送并同步,满足不同阶段中心化协同的需要。

数据流动管理

DataHub 采用单向数据流动的原则,使当前项目下的数据内容及时变更并写入。

文档一致性

DataHub 将数据与字段描述整合处理,自动生成接口文档。使得文档能够与交互字段随时保持一致。

场景管理

DataHub 采用多场景设计,能够根据场景名称进行数据分组,同时提供了场景数据编辑功能,可以通过 DataHub 的面板界面进行操作。

请求快照

DataHub 兼备代理功能,会将最近请求的实时响应保存下来,便于归档。也就是说你可以通过已归档的快照随时复现和追溯当时的场景。

无缝接入

DataHub 提供命令行客户端,可以在任何时间拥有完整服务,Web 工程接入可以直接使用 Webpack 中间件无缝集成,与 Vue, React 等页面构建框架配合完成研发、测试以及覆盖率统计。客户端工程只需适配网络库即可接入。

多语言栈

为满足自动化测试随时对场景组合的要求,DataHub 提供了多语言客户端,开放的 API 可以完成更多定制化的操作和集成方式。目前支持 Node.js, Java 和 Python 三个技术栈。


上手试试?

接下来我们来体验 DataHub。

1 通过 NPM 全局安装

$ npm i macaca-datahub -g

2 启动 DataHub 服务

$ macaca-datahub server

可以看到如下的提示,可以看到 DataHub 面板启动在 9200 端口,socket 启动在 9300 端口。

DataHub server start at: http://127.0.0.1:9200
websocket server start at: 9300

如果你习惯使用 Docker,那部署就更方便了,一个命令就可以搞定。DataHub 可以随时一键部署到你的研发系统中。

$ docker run -it -p 9200:9200 -p 9300:9300 macacajs/macaca-datahub

接下来就可以通过官方文档来创建 Hub 和 API 接口,上手文档


欢迎共同探讨。

微博: http://weibo.com/xudafeng
Github: https://github.com/xudafeng

下篇预告

  • 有很多同学对覆盖率有很多疑问,如何统计 Web, Android, iOS, ReactNative, Weex 等工程的覆盖率??Macaca 提供了多端的覆盖率方案,会逐一介绍实践方式。https://macacajs.github.io/zh/coverage
共收到 15 条回复 时间 点赞
达峰的夏天 Native App 测试用例原则 中提及了此贴 03月22日 12:07
思寒_seveniruby 将本帖设为了精华贴 03月22日 12:51
仅楼主可见

@xdf 能否结合实际例子介绍下使用?看文档也没有具体使用说明

达峰的夏天 [实用] 数据 mock 工具 中提及了此贴 03月26日 23:01
Linny 回复

github 开 issue 提问

请问在启动时就如下异常,可能是什么问题,

@Mr_Mango node 什么版本?

这个问题是由于其他工具集成 node 造成,读取到低版本,我自己找到原因了,非常感谢,datahub 安装碰到了好多问题,有时间写一个排坑记录给您,您再出一个安装说明之类指导说明一下,可以吗?
另外可以请问一下有没有具体的实施案例和使用说明?

芒果小子 回复

只有示例 https://github.com/macacajs/awesome-macaca

开放的实践总结需要一段时间后才会有

macaca 能合并 exec 文件吗,获取合并后的覆盖率文件。

wangyijie 回复

可以的

讨论了下 你这个工具的具体两个概念

1 场景化 mock 和
2 达到代码覆盖率的 100%(我一直以为是接口覆盖率的 100%)

但你既然用了 代码 的字眼 我一般爱咬文嚼字 我昨晚回去想了想 好像没那么简单

看到 那个 接入的各种 语言的覆盖率统计 sdk 我明白了 确实是 项目代码覆盖率的 100%

但有个疑虑 通过 mock 接口数据 接口数据的场景化组合 转换 怎么达到代码覆盖率的 100% 的? 这样的话
是不是完全取决于 你场景化数据的构造能力?

老马 回复

概念理解的非常到位

18楼 已删除
simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 12月13日 14:44
simple [精彩盘点] TesterHome 社区 2018 年 度精华帖 中提及了此贴 01月07日 12:08

@xdf 遇到个问题,能否帮忙看看
datahub server

DataHub start unsuccessfully: Error: Command failed: C:\Users\lee\AppData\Roaming\npm\node_modules\macaca-datahub\node_modules\sequelize-cli\lib\sequelize db:migrate
ERROR: Error reading "database\config.js". Error: TypeError: Path must be a string. Received undefined

Sequelize CLI [Node: 8.11.3, CLI: 4.1.1, ORM: 4.42.0]

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册