烧瓶应用程序之间的交互测试

问题描述 投票:0回答:1

我有一个烧瓶应用程序,打算将其托管在多个主机上。也就是说,同一个应用程序在不同的主机上运行。然后,每个主机都可以向其他主机发送请求,以对其各自的系统采取某些措施。

例如,假设有同时运行此烧瓶应用程序的系统A和B。 A知道B的IP地址和该应用托管在B上的端口号。A通过发往B的POST获得请求。然后A需要将该请求转发给B。

我在一条路由中完成了转发,该路由仅检查附加到POST的JSON以查看它是否为目标主机。如果不是,则使用python的请求库向其他主机发出POST请求。

我的问题是如何在python unittest中模拟此环境(同一应用程序的两个不同实例,具有不同的端口,以便可以确认转发正确完成?

现在,我正在使用app.test_client()测试大多数路由,但据我所知,app.test_client()不包含与其关联的端口号或IP地址。因此,将应用程序POST到另一个app.test_client()似乎不太可能。

我曾尝试将应用程序托管在不同的线程中,但是似乎没有一种干净简便的方法可以杀死app.run()一旦启动,就无法加入,因为app.run()从不退出。此外,应用程序(app.config)的内部状态将被隐藏。这使得验证A不会执行请求,而B则很难执行。

是否有办法在不同的端口号上同时运行两个flask应用程序,并且仍然可以访问两个应用程序的app.config?还是我坚持使用线程并寻找其他方法来确保A不执行请求而B执行呢?

注意:这些应用程序没有任何论坛,因此没有CSRF。

python flask python-requests python-unittest
1个回答
0
投票

我最终做了两件事。第一,我开始使用模拟库中的补丁装饰器来伪造响应表单系统B。更具体地说,我使用@patch('requests.post'),然后在我的代码中将返回值设置为“ ”。但是,这只能确保request.post被调用,而不能确保第二个系统正确处理了它。我做的第二件事是编写一个单独的测试,该测试使应该由A发送的请求发送到系统,以检查它是否正确处理了该请求。以这种方式,系统A和B永远不会同时运行。相反,测试只是伪造那里的响应/请求。

[在夏季,我需要使用@patch('requests.post')伪造来自B的答复,说它得到了请求。然后,在另一个测试中,我设置了B并向它提出了一个请求。

© www.soinside.com 2019 - 2024. All rights reserved.