为了账号安全,请及时绑定邮箱和手机立即绑定

Python Flask + PyMongo API 中的单元测试

Python Flask + PyMongo API 中的单元测试

MMTTMM 2021-06-16 17:09:58
我正在构建一个在 docker 容器中运行并使用 Python 3 Flask 并由 MongoDB 通过 PyMongo 库支持的 RESTful API。我想向 API 添加单元测试,当我进行 git commit(在 CI/CD 管道中)时,我可以运行这些测试。API 大多只允许创建、获取、列出、修改和删除数据库中的对象。我希望我的测试调用这些端点并检查响应是否有意义。推荐的模式是什么?MockupDB似乎允许我在 Python 容器中伪造 MongoDB 服务器,但是对来自 MongoDB 的所有响应进行编程似乎过于复杂。我可以修改我的数据类来做例如:test_dictionary = {}def get(identifier):    if is_test:        return test_dictionary.get(identifier, None)    return database.find_one({'_id': identifier})但这会减少我的覆盖面。我可以有一个单独的 Dockerfile 用于测试,其中包括 MongoDB 服务器和 Python。然后将我的 PyMongo 连接指向测试 Dockerfile 中的本地服务器,以及普通 Dockerfile 容器外的服务器。这意味着我不再在同一个环境中进行测试。也许我可以使用 Python unittest.mock模块?或者这些测试更适合在部署容器后运行?我认为Flask 测试文档让我到目前为止,但没有描述如何处理数据库连接。
查看完整描述

1 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

docker-compose 可以让你同时完成。


你可以有一个 Flask 容器来运行你的 Flask 应用程序,然后是一个 mongo 容器,其中安装了一个卷作为你的数据目录,因此有一个用于单元测试的开发卷挂载,以及你 CI 中其他地方的实际生产卷挂载/CD 管道。


compose也使容器之间更容易交谈。例如:


version: "3"

services:

  flask:

    build: .

    image: flask-container

    depends_on:

      - mongodb

    environment:

     - 'MONGO_HOST=mongodb'

     - 'MONGO_PORT=27017'


    volumes:

     - ./conf/dev:/conf

  mongodb:

    image: mongo:latest

    container_name: "mongodb"

    environment:

    - MONGO_DATA_DIR=/data/db

    - MONGO_LOG_DIR=/dev/null

    volumes:

    - ~/unit-tests/data/db:/data/db

    ports:

    - 27017:27017

    command: mongod --smallfiles --logpath=/dev/null # --quiet


networks:

  default:

    external:

      name: cicd

然后他们在同一个网络上,Flask 可以直接调用mongodb:27017而不是 ip 地址


查看完整回答
反对 回复 2021-06-22
  • 1 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信