.
├── Core
│ ├── BackgroundProcessManager.py
│ ├── FirebaseDatabaseManager.py
│ ├── LearningManager.py
│ ├── __init__.py
│
├── FrontEnd
│ ├── HomePage.py
│ ├── __init__.py
│
├── LICENSE
├── README.md
├── Route
│ ├── RouteManager.py
│ ├── __init__.py
│
├── Settings
│ ├── DefineManager.py
│ ├── __init__.py
│
├── Utils
│ ├── LoggingManager.py
│ ├── __init__.py
│
├── index.py
└── runner.sh
所有路线链接均在Route/RouteManager.py
Flask主要来源位于index.py
我希望使用pytest-flask
发送虚假请求和测试响应。
from flask import Flask
from Settings import DefineManager
from Route import *
import imp
import sys
imp.reload(sys)
app = Flask(__name__)
app.register_blueprint(routes)
if __name__ == '__main__':
app.debug = True
app.run(host=DefineManager.SERVER_USING_HOST, port=DefineManager.SERVER_USING_PORT)
@routes.route("/")
def IndexPage():
LoggingManager.PrintLogMessage("RouteManager", "IndexPage", "web page connection!", DefineManager.LOG_LEVEL_INFO)
return HomePage.RenderIndexPage()
@routes.route("/upload/", methods=['POST'])
def UploadRawDatas():
content = request.get_json(silent=True)
LoggingManager.PrintLogMessage("RouteManager", "UploadRawDatas", "json data: " + str(content), DefineManager.LOG_LEVEL_INFO)
return BackgroundProcessManager.UploadRawDatas(content['Data'], content['Date'], content['Day'])
@routes.route("/forecast/", methods=['POST'])
def ForecastDatas():
content = request.get_json(silent=True)
LoggingManager.PrintLogMessage("RouteManager", "ForecastDatas", "json data: " + str(content), DefineManager.LOG_LEVEL_INFO)
return BackgroundProcessManager.ForecastDatas(content['ProcessId'])
Content-Type application/json
{
"Data": [20.0, 30.0, 401.0, 50.0],
"Date": ["2017-08-11", "2017-08-12", "2017-08-13", "2017-08-14"],
"Day": 4
}
Content-Type application/json
体
{"结果":39}
Result
不等于-1
答案 0 :(得分:13)
pytest-flask提供several fixtures,包括client个。有了它,您可以制作类似于此的测试功能:
def test_upload(client):
mimetype = 'application/json'
headers = {
'Content-Type': mimetype,
'Accept': mimetype
}
data = {
'Data': [20.0, 30.0, 401.0, 50.0],
'Date': ['2017-08-11', '2017-08-12', '2017-08-13', '2017-08-14'],
'Day': 4
}
url = '/upload/'
response = client.post(url, data=json.dumps(data), headers=headers)
assert response.content_type == mimetype
assert response.json['Result'] == 39
答案 1 :(得分:2)
虽然可接受的答案有效,但可以通过将kwarg json
传递到post
方法而不是data
def test_upload(client):
data = {
'Data': [20.0, 30.0, 401.0, 50.0],
'Date': ['2017-08-11', '2017-08-12', '2017-08-13', '2017-08-14'],
'Day': 4
}
url = '/upload/'
response = client.post(url, json=data)
assert response.content_type == 'application/json'
assert response.json['Result'] == 39