我正在使用Flask开发restful API。我正在编写pytest用例来测试/api/users路径。在测试过程中,我遇到了以下错误。我正在使用SQL炼金术。我对Flask比较陌生。我们将非常感谢您的帮助。
Flask接口:
@app.route('/api/users', methods=['POST'])
def new_user():
username = request.json.get('username')
password = request.json.get('password')
user = User(username = username)
user.hash_password(password)
db.session.add(user)
db.session.commit()
return ("user")
Pytest用例:
@pytest.fixture
def client():
db_fd, app.config['DATABASE'] = tempfile.mkstemp()
app.config['TESTING'] = True
client = app.test_client()
yield client
os.close(db_fd)
os.unlink(app.config['DATABASE'])
@pytest.fixture
def user():
return {
'username': 'test_username',
'password': 'test_password',
'email': 'test_email'
}
def _new_user(client, user):
return client.post('/api/users', json.dumps(user))
# REGISTER USER
def test_new_user(client, user):
res = _new_user(client, user)
assert res.status_code == 201
assert 'user' in json.loads(res.get_data())
当我运行测试用例时,我得到下面的错误
@app.route('/api/users', methods=['POST'])
def new_user():
> username = request.json.get('username')
E AttributeError: 'NoneType' object has no attribute 'get'
apa/routes.py:20: AttributeError
发布于 2019-03-24 03:53:43
我认为你应该使用request.get_json()方法。
有关更多详细信息,请参阅此
发布于 2019-03-24 06:45:53
问题是你如何发布json。您需要修改此行:
def _new_user(client, user):
return client.post('/api/users', json.dumps(user))
目标为:
def _new_user(client, user):
return client.post('/api/users', json=json.dumps(user))
如果不将json指定为参数,它将被放入request.data
属性而不是request.json.
通常,如果您试图从json获取发布到API的密钥,最好将其包装在try/中,因为如果密钥不存在或没有发布任何json,您将得到一个server500错误。对于web,即使post格式错误,也希望能够向客户端返回响应,这有助于处理更复杂的API和调试。
https://stackoverflow.com/questions/55317712
复制相似问题