python - 如何测试这个 Flask 应用程序中的功能 - 编写单元测试?

标签 python unit-testing flask redis

POOL = redis.ConnectionPool(host='localhost', port=6379, db=0)

app = Flask(__name__)

@app.route('/get_cohort_curve/', methods=['GET'])```
def get_cohort_curve():

    curve = str(request.args.get('curve'))
    cohort = str(request.args.get('cohort'))

    key = curve+cohort
    return get_from_redis(key)

def get_from_redis(key):
    try:
        my_server = redis.Redis(connection_pool=POOL)
        return json.dumps(my_server.get(key))
    except Exception, e:
        logging.error(e)

app.run()

我需要为此编写单元测试。

如何只测试路由,即获取请求到达正确的位置?

我是否需要在每个功能的测试中创建和销毁应用实例?

我需要创建一个模拟的 redis 连接吗?

最佳答案

如果您有兴趣在 Flask 中运行某些东西,您可以创建一个虚拟环境并测试整个 shebang,但在我看来这是最难的方法。

当我在本地安装 Redis 构建站点时,设置端口然后使用适当的 key 在其中存放一些数据是必不可少的。我在 iPython (jupyter) notebooks 中完成了我所有的开发,这样我就可以在添加 Flask 的混杂层之前测试功能和与 Redis 的交互。

然后您设置一个完美的模板,围绕它的可靠 HTML 和 CSS 来设置网站的样式。如果它可以在没有数据的情况下作为 html 页面工作,那么您可以继续使用 Flask 的 python 部分。

巩固 Flask 目录。确保将它们安置在虚拟环境中,以便您可以从浏览器调用它们,它会将您的虚拟环境视为服务器。

您创建您的 app.py 应用程序。我一次创建了每个页面功能。测试以查看它是否正确推送变量以在页面上发布并调用正确的模板。在你启动并运行正确的照片和数据之后,然后在下一页的模板中,使用 @app.route

如果速度非常慢,请一次调试一个片段,这样您就可以看到哪里出错了以及出错的方式。您只会让站点在打开 redis 服务器的情况下运行,并且您的虚拟环境正在运行。 然后您将不得不关闭 VE 进行编辑并重新启动以进行测试。起初它很糟糕,但随着时间的推移它变得死记硬背。

编辑:

如果你真的只想测试路由,那么就用 @app.route 定义创建一个 app.py 并只返回页面(你正在调用的模板)。您可以根据需要将测试分成小块,但您必须确保您选择的量子可执行为笔记本中的 python 脚本或命令行执行,或者作为紧凑的功能独立网站....除非你使用我在评论中提到的包:Flask Unit Testing Applications

并且您需要创建真正的 Redis 连接,否则您会出错。

关于python - 如何测试这个 Flask 应用程序中的功能 - 编写单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42380641/

相关文章:

python - 在Python中高效创建字典并读取查询字典的输入

c# - 单元测试隔离异常 : Throws Exception while running Shims test in Release/Debug mode

python - 使用 flask-uploads 上传文件

python - Flask 找不到模板

c# - DataTestMethods 的非编译时间常量

python - 在flask-sqlalchemy中使用with_entities()返回自定义属性?

java - 使用 Kivy 或 CLI 获取我的位置?

python - GAE - 使用 urlfetch 将图像从 BlobStore 发布到外部服务器

python - 如何使用 pySpark Databricks 从 BinaryType 中提取列?

angular - Angular 中的单元测试 socket.io