如何让两个Flask测试客户端使用请求进行通信

如何让两个Flask测试客户端使用请求进行通信,flask,python-requests,pytest,Flask,Python Requests,Pytest,我是Flask的新手,我正在努力学习,以便为我正在开发的应用程序编写pytests 在我的项目中,有两个应用程序有时进行通信;其中一个偶尔使用“请求”库向另一个发送请求,另一个发送响应 在我看到的大多数烧瓶测试示例中,它是通过使用应用程序的“test_client”方法来完成的。我的问题是如何让这两个测试客户机进行通信 以玩具为例,我有两个应用程序: 烧瓶1.py from flask import Flask import requests def create_app(): ap

我是Flask的新手,我正在努力学习,以便为我正在开发的应用程序编写pytests

在我的项目中,有两个应用程序有时进行通信;其中一个偶尔使用“请求”库向另一个发送请求,另一个发送响应

在我看到的大多数烧瓶测试示例中,它是通过使用应用程序的“test_client”方法来完成的。我的问题是如何让这两个测试客户机进行通信

以玩具为例,我有两个应用程序:

烧瓶1.py

from flask import Flask
import requests

def create_app():

    app = Flask(__name__)

    @app.route('/send_message/<msg>')
    def send_message(msg):
        response = requests.post('http://127.0.0.1:5001/receive_msg', json={'message': msg})
        print(response.text)
        return "sent:" + response.json()['received']

    return app


if __name__ == '__main__':
    app = create_app()
    app.run()
简单地说,第一个应用程序向第二个应用程序发送消息,然后第二个应用程序将消息发送回第一个应用程序

现在假设我有测试:

import flask_app1
import flask_app2


def test_two_clients():
    app1 = flask_app1.create_app()
    client1 = app1.test_client()

    app2 = flask_app2.create_app()
    client2 = app2.test_client()

    r = client1.get('/send_message/hello_there')

    assert r.status_code == 200


def test_one_client():
    app1 = flask_app1.create_app()
    client1 = app1.test_client()

    r = client1.get('/send_message/hello_there')

    assert r.status_code == 200
当flask_app2在终端中运行时,底部测试可以工作,但这不是我想要的。
我不知道如何让client1与client2通信我不知道有什么模式可以测试两个Flask应用程序,而不至少运行一个

我承认您不想运行它们,但为了完整性:

您可以启动一些Docker容器,在那里运行应用程序,并以这种方式测试它们。IMHO这对于端到端测试来说非常有意义

因为您不想这样做,所以应该考虑代码的实现。有一种模式称为依赖项注入(Dependency Injection)——这使您能够完全独立地测试应用程序

关于这一点,有一篇很棒的博客文章

其他可能是模拟对其他Flask应用程序的调用,或通过


我知道,这不是预期的答案,但我希望你能找到一些有用的东西。

我不完全相信我能得到你想要的东西,但从我收集的信息来看,这是我的收获;这两个应用程序将通过相互发出请求进行通信,就像web上的任何其他应用程序一样,因此您需要同时运行这两个应用程序(可能在不同的端口上)。然后,您可以分别为每个请求编写测试,检查请求是否成功以及是否收到了预期的响应。
import flask_app1
import flask_app2


def test_two_clients():
    app1 = flask_app1.create_app()
    client1 = app1.test_client()

    app2 = flask_app2.create_app()
    client2 = app2.test_client()

    r = client1.get('/send_message/hello_there')

    assert r.status_code == 200


def test_one_client():
    app1 = flask_app1.create_app()
    client1 = app1.test_client()

    r = client1.get('/send_message/hello_there')

    assert r.status_code == 200