Automate your tests with CI

应用测试的一个关键好处是测试可以使用持续集成(CI)自动化。通过在开发过程中自动运行测试,您可以验证对应用的更改不会破坏现有功能。您可以在提交时验证应用代码,及早发现错误,并在部署前防止意外中断。

有许多流行的CI工具,包括GitHub Actions、Jenkins、GitLab CI、Azure DevOps和Circle CI。Streamlit应用程序测试将像任何其他Python测试一样,轻松与它们中的任何一个集成。

由于许多Streamlit应用程序(以及所有社区云应用程序)都是在GitHub中构建的,因此本页使用来自GitHub Actions的示例。有关GitHub Actions的更多信息,请参阅:

Streamlit App Action 提供了一种简单的方法,可以在 GitHub 的应用仓库中添加自动化测试。它还包括对应用每个页面的基本冒烟测试,而无需您编写任何测试代码。

要安装 Streamlit App Action,请将工作流 .yml 文件添加到您的仓库的 .github/workflows/ 文件夹中。例如:

# .github/workflows/streamlit-app.yml name: Streamlit app on: push: branches: ["main"] pull_request: branches: ["main"] permissions: contents: read jobs: streamlit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.11" - uses: streamlit/streamlit-app-action@v0.0.3 with: app-path: streamlit_app.py

让我们更详细地看看这个操作工作流在做什么。

on: push: branches: ["main"] pull_request: branches: ["main"]

此工作流将在针对main分支的拉取请求以及推送到main分支的任何新提交时触发并执行测试。请注意,它还会在任何打开的拉取请求的后续提交上执行测试。有关更多信息和示例,请参阅GitHub Actions: Triggering a workflow

jobs: streamlit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.11"

工作流有一个streamlit作业,该作业执行一系列步骤。该作业在带有ubuntu-latest镜像的Docker容器上运行。

  • actions/checkout@v4 从 GitHub 检出当前仓库代码并将代码复制到作业环境中。
  • actions/setup-python@v5 安装 Python 版本 3.11。
- uses: streamlit/streamlit-app-action@v0.0.3 with: app-path: streamlit_app.py

Streamlit 应用程序操作执行以下操作:

  • 安装 pytest 并安装 requirements.txt 中指定的所有依赖项。
  • 运行内置应用程序的冒烟测试。
  • 运行在仓库中找到的任何其他Python测试。
star

提示

如果你的应用程序在仓库根目录中没有包含requirements.txt,你需要在运行Streamlit App Action之前添加一个步骤,使用你选择的包管理器来安装依赖项。

内置的烟雾测试具有以下行为:

  • 将指定在app-path的应用程序作为AppTest运行。
  • 验证它是否成功完成并且不会导致未捕获的异常。
  • 对应用程序的任何附加pages/相对于app-path执行相同的操作。

如果你想在没有烟雾测试的情况下运行Streamlit App Action,你可以设置skip-smoke: true

Linting 是对源代码进行自动化检查,以发现编程和风格错误。这是通过使用 lint 工具(也称为 linter)来完成的。Linting 对于减少错误和提高代码的整体质量非常重要,特别是对于有多个开发者或公共仓库的代码库。

您可以通过将ruff: true传递给Streamlit App Action来添加Ruff的自动代码检查。

- uses: streamlit/streamlit-app-action@v0.0.3 with: app-path: streamlit_app.py ruff: true
star

提示

您可能希望在本地开发环境中添加一个像ruff-pre-commit这样的预提交钩子,以便在代码进入CI之前修复linting错误。

如果测试失败,CI工作流将失败,您可以在GitHub中查看结果。通过点击工作流运行如这里所述,可以查看控制台日志。

对于更高级别的测试结果,您可以使用pytest-results-action。您可以将其与Streamlit App Action结合使用,如下所示:

# ... setup as above ... - uses: streamlit/streamlit-app-action@v0.0.3 with: app-path: streamlit_app.py # Add pytest-args to output junit xml pytest-args: -v --junit-xml=test-results.xml - if: always() uses: pmeier/pytest-results-action@v0.6.0 with: path: test-results.xml summary: true display-options: fEX

以上仅作为示例提供。Streamlit App Action 是一个快速入门的方式。一旦你掌握了所选 CI 工具的基础知识,构建和自定义自己的自动化工作流程就变得很容易。这是提高开发者整体生产力和应用质量的好方法。

作为最后一个工作示例,请查看我们在streamlit/llm-examples Actions中定义的此工作流文件

forum

还有问题吗?

我们的 论坛 充满了有用的信息和Streamlit专家。