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,通过这些测试就是我所需要的!