Python 为什么pytest不会在应用程序中发布数据?
我正在尝试测试以下应用程序:Python 为什么pytest不会在应用程序中发布数据?,python,flask,pytest,Python,Flask,Pytest,我正在尝试测试以下应用程序: import os import json import pytest from flask import Flask, request, jsonify def create_app(test_config=None): app = Flask(__name__, instance_relative_config=True) if test_config is None: app.config.from_pyfile('co
import os
import json
import pytest
from flask import Flask, request, jsonify
def create_app(test_config=None):
app = Flask(__name__, instance_relative_config=True)
if test_config is None:
app.config.from_pyfile('config.py', silent=True)
else:
app.config['TESTING'] = True
try:
os.makedirs(app.instance_path)
except OSError:
pass
@app.route('/predict', methods=['POST'])
def predict():
p = (request.get_json()) * 2
try:
return jsonify({'status': 200, 'message': 'ok', 'data': p})
except Exception as e:
return jsonify({'status': 400, 'message': str(e)}), 400
return app
@pytest.fixture
def client():
app = create_app()
app.config["TESTING"] = True
app.testing = True
with app.test_client() as client:
yield client
def test_predict(client):
response = client.post('/predict', data=json.dumps({'res': 3}))
data = json.loads(response.get_data(as_text=True))
assert response.status_code == 200
assert data['data'] == 6
当我运行以下命令时:
pytest
我收到以下错误:
FAILED test_flask_testing.py::test_predict - TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
我的发帖请求似乎无法将数据传递到应用程序,我的发帖请求有什么问题
提前谢谢 正在传递数据,但我不明白您想用这行代码做什么:
p=(request.get_json())*2
做了两个小改动,现在测试通过了:
@@ -20,7 +20,7 @@ def create_app(test_config=None):
@app.route('/predict', methods=['POST'])
def predict():
- p = (request.get_json()) * 2
+ p = request.get_data()
try:
return jsonify({'status': 200, 'message': 'ok', 'data': p})
except Exception as e:
@@ -42,4 +42,4 @@ def test_predict(client):
response = client.post('/predict', data=json.dumps({'res': 3}))
data = json.loads(response.get_data(as_text=True))
assert response.status_code == 200
- assert data['data'] == 6
+ assert data['data'] == '{"res": 3}'
如果您试图以json的形式接收传入数据,那么您需要像这样运行post:
response = client.post('/predict', json={'res': 3})
然后需要将其解析为json:
@app.route('/predict', methods=['POST'])
def predict():
p = request.get_json()
谢谢,@Ramon,通过这些测试就是我所需要的!