python - 如何告诉 Jenkins 运行 Python Flask 应用程序,然后进行 Selenium 测试,然后关闭 Flask 应用程序?
问题描述
我有一个 Flask 应用程序,可以将我的 Web 应用程序启动到特定端口(例如,8080
)。它通过运行启动python run.py
。我还有一个 Python 文件,它为 Web 应用程序运行 Selenium 端到端测试。
这是 GitHub 存储库的一部分,我已将其连接起来,以便每当我推送/提交到 GitHub 存储库时,它都会启动 Jenkins 测试。Jenkins 使用我的机器作为代理来运行命令。我在 Jenkins 的管道中有一系列命令要执行。
理想情况下,命令的顺序应该是:
- 启动 Flask Web 应用程序
- 运行 Selenium 测试
- 终止 Flask Web 应用程序
现在,我的问题是:我可以使用 Jenkins 将 repo 克隆到我的计算机(代理)上的本地工作区,然后运行 Python 命令来启动我的 Web 应用程序。我可以使用 Jenkins 并行运行任务,以在 Web 应用程序使用的端口上进行 Selenium 测试。
但是一旦 Selenium 测试完成,我无法弄清楚如何结束 Flask Web 应用程序。如果我不结束 run.py 执行,它就会陷入无限循环,无休止地为端口提供应用程序。我可以让 Jenkins 在指定的时间后自动中止,但这会将整个过程标记为失败。
Selenium 测试完成后,是否有人知道如何结束 Flask 托管过程?或者,如果我以一种笨拙的方式来做这件事(我承认我是出于大量的无知和缺乏经验而说话),有没有更好的方法来处理这个问题?
解决方案
我不知道导致开发服务器在 Selenium 控制下退出的官方方法,但以下路线适用于 Flask 1.1.2
from flask import request
...
if settings.DEBUG:
@app.route('/quit')
def quit():
shutdown_hook = request.environ.get('werkzeug.server.shutdown')
if shutdown_hook is not None:
shutdown_hook()
return "Bye"
return "No shutdown hook"
推荐阅读
- javascript - .fillStyle 不起作用,我的代码有问题吗?或画布的 .fillStyle 的任何替代品?
- r - R闪亮组多个textOutputs
- java - 如何在 Android Studio 中显示元素
- git - 在 Visual Studio Code 中设置差异工具
- javascript - react内三元的语法
- angular - 从角度 5 和材料设计 2 中的另一个事件触发事件
- java - 具有 180 个 POM 的 Maven 项目——这是代码异味吗?
- datepicker - 将日期选择器转换为日期时间选择器
- adal - 令牌中的acquireTokenAsync 缺少deviceId
- ruby-on-rails - 如何在 Localhost 中查看 ROR App