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

升级Keycloak至24.0.2后Cypress测试失败及容器健康检查异常求助

解决方案:Keycloak 24.0.2 容器健康检查异常与Cypress测试失败问题

一、修复容器健康检查异常

你的健康检查失败核心原因是旧版健康检查逻辑不匹配Quarkus版Keycloak的特性:

  • 旧版jboss/keycloak根路径(/)会返回登录页,但新版Quarkus版Keycloak访问http://localhost:8080会返回302重定向,curl -f会将3xx状态码判定为失败,导致健康检查不通过。
  • 新版Keycloak提供了官方标准的健康检查端点,应该替换为就绪检查接口。

具体修复步骤:

  1. 修改健康检查命令,替换为官方推荐的就绪端点:
healthcheck:
  test: ['CMD', 'curl', '-f', 'http://localhost:8080/health/ready']
  interval: 60s  # 新版启动慢,延长检查间隔
  timeout: 10s
  retries: 5     # 增加重试次数,给足启动时间
  1. 确认容器内curl存在:如果quay.io/keycloak/keycloak:24.0.2镜像默认未安装curl,可改用wget替代:
test: ['CMD', 'wget', '--spider', '--quiet', 'http://localhost:8080/health/ready']
  1. 调整启动等待逻辑:如果是docker-compose部署,确保依赖该容器的服务配置了健康检查依赖:
depends_on:
  adi-adi-auth-1:
    condition: service_healthy

二、解决Cypress测试通过率暴跌问题

jboss/keycloak(Wildfly版)与quay.io/keycloak/keycloak(Quarkus版)是架构完全重写的版本,UI、API、配置逻辑差异极大,测试失败主要是因为旧测试用例未适配新版变化:

核心排查与修复方向:

  1. 检查认证端点路径变化:
    旧版token端点:/auth/realms/{realm}/protocol/openid-connect/token
    新版端点去掉/auth前缀:/realms/{realm}/protocol/openid-connect/token
    若测试中硬编码了旧端点,需全部替换。

  2. 更新UI元素定位器:
    新版登录页、管理控制台的DOM结构完全重构,比如用户名输入框ID、登录按钮选择器都已变更。需通过Cypress录制或开发者工具重新获取新的元素定位规则,替换旧测试用例中的选择器。

  3. 修正环境变量配置:
    旧版管理员用户配置变量KEYCLOAK_USER/KEYCLOAK_PASSWORD在新版中已替换为KC_ADMIN_USER/KC_ADMIN_PASSWORD,若未更新,会导致管理员账户未创建,测试中认证失败。

  4. 调整测试启动等待逻辑:
    新版Keycloak启动耗时更长,需在Cypress测试开始前增加就绪检查:

before(() => {
  cy.request({
    url: 'http://localhost:8080/health/ready',
    retryOnStatusCodeFailure: true,
    retryOnNetworkFailure: true,
    timeout: 120000 // 延长超时时间到2分钟
  }).its('status').should('eq', 200)
})
  1. 禁用强制HTTPS(若测试用HTTP):
    新版Keycloak默认启用HTTPS,若测试环境使用HTTP,需添加以下环境变量:
KC_HTTP_ENABLED=true
KC_HOSTNAME_STRICT=false
KC_HOSTNAME_STRICT_HTTPS=false

避免Keycloak强制重定向到HTTPS导致Cypress测试请求失败。

  1. 排查安全特性冲突:
    新版默认启用SameSite Cookie、CSRF保护等特性,若测试用例未适配,可能导致登录、请求失败。可临时禁用这些特性用于测试(生产环境不建议):
KC_SPI_SECURITY_HEADERS_CONTENT_SECURITY_POLICY="frame-src 'self' *;"
KC_SPI_SECURITY_HEADERS_X_FRAME_OPTIONS="ALLOW-FROM *"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:03:13