首页 > 解决方案 > 如何告诉 Jenkins 运行 Python Flask 应用程序,然后进行 Selenium 测试,然后关闭 Flask 应用程序?

问题描述

我有一个 Flask 应用程序,可以将我的 Web 应用程序启动到特定端口(例如,8080)。它通过运行启动python run.py。我还有一个 Python 文件,它为 Web 应用程序运行 Selenium 端到端测试。

这是 GitHub 存储库的一部分,我已将其连接起来,以便每当我推送/提交到 GitHub 存储库时,它都会启动 Jenkins 测试。Jenkins 使用我的机器作为代理来运行命令。我在 Jenkins 的管道中有一系列命令要执行。

理想情况下,命令的顺序应该是:

  1. 启动 Flask Web 应用程序
  2. 运行 Selenium 测试
  3. 终止 Flask Web 应用程序

在 Jenkins 流水线中并行运行 Flask 和 Selenium

现在,我的问题是:我可以使用 Jenkins 将 repo 克隆到我的计算机(代理)上的本地工作区,然后运行 ​​Python 命令来启动我的 Web 应用程序。我可以使用 Jenkins 并行运行任务,以在 Web 应用程序使用的端口上进行 Selenium 测试。

但是一旦 Selenium 测试完成,我无法弄清楚如何结束 Flask Web 应用程序。如果我不结束 run.py 执行,它就会陷入无限循环,无休止地为端口提供应用程序。我可以让 Jenkins 在指定的时间后自动中止,但这会将整个过程标记为失败。

Selenium 测试完成后,是否有人知道如何结束 Flask 托管过程?或者,如果我以一种笨拙的方式来做这件事(我承认我是出于大量的无知和缺乏经验而说话),有没有更好的方法来处理这个问题?

标签: pythonseleniumjenkinstestingflask

解决方案


我不知道导致开发服务器在 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"

推荐阅读