我有一个由单节点mongodb支持的烧瓶集成测试,它随机失败:
pytest/test_webapi.py:59: in test_register_test
> assert res.status_code == 302
E assert <Response streamed [404 NOT FOUND]>.status_code == 302
失败率约为50%。在
测试中的测试_网络API.py这样看来:
^{pr2}$相关烧瓶方法网络API.py公司名称:
@app.route("/register", methods=["POST"])
def register_user():
mail = flask.request.form['mail']
user = flask.request.form["user"]
pw = flask.request.form["pass"]
hash = users.register(user, pw, mail=mail)
return flask.jsonify({'_id': None}) # XXX
@app.route('/activate/<hash>', methods=['GET'])
def activate_user(hash):
key = users.activate(hash=hash)
if not key:
flask.abort(404)
return flask.redirect("/")
。。。由操作方法支持:
make_key = lambda : base64.encodestring(os.urandom(32)).strip()
def register(self, user, pw, **kw):
hash = self.make_key()
user = self.new(user, pw, activation=hash, **kw)
self._send_mail(**user)
return hash
def activate(self, hash):
user = self.users.find_one({'activation': hash})
if not user:
return None
key = self.make_key()
activation = {
'$unset': {'activation': 1},
'$set': {'status': 'active', 'key': key} }
self.users.update({'_id': user['_id']}, activation)
return user
。。。哪里自助用户是一个mongodb集合。在
在自我更新()使用safe=True保存实体。在
有趣的是,其他一些做类似事情的测试似乎从来没有遇到过这个问题。在
我原以为这足以确保持久化对象对pymongo连接池中的其他线程可见。我应该更仔细地阅读mongodb/pymongo文档的哪一部分?或者与asyncore有什么奇怪的交互?在
(从评论线程移植)
在测试的上下文中,
data
值是否只是激活密钥的base64编码字符串?base64包含字母和数字,但也包含“+”和“/”,这两个字符都会被URL解析器(尤其是“/”)误解。在相关问题 更多 >
编程相关推荐