【发布时间】:2020-09-01 19:55:57
【问题描述】:
我是 Flask 的新手,我正在努力学习以便为我正在开发的应用程序编写 pytest。
在我的项目中,有两个应用程序有时会进行通信;一个偶尔会使用“请求”库向另一个发送请求,而另一个会发回响应。
在我见过的大多数 Flask 测试示例中,它是通过使用应用程序的“test_client”方法完成的。我的问题是如何让这两个测试客户端进行通信。
举个玩具例子,这里有两个应用:
flask_app1.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()
flask_app2.py
from flask import Flask, request
def create_app():
app = Flask(__name__)
@app.route('/receive_msg', methods=["POST"])
def receive():
msg = request.get_json()["message"]
print(msg)
return {'received': msg}
return app
if __name__ == '__main__':
app = create_app()
app.run(port=5001)
简单地说,第一个应用程序向第二个应用程序发送一条消息,然后将其发送回第一个应用程序。
现在假设我有测试:
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 python-requests pytest