如何向 Nebula Graph 增加一个测试用例
由于 Nebula Graph 在持续研发过程中会频繁地更改返回数据的格式,这样就会造成了上层应用程序无法正确解析数据。
比如在 v2.0.0 发布的时候,改变了 SHOW JOBS 的格式,造成了 Studio 解析的时候页面崩溃。
为了避免再次发生这样的悲剧问题,可以使用 Nebula Graph 提供的测试框架,方便地增加测试用例。
>>>>
环境准备
按照文档「源码编译安装」(链接:https://docs.nebula-graph.com.cn/2.0.1/4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/)中所示,我们可以参考以下步骤进行操作:
1. 准备一台开发机,这里给出了开发环境的配置要求。
- Python3 要求的最低版本为 Python 3.7
2. 按照文档中步骤编译源代码。选择 master 版本,并拉一个分支。
具体步骤可以见 Nebula 文档站中如何贡献中的 GitHub 使用步骤部分(链接:https://docs.nebula-graph.com.cn/2.0.1/15.contribution/how-to-contribute/)。
- 安装 case 运行环境。
如果遇到模块版本过低,可以根据提示升级版本,比如:命令 pip3 install --upgrade keyrings.alt 。
4. 运行已有 case
>>>>
开发 case
研究一下已有 case
大多数已有 case 都在 https://github.com/vesoft-inc/nebula-graph/tree/master/tests/tck/features 目录下,根据主要功能放在不同目录下。
例如,以最常用的 MATCH 功能举例。打开 GitHub 目录下的 match/MatchById.feature (链接:https://github.com/vesoft-inc/nebula-graph/blob/master/tests/tck/features/match/MatchById.feature)文件
nebula-test 是基于 BDD 思想撰写的,这些 feature 文件基本是自然语言(gherkin 文本),BDD 介绍文章可参考:《基于 BDD 理论的 Nebula 集成测试框架重构(上篇)》。
这里简单地解释一下 case 用例模版主要的格式:
- Feature:介绍整个文本是做什么的;
- Background:设置一下公共的运行环境,例子中,选用了一个已经存在的数据集 basketballplayer(建立了schema,index,写入了数据);
- Scenario:一组 When-Then 的组合,是一个最小的并发执行单位;
- When executing query:向 Nebula Graph 发送一组命令;
- Then the result should be:从 Nebula Graph 获取结果,和下面的期望结果对比;
这个对比方式可以有以下几种:
- The result should be:需完全一样 (行、列、单元格内容都必须一模一样);
- The result should contain:只包含以下内容即可;
- The result should be, in any order:返回结果的行顺序无关(对于行 1 和行 2 的顺序没有要求);
- The result should be, in any order, with relax comparison:结果集需要是以下形式,行顺序无关,并且至少包括以下内容(例如,每个单元格至少包括"Tiago Splitter",但可以比这个多);
- The execution should be successful:返回码为成功;
- An ExecutionError should be raised at runtime: not existed! 执行失败,抛出异常 ExecutionError,且返回错误码为 not existed!;
尝试自己撰写一个 case
假设现在我们的目的是检查一下 SHOW JOBS 的返回格式,可以这么操作:在 nebula-graph/tests/tck/features/job/(链接:https://github.com/vesoft-inc/nebula-graph/tree/master/tests/tck/features/job)下增加一个 JobCommands.feature 的文件。
调试 case
检查格式错误,并格式化文件。
运行刚撰写的 case,通常要来回更改多次。用 # 号注释。也可以用 @skip 标注跳过整个 Scenario。
如果内存有限,-n4 控制并发度。
更多说明可以参见这里:https://github.com/vesoft-inc/nebula-graph/tree/master/tests#nebula-graph-test-manual。
通过 git 向 Nebula Graph repo 增加该 case
如果所有的测试都已经通过,将调试标记 @mintest 去掉,通过 git 指令向 Nebula Graph 仓库提交一个 pull request,参考如何贡献(链接:https://docs.nebula-graph.com.cn/2.0.1/15.contribution/how-to-contribute/)。
文章转载自公众号:Nebula Graph Community