Keycloak 测试框架介绍

2024 年 11 月 14 日 作者:Lukas Hanusovsky

一切的开端

替换当前 测试套件 的想法已经酝酿多年。最初,这仅仅是为了重构当前编写测试的方法,但在经过几次内部讨论和重构更新后,我们发现基于 新框架 的新测试套件将是更好的解决方案。

值得一提的是,在使用当前 测试套件 时,存在一些明显的缺点。首先是各种配置和在 Arquillian 框架 之上进行的添加的复杂性。这些更改使测试套件功能强大,但缺点是在没有适当文档的情况下,对于初学者来说几乎难以理解。其次,同样重要的是,Arquillian 框架 已不再完全受支持。其他需要提及的是复杂的执行系统,您需要在其中指定要测试的内容,然后是具有共享配置的抽象类,以及缺少添加自定义扩展的选项。

更光明的未来?

Keycloak 团队于 2024 年 5 月开始努力设计新的测试框架。最初是从原型开始,以验证我们的想法是否可行。该原型是一个基于 JUnit5 测试框架JUnit5 Extension,专门用于实现 JUnit5 回调类,这些类扩展了默认的测试生命周期功能,并提供了自定义注入注解,例如 @KeycloakIntegrationTest@InjectWebDriver@InjectRealm

在成功的测试轮次之后,我们继续进行概念验证,扩展功能列表以支持多种服务器模式、不同的数据库和 WebDriver、客户端和用户设置、SmallRye 配置支持、基于 Nimbus SDKOAuthClient(此功能仅为预览版)等。当前已实现功能的完整列表如下:

  • Maven BOM

  • 核心模块

    • 服务器生命周期

    • 数据库生命周期

    • Admin 客户端注入

    • Realm、用户、客户端生命周期和注入

    • 事件和 Admin 事件监听器和注入

    • OAuth 客户端注入

  • UI 模块

    • WebDriver 生命周期和注入

    • 页面注入

    • 支持 Chrome、Firefox 和 HtmlUnit4 浏览器

  • 数据库模块

它已存在于主分支和 Keycloak 每夜构建版本中。

您是否对从哪里开始感到好奇?

我们建议阅读 用户指南,它将提供关于框架如何工作以及应如何使用的基本概述。如果这还不够,您还可以查看 测试示例

对于扩展开发人员,我们建议查看关于如何使用其自定义提供程序启动 Keycloak 的示例:提供程序示例pom.xml 测试依赖项测试示例

如果您发现错误、想要讨论某些内容或提出新的增强功能,请点击此 GitHub 反馈 讨论链接

下一步

我们在新的测试框架中已经有足够的能力开始从旧的 testsuite 迁移一些测试;事实上,我们已经迁移了我们的第一个测试。我们计划从旧的 testsuite 中一次迁移一个包,从 admin 测试开始,然后转向 formsoauth 包。在执行此操作时,我们将扩展测试框架的功能。

我们知道即将推出的一些功能包括:

  • 一种更轻松地部署自定义提供程序的方法,无需首先构建提供程序的 Maven 版本

  • 改进的日志记录,使其可以轻松地从测试以及 Keycloak 配置日志记录

  • 轻松测试 OAuth 和 OpenID Connect,包括模拟应用程序

  • 扩展以允许在被测服务器上运行代码,当仅通过远程接口进行测试不容易时

我们还有一些更长期的计划要实现:

  • 提供程序测试,可用于通过直接调用提供程序来轻松测试提供程序

  • 并行执行测试,以充分利用多核来减少测试执行时间

致谢

我要感谢所有将概念验证组合在一起并使其成为现实的人:Miquel、Simon、Filip、Moises、Jon 和 Pedro。特别感谢 Stian,他领导了技术设计并提出了非常巧妙的想法,将项目提升到了另一个层次。

感谢您的反馈。

祝您使用愉快!