关于bdd:基于-BDD-理论的-Nebula-集成测试框架重构下篇

本文首发于 Nebula Graph 公众号 NebulaGraphCommunity,Follow 看大厂图数据库技术实际。 在上篇文章中,咱们介绍了 Nebula Graph 的集成测试的演进过程。本篇就介绍一下向测试汇合中增加一个用例,并胜利运行所有的测试用例的过程。 环境筹备在构建 2.0 测试框架之初,咱们定制了局部工具类来帮忙测试框架疾速地启停一个单节点的 nebula 服务,其中有查看端口抵触、批改局部配置选项等性能。原来的执行流程如下: 通过 python 脚本启动 nebula 的服务;调用pytest.main并发执行所有的测试用例;进行 nebula 的服务。其中的不便之处在于,当须要给 pytest 指定某些参数选项时,须要将该参数透传给pytest.main函数,并且每次运行单个测试用例须要通过cmake生成的脚本来操作,不是很不便。咱们心愿“测试用例在哪儿,就在哪儿执行测试”。 服务启动在本次测试框架的革新过程中,咱们除了扭转了程序入口之外,大部分复用了原来封装好的逻辑。因为 nebula 目前积攒了很多的用例,单过程运行曾经不能满足疾速迭代的需要,在尝试了其余并行插件之后,思考到兼容性,咱们最终抉择了 pytest-xdist 插件来减速整个测试流程。 然而 pytest 只提供了四种 scope 的 fixture:session,module,class 和 function。而咱们心愿能用一种 global 级别的 fixture 来实现 nebula 服务的启动和初始化。目前最高档次的 session 级别还是每个 runner 都要执行一次,如此如果有 8 个 runner 的话,就要启动 8 个 nebula 服务,这不是咱们冀望的。 参考 pytest-xdist 的文档,须要通过文件锁来进行不同 runner 之间的并行管制。为了让管制逻辑足够的简略,咱们把程序启停和准备的逻辑同执行测试的过程离开,应用独自的步骤管制 nebula 的启动,当某些测试有问题时,还能够通过 nebula-console 独自连贯测试的服务,进行进一步的验证调试。 数据导入在此之前,Nebula 的数据导入过程是间接执行一条拼接好的 nGQL INSERT 语句。这样做,存在如下问题: 测试数据集大的状况,INSERT 语句会变得简短,client 执行超时;不易拓展新的测试数据集,须要将现成的 csv 数据文件结构成对应的 nGQL 语句文件;不能复用雷同的数据集,比方心愿同一份 csv 导入到不同 VID 类型的 space 中测试,须要结构不同的 INSERT 语句。针对以上的问题,参考nebula-importer的实现,咱们将导入的逻辑和数据集齐全拆散,从新实现了 python 版的导入模块。不过,目前只反对导入 csv 类型的数据文件,且每个 csv 文件中只能存储一个tag/edge类型。 ...

June 30, 2021 · 3 min · jiezi