项目设置

  • Python 3.5.3
  • 烧瓶0.12.2

目录

.
├── 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发送虚假请求和测试响应。

实际行为

  • 我不知道如何发送假的帖子数据和测试。

资源

index.py

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)

路线/ RouteManager.py

@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

#1楼 票数:13 已采纳

pytest-flask提供了几个固定装置 ,包括一个客户 装置 有了它,您可以制作类似于此的测试功能:

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

#2楼 票数: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

  ask by stories2 translate from so

未解决问题?本站智能推荐:

1回复

db.create_all 不在 pytest-flask 中创建表

我正在为db.create_all此问题的任何人自行记录db.create_all的解决方案。 希望它会帮助某人。 以下是对我没有帮助的其他线程列表: db.create_all() 不会创建在单独文件中定义的表 Flask SQLAlchemy db.create_all() 不创建
1回复

如何使用 pytest 将数据传递到烧瓶表单?

我正在努力使用 pytest 将数据传递给表单。 我希望将用户名和密码传递给登录表单。 这是我尝试过的: conftest.py 这设置了我的测试使用的客户端装置: 路线在蓝图中定义为: 这是表格: 和模板: 我可以在视图中的“if form.validate_on_subm
2回复

如何对 Flask 端点进行 pytest

我正在开始使用 Flask 和 Pytest,以便通过单元测试实现休息服务,但我遇到了一些麻烦。 我想为我的简单端点做一个简单的测试,但我一直在Working outside of application context. 运行测试时出错。 这是终点: 这就是我尝试测试它的方式(我知道它应该
2回复

如何使用Pytest测试dockerized flask应用程序?

我已经构建了烧瓶应用程序,该应用程序旨在在docker容器中运行。 如果标头密钥与我放入docker-compose environment密钥匹配,它将接受POST HTTP方法并返回适当的JSON响应。 问题是:谈到测试。 app或flask(pytest)的client固定装置
1回复

为什么 Flask pytest 不会在应用程序中发布数据?

我正在尝试测试以下应用程序: 当我运行以下命令时: 我收到以下错误: 我的帖子请求似乎不会将数据传递给应用程序,我的帖子请求有什么问题? 提前致谢!
1回复

如何使用flask和pytest测试端点异常?

我有一个端点,它从我的数据库中返回一个列表。 如果在此过程中出现问题,我将返回一个 internal_server_error,其中包含 500 status_code 和一条消息作为参数。 def get_general_ranking(): try: ranking_li
1回复

如何使用 pytest 测试 Flask 视图上下文和模板?

我在 Flask 中使用 pytest 并想测试我的视图和模板,但我不清楚如何最好地做到这一点。 我知道我可以测试 HTML 输出的内容,例如: def test_my_view(test_client): # test_client is a fixture representing a
1回复

Pytest不会在混合参数化和skipif时跳过测试

我有这个测试代码: 然而test_foo没有跳过,即使有skipif连接到装饰test_foo (我想在这两个订单,因为你可以看到上面的): 如果我改变这一行 至 然后它跳过测试用例: 我如何获得pytest.mark.skipif时也使用跳过的参数一起工