CI 流水线

基本原理

在 CI 流水线中进行测试的目标与在本地进行测试不同。事实上,你可以在你的电脑上快速编辑一些代码并重新运行你的测试,但 CI 流水线无法做到这一点。它们在单独的服务器上运行,并由特定的操作触发。

基于这一观察,pytest 可以检测它何时处于 CI 环境中并调整其某些行为。

CI 是如何被检测到的

当以下任一环境变量被设置为非空值时,Pytest 会知道它处于 CI 环境中:

  • CI: 许多 CI 系统使用。

  • BUILD_NUMBER: Jenkins 使用。

对 CI 的影响

目前,处于 CI 环境对 pytest 的影响有限。

当检测到 CI 环境时,简短测试摘要信息的输出不再被截断为终端大小,即会显示完整的消息。

# content of test_ci.py
import pytest


def test_db_initialized():
    pytest.fail(
        "deliberately failing for demo purpose, Lorem ipsum dolor sit amet, "
        "consectetur adipiscing elit. Cras facilisis, massa in suscipit "
        "dignissim, mauris lacus molestie nisi, quis varius metus nulla ut ipsum."
    )

在本地运行此命令,不带任何额外选项,将输出

$ pytest test_ci.py
...
========================= short test summary info ==========================
FAILED test_backends.py::test_db_initialized[d2] - Failed: deliberately f...

(注意截断的文本)

而在 CI 上运行此命令将输出

$ export CI=true
$ pytest test_ci.py
...
========================= short test summary info ==========================
FAILED test_backends.py::test_db_initialized[d2] - Failed: deliberately failing
for demo purpose, Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras
facilisis, massa in suscipit dignissim, mauris lacus molestie nisi, quis varius
metus nulla ut ipsum.