Python Flask + PyMongo API 中的单元测试

我正在构建一个在 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 测试文档让我到目前为止,但没有描述如何处理数据库连接。


MMTTMM
浏览 149回答 1
1回答

温温酱

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 # --quietnetworks:  default:    external:      name: cicd然后他们在同一个网络上,Flask 可以直接调用mongodb:27017而不是 ip 地址
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python