You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自托管GitLab CE测试摘要详情页颜色显示配置咨询

问题

在自托管GitLab Community Edition v18.10.1环境中,作业日志的带颜色内容能在作业网页视图正常渲染(生成日志的debian slim容器已设置TERM="xterm-256color"),但分支/合并请求的「测试摘要」详情页里,颜色代码(如#x1B[0m#x1B[37m@allure#x1B[39;49;00m)会以纯文本形式展示,无法渲染颜色。需求如下:

  • 要么配置GitLab让测试摘要页支持颜色显示
  • 要么自动过滤掉颜色代码,避免在不支持的场景出现代码干扰
  • 理想状态是在所有支持颜色的场景保留显示,不支持的场景自动处理

当前CI配置(用于生成测试报告):

.portal-gui-base:
  extends: .sentinel-db-dependend
  stage: e2e-browser
  variables:
    PYTEST_ADDOPTS: >
      --junitxml=$CI_PROJECT_DIR/junit-${CI_JOB_NAME_SLUG}.xml
      --tracing retain-on-failure
      --output=$CI_PROJECT_DIR/playwright-results-${CI_JOB_NAME_SLUG}
  artifacts:
    when: always
    paths:
      - playwright-results-${CI_JOB_NAME_SLUG}/
      - portal/gui/test-results/videos/
    reports:
      junit: junit-${CI_JOB_NAME_SLUG}.xml
解决方案

1. 生成测试报告时直接禁用颜色输出

JUnit XML报告标准本身不支持ANSI颜色转义序列,因此最直接的方法是让pytest生成报告时不输出颜色代码。修改CI变量配置,添加颜色禁用参数:

.portal-gui-base:
  extends: .sentinel-db-dependend
  stage: e2e-browser
  variables:
    PYTEST_ADDOPTS: >
      --junitxml=$CI_PROJECT_DIR/junit-${CI_JOB_NAME_SLUG}.xml
      --tracing retain-on-failure
      --output=$CI_PROJECT_DIR/playwright-results-${CI_JOB_NAME_SLUG}
      --color=no  # 新增:禁用pytest颜色输出
    # 或者通过环境变量禁用,二选一即可
    # PYTEST_DISABLE_COLORS: "1"
  artifacts:
    when: always
    paths:
      - playwright-results-${CI_JOB_NAME_SLUG}/
      - portal/gui/test-results/videos/
    reports:
      junit: junit-${CI_JOB_NAME_SLUG}.xml

这样生成的JUnit报告里不会包含颜色代码,测试摘要页就能正常显示纯文本内容,同时作业日志的颜色不受影响(因为作业日志的颜色是直接输出到CI日志流,而非写入JUnit报告)。

2. 在CI作业中过滤已生成报告的颜色代码

如果无法修改测试框架的输出设置,可以在生成JUnit报告后,用命令行工具过滤掉ANSI转义序列。在作业的script部分添加处理步骤:

.portal-gui-base:
  extends: .sentinel-db-dependend
  stage: e2e-browser
  variables:
    PYTEST_ADDOPTS: >
      --junitxml=$CI_PROJECT_DIR/junit-${CI_JOB_NAME_SLUG}.xml
      --tracing retain-on-failure
      --output=$CI_PROJECT_DIR/playwright-results-${CI_JOB_NAME_SLUG}
  script:
    # 这里是你原本的测试执行命令,比如 pytest ...
    pytest your-test-command
    # 新增:过滤JUnit报告中的ANSI颜色代码
    sed -i 's/\x1B\[[0-9;]*m//g' $CI_PROJECT_DIR/junit-${CI_JOB_NAME_SLUG}.xml
  artifacts:
    when: always
    paths:
      - playwright-results-${CI_JOB_NAME_SLUG}/
      - portal/gui/test-results/videos/
    reports:
      junit: junit-${CI_JOB_NAME_SLUG}.xml

sed命令会移除所有ANSI转义序列,确保测试摘要页显示干净的文本。

3. 关于GitLab测试摘要页支持颜色的说明

截至GitLab CE v18.10,官方没有提供配置项让测试摘要页渲染ANSI颜色代码。作业日志能渲染颜色是因为GitLab对作业日志流做了专门的ANSI解析处理,但测试摘要页的内容是从JUnit XML报告中提取的纯文本,不支持颜色渲染逻辑。因此暂时无法实现测试摘要页显示颜色的需求,优先采用前两种方法解决代码干扰问题。

内容的提问来源于stack exchange,提问作者k0pernikus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 13:13:11