cor*_*ori 5 python unit-testing flask
我对 python 比较陌生,正在寻找一种 pythonic 方式来处理这种做法。
我继承了一个在 uwsgi 下运行的相当简单的 Python 2.7 Flask 应用程序,我想向其中添加一些单元测试。它在 uwsgi 中运行时需要在缩进级别 0 进行一些初始化,但在测试时需要跳过。
我了解到 python 应用程序经常使用
if __name__ == '__main__':
Run Code Online (Sandbox Code Playgroud)
模式来隔离应在脚本自行运行时运行而在导入时不应运行的代码。但是,在这种情况下,在 uwsgi 下运行脚本和将脚本导入单元测试时,__name__是相同的;脚本的名称,所以我不能用它来区分 uwsgi 和单元测试环境。
此示例代码说明了我正在使用的内容。
在 Flask 应用程序 (flask_app.py) 中:
import logging
import bcrypt
from flask import Flask, jsonify, abort, make_response, request
from ConfigParser import SafeConfigParser
# some initialization that only makes sense when running from the uwsgi context on the server
PARSER = SafeConfigParser()
PARSER.read('config.ini')
LOG_FILE = PARSER.get('General', 'logfile')
APP = Flask(__name__)
@APP.route('/', methods=['GET'])
def index
...
@APP.route('/<p1>/<p2>', methods=['PUT'])
def put(p1, p2):
...
if __name__ == '__main__':
APP.run(debug = True, host='0.0.0.0')
Run Code Online (Sandbox Code Playgroud)
在单元测试 (tests.py) 中:
import os
import unittest
from flask import json
from flask_app import APP
class FlaskAppTestCase(unittest.TestCase):
def setUp(self):
self.APP = APP.test_client()
def test_GET(self):
resp = self.APP.get('/')
assert 'Some Html' in resp.data
def test_PUT(self):
resp = self.APP.put('/1/2')
assert 'Got 1, 2' in resp.data
if __name__ == '__main__':
unittest.main()
Run Code Online (Sandbox Code Playgroud)
我想做的是移动初始化,以便它仅在 uwsgi 执行flask_app 时运行,而不是通过tests.py 运行时运行,也许通过检查名称并根据它确定要执行的路径,但是当我在 uwsgi 下运行 flask_app 或执行 tests.py 时检查 print( name ) 的输出,输出是“flask_app”,所以我似乎无法将其用作鉴别器。
python中是否有一种惯用的方法来处理这个问题?
事实证明,uWSGI 的 Python 模块实际上提供了一种机制来确定应用程序是否在 uWSGI 下运行。该uwsgi模块可用于进口,如果你是在一个uWSGI方面,所以我结束了检查我是否可以导入模块,如果我只能执行初始化代码。
# detect if we're running under uWSGI; only init if we are, not if we're testing
try:
import uwsgi
IN_UWSGI = True
except ImportError:
IN_UWSGI = False
Run Code Online (Sandbox Code Playgroud)
然后用 init 代码包装
if IN_UWSGI:
Run Code Online (Sandbox Code Playgroud)
这似乎比检查正在执行导入的模块的模块名称可靠得多,这是我唯一能想到要做的另一件事。
| 归档时间: |
|
| 查看次数: |
1271 次 |
| 最近记录: |