2016-09-22 34 views
1

我有一些自动化测试,我为了测试MongoDB相关库而运行。为了做到这一点,我启动了一个临时数据目录的Mongo服务器,并在一个临时端口上连接到它,并运行一些测试。告诉MongoDB的最佳方式是什么?

显然,这会导致竞争状态。所以在这些测试的第一个版本中,我暂停了一段固定的时间,并且在测试开始前等待mongod有时间开始。

这是令人沮丧的(且效率低下),所以我决定监测标准输出,并等待关于mongod的标准输出流线相匹配的正则表达式:

/\[initandlisten\] waiting for connections/ 

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

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

...并使用它来找出该进程是否已经正常启动。

那么,我们是对的吗?正在检查mongod进程输出日志(它是否曾经国际化过吗?消息的措辞能否改变?)这样做的最好方法是什么?还是有更强大的东西,我们都失踪了?

回答

1

我们做类似的情景是什么:

  • 尝试在一个环路连接到配置的端口(只需新的Socket(主机,端口)),直到它的工作原理(10毫秒的延迟) - 这保证,启动内部监控线程的mongo客户端由于“连接被拒绝”而不会抛出异常
  • 连接到mongodb和查询东西。这很重要,因为所有的mongo客户端对象都是lazy init。 (在客户端上简单的listDatabaseNames()就够了,但是确保的结果是。)
  • 所有的时候,检查进程是否被终止。
相关问题