【问题标题】:Right way to seed MongoDB for automated testing with Karate使用空手道自动测试 MongoDB 的正确方法
【发布时间】:2019-02-13 15:59:35
【问题描述】:

我正在构建一个自动化 API 测试平台,并且我选择了空手道来完成这项工作。太糟糕了,它的引擎是为 Java 生态系统编写的,社区对 mongoDB 技术的支持不如 NodeJS 强大

因为我需要在 QA 环境中播种/清理数据库来执行测试,但我只有一个用 NodeJS 和一个特定库制作的播种脚本,所以现在我有两个机会

  1. 在运行空手道测试之前,继续使用 NodeJS 初始化脚本来填充我的数据库

  2. 使用 Java 种子库,该库支持从文件(例如 JSON)或 DB 转储中加载夹具,并在使用 JUnit 挂钩的每个功能之前执行种子

这两种选择都应该使 devs/qas 能够构建多个夹具,并选择哪个适合于一组特定的功能测试。例如,在场景 #1 中,我可以编写一个 sh 脚本

npm run seed
mvn clean test

但它缺乏 qa 对要加载哪些数据的控制(除非您未在此 shell 脚本中指定它,这意味着必须经常更新并且必须“知道”实现了哪些功能以及何时运行它们)。另一个缺点是CI服务器必须安装nodeJS并且管道配置必须知道它,并且CI服务器上不应该安装很多工具

有什么建议吗? 谢谢

【问题讨论】:

    标签: mongodb junit continuous-integration automated-tests karate


    【解决方案1】:

    由于 Java 互操作,您可以很容易地从空手道调用操作系统命令。

    * def FileUtils = Java.type('com.intuit.karate.FileUtils')
    * def runtime = java.lang.Runtime.getRuntime()
    * def exec = function(cmd){ return FileUtils.toString(runtime.exec(cmd).getInputStream()) }
    * def result = exec('my-nodejs-cli-command')
    

    而且您拥有所有环境切换的灵活性,例如您可以使用变量作为exec() 参数。

    MongoDB 没有一些通过 REST 调用它的方法。因为空手道恰好擅长发出 REST 请求 :)

    【讨论】:

    • 谢谢!所以你的建议是在一个单独的进程中运行我的种子脚本,并在我的环境中安装 nodejs!如果我可以直接在 karate javascript 函数中编写 nodejs 脚本,那就太好了,主要是为了利用包管理
    • @CarmineIngaldi 这实际上可能会在今年晚些时候发生,因为 GraalVM 集成。但不是现在,对不起:twitter.com/ptrthomas/status/1095346113027092480
    猜你喜欢
    • 2020-09-08
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 2015-02-18
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多