使用MongoDB进行集成测试 - 身份验证
我有一个模块在使用mongodb,现在我正在为它写一个集成测试。我是根据这个例子来写的。
我遇到的错误是OperationFailure: command SON([('listDatabases', 1)]) failed: need to login
,当我调用conn.database_names()
的时候。
问题是我不太确定怎么登录。我尝试在subprocess.Popen中添加--username和--password参数,但没有成功。而且pymongo.Connection对象没有authenticate方法,虽然pymongo的数据库对象是有这个方法的。
有没有办法让我在从Popen启动mongo的时候进行认证,或者重新组织一下代码,让我可以访问到数据库对象呢?
class MongoTemporaryInstance(object):
_instance = None
@classmethod
def get_instance(cls):
if cls._instance is None:
cls._instance = cls()
atexit.register(cls._instance.shutdown)
return cls._instance
def __init__(self):
self._tmpdir = tempfile.mkdtemp()
self._process = subprocess.Popen(['mongod', '--bind_ip', 'localhost',
'--port', str(MONGODB_TEST_PORT),
'--dbpath', self._tmpdir,
'--nojournal', '--nohttpinterface',
'--noauth', '--smallfiles',
'--syncdelay', '0',
'--maxConns', '10',
'--nssize', '1', ],
stdout=open(os.devnull, 'wb'),
stderr=subprocess.STDOUT)
for i in range(3):
time.sleep(0.1)
try:
self._conn = pymongo.Connection('localhost', MONGODB_TEST_PORT)
except pymongo.errors.ConnectionFailure:
continue
else:
break
1 个回答
0
问题就像@RobMoore说的那样——在那个端口上有一个旧的mongodb进程在运行,并且它使用了身份验证。我换了一个端口,结果就好了!