告诉MongoDB的最佳方法是什么?

时间:2016-09-22 20:21:25

标签: mongodb

我运行了一些自动化测试,以测试与MongoDB相关的库。为了做到这一点,我启动一个带有临时数据目录的Mongo服务器,并在一个短暂的端口上连接到它,并运行一些测试。

显然,这会导致竞争状况。因此,在我的第一个测试版本中,我暂停了一段时间并等待确保mongod在测试开始之前有时间开始。

这令人沮丧(并且效率低下),所以我决定监视标准输出并等待mongod标准输出流上与正则表达式匹配的行:

/\[initandlisten\] waiting for connections/

这让它运转了。那么好,然后我准备回过头来试图找到一种更强大的方法来做到这一点。我记得一个名为" embedmongo"的Java库。运行基于MongoDB的测试,并认为它必须解决问题。这样做(GitHub):

protected String successMessage() {
    return "waiting for connections on port";
}

...并使用它来确定进程是否已正确启动。

那么,我们是对的吗?正在检查mongod进程输出日志(它是否已经国际化?消息的措辞是否会发生变化?)这是最好的方法吗?或者是否有更强大的东西我们都缺失了?

2 个答案:

答案 0 :(得分:1)

我们在类似情况下所做的是:

  • 尝试在循环中连接到已配置的端口(只是新的Socket(主机,端口)),直到它工作(延迟10毫秒) - 这可以确保启动内部监视线程的mongo客户端不会抛出由于"连接被拒绝而导致的例外"
  • 连接到mongodb和查询。这很重要,因为所有mongo客户端对象都是惰性init。 (客户端上的简单listDatabaseNames()就足够了,但确保读取结果。)
  • 一直检查未终止的过程。

答案 1 :(得分:0)

我刚刚编写了一个小untilMongod命令,可以在bash脚本中使用它:https://github.com/FGM/untilMongod

包含bash + Node.JS示例用例。