我的工具:Python 3.5.0,flask 1.0.2,mac osx
我的问题: 我有一个非常简单的RESTful应用,其中有两个正在运行的端点。我通过unittest编写了两个非常简单的单元测试,由于我现在不确定,因此它们没有继续进行。如果执行以下操作,测试将成功:
如果我使用以下setUp(self)定义运行测试,则测试将挂起:
Serving Flask app "testing" (lazy loading)
Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
Debug mode: off
Running on http://127.0.0.1:8015/ (Press CTRL+C to quit)
这是相关代码
def setUp(self):
self.app = Flask("testing")
self.app.testing = True
self.client = self.app.test_client()
self.EmployeeId = 4
with self.app.app_context():
db_connect = create_engine('sqlite:///some.db')
self.api = Api(self.app)
self.api.add_resource(server.Car, '/car/<employee_id>') # Route_4
app.run(port=8015, debug=False)
def test_api_can_get_employee_by_id(self):
res = requests.get(url = 'http://127.0.0.1:8015/car/{}'.format(self.EmployeeId))
data = res.json()
self.assertEqual(res.status_code, 200)
self.assertIn('mazda', data["data"][0]['make_model'])
我已经上网了,没有发现真正涵盖我问题的资源。服务器的设置在测试过程中起作用,但是不执行单元测试。您如何建议对此进行故障排除?我愿意接受所有建议,包括更改方法。谢谢!
答案 0 :(得分:0)
对于那些在Google搜索“单元测试无法在Flask上运行”之后绊脚石的人来说,
无论模块如何加载,您的代码都有可能始终启动Flask服务器。如果是这样,即使单元测试也将启动服务器,服务器将不确定地监听连接。
例如,这会卡住:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello World!"
app.run()
相反,仅当您的模块是主程序时,才需要启动Flask服务器:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello World!"
if __name__ == '__main__':
app.run()
有关“ 名称 =='主要'”块here的更多信息。
关于原始问题,此答案不能解决。为此,您需要启动Flask服务器,但是要以非阻塞方式(例如另一个线程或进程)启动。有很多方法可以执行此操作,并且没有任何其他信息,这个问题太模糊了,无法按原样回答。