Automate your tests with CI
应用测试的一个关键好处是测试可以使用持续集成(CI)自动化。通过在开发过程中自动运行测试,您可以验证对应用的更改不会破坏现有功能。您可以在提交时验证应用代码,及早发现错误,并在部署前防止意外中断。
有许多流行的CI工具,包括GitHub Actions、Jenkins、GitLab CI、Azure DevOps和Circle CI。Streamlit应用程序测试将像任何其他Python测试一样,轻松与它们中的任何一个集成。
GitHub Actions
由于许多Streamlit应用程序(以及所有社区云应用程序)都是在GitHub中构建的,因此本页使用来自GitHub Actions的示例。有关GitHub Actions的更多信息,请参阅:
Streamlit App Action
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
让我们更详细地看看这个操作工作流在做什么。
Triggering the workflow
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
此工作流将在针对main
分支的拉取请求以及推送到main
分支的任何新提交时触发并执行测试。请注意,它还会在任何打开的拉取请求的后续提交上执行测试。有关更多信息和示例,请参阅GitHub Actions: Triggering a workflow。
Setting up the test environment
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。
Running the app tests
- uses: streamlit/streamlit-app-action@v0.0.3
with:
app-path: streamlit_app.py
Streamlit 应用程序操作执行以下操作:
- 安装
pytest
并安装requirements.txt
中指定的所有依赖项。 - 运行内置应用程序的冒烟测试。
- 运行在仓库中找到的任何其他Python测试。
提示
如果你的应用程序在仓库根目录中没有包含requirements.txt
,你需要在运行Streamlit App Action之前添加一个步骤,使用你选择的包管理器来安装依赖项。
内置的烟雾测试具有以下行为:
- 将指定在
app-path
的应用程序作为AppTest运行。 - 验证它是否成功完成并且不会导致未捕获的异常。
- 对应用程序的任何附加
pages/
相对于app-path
执行相同的操作。
如果你想在没有烟雾测试的情况下运行Streamlit App Action,你可以设置skip-smoke: true
。
Linting your app code
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
提示
您可能希望在本地开发环境中添加一个像ruff-pre-commit这样的预提交钩子,以便在代码进入CI之前修复linting错误。
Viewing results
如果测试失败,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

Writing your own actions
以上仅作为示例提供。Streamlit App Action 是一个快速入门的方式。一旦你掌握了所选 CI 工具的基础知识,构建和自定义自己的自动化工作流程就变得很容易。这是提高开发者整体生产力和应用质量的好方法。
Working example
作为最后一个工作示例,请查看我们在streamlit/llm-examples
Actions中定义的此工作流文件。
还有问题吗?
我们的 论坛 充满了有用的信息和Streamlit专家。