自托管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
相关产品推荐
相关产品推荐

