如何实现IdentityServer4的集成测试?
How to implement integration testing for IdentityServer4?
这更像是一个一般性问题,而不是特定问题,但我希望它能对以后遇到类似问题的人有所帮助。
我正在为我的业务案例实施 IdentityServer4,我最初想为 public API 访问设置身份验证和授权。为此,我最初将仅使用 ClientCredentials 流程。为了手动测试使用流程和正确的配置和设置,我创建了一个小测试 API 和一个客户端控制台应用程序,就像文档中的示例项目一样。但是我想自动化它,因为我几乎已经完成了 IdentityServer4 设置,并且将开始处理实际的 API 本身。
所以基本上我想针对我的 IdentityServer 实现做一些集成测试。但我对这个主题的经验很少,所以也许你会对如何设置它有一些建议或提示。
我是否应该在 API 端设置它,至少已经完成了一些端点?但是如果我的 IdentityServer 和 API 在不同的解决方案中,那么例如对于 运行 在本地进行这些测试,我仍然必须手动启动 IdentityServer 然后才能 运行 在API 哪个项目对接了?
或者对我来说,在 IdentityServer 项目中进行测试、测试 api 和客户端会更有意义(与在源代码解决方案中完成的方式大致相同)。但是在查看源代码集成测试时,我看到他们有一个单独的 Startup class 用于 IdentityServer 启动。我应该以类似的方式执行此操作,还是应该将测试配置为 运行 针对我自己的 IdentityServer 项目的 Startup class?然后我将不得不复制所有 appSettings 文件等
我知道这是一个很笼统的问题和主题,但如果您能提供任何关于如何实际测试正确内容的指示,我们将不胜感激。我知道我不需要对功能本身进行大量测试,因为它也在源代码解决方案中完成,但我宁愿进行集成测试来测试我自己的配置等,所以如果任何组件无法通信到彼此,我会立即知道。
提前致谢!
我基本同意你的想法。
我问了一个问题 before I started my IdentitySerever project. That was answered by @Lutando, and four users upvoted this (though no one like :( the question). Anyway, we have added few acceptance and integration tests for our project. You can check 以了解有关如何编写此类测试的一些细节
Or for me it would make more sense to have the tests, the test api and
client in the IdentityServer project (much in the same way it is done
in the source code solution). But when looking at the source code
integration tests, I saw they had a separate Startup class for
IdentityServer startup. Should I do this similarly or rather configure
the tests to run against the Startup class of my own IdentityServer
project?
我可以说说我们公司是如何处理这个问题的(不是每个人都喜欢这个想法)。由于我们的身份服务器将仅处理混合流(仅授权 mvc 应用程序、win 应用程序和其余 api),我们创建了一些示例项目(每个用于一种)并通过 [=10] 运行 它们=].我们在 IdentityServer 的 Startup class 上有一些虚拟方法,这样我们就可以播种数据并连接到内存数据库。 每个测试在内存中创建自己的数据库
无论如何,这些测试已经非常优雅地完成了它们的工作。完成 IdentityServer with Admin Interfaces 的实现花了 7 个飞蛾,并且多次指出我们错误的实现。 这些测试通常值得付出努力
最后,我想指出我在开发 IdS4 时发现的一些事情
- 集成测试需要很长时间,所以不要重复相同类型的测试。
- 正如您在问题中提到的,IdentityServer4 源已经正确测试了他们的代码,因此无需测试 identityServer4 的工作方式。只测试连接成功部分
- 很难用 access_token 或 identityToken
来测试断言
- 使用 browser client 来处理重定向和 cookies
- 最后,用这种方式编写集成测试既困难又费时。我认为我们应该为项目之间交互的基本功能添加足够的测试
但是,如果您熟悉 Selenium/Coded UI 或类似工具,最好使用以下方法编写集成测试那些。我相信,编写少量验收测试(或服务级别测试)只是为了确认新代码不会破坏工作流程是更好的方法
最后,我想添加一些我们发现可以节省时间的验收测试
- 从 MVC 客户端登录
- 从客户端登录并从 mvc 客户端调用 api
- 根据设置显示或不显示同意页面
- 从控制台应用程序调用 API
- Api 由于作用域不足,调用失败
- 用户声明添加成功
...
我们的集成测试数量是 22
如果我在这里提到的任何不正确的方法,请随时纠正我。
祝您 IdentityServer4 实施顺利
这更像是一个一般性问题,而不是特定问题,但我希望它能对以后遇到类似问题的人有所帮助。
我正在为我的业务案例实施 IdentityServer4,我最初想为 public API 访问设置身份验证和授权。为此,我最初将仅使用 ClientCredentials 流程。为了手动测试使用流程和正确的配置和设置,我创建了一个小测试 API 和一个客户端控制台应用程序,就像文档中的示例项目一样。但是我想自动化它,因为我几乎已经完成了 IdentityServer4 设置,并且将开始处理实际的 API 本身。
所以基本上我想针对我的 IdentityServer 实现做一些集成测试。但我对这个主题的经验很少,所以也许你会对如何设置它有一些建议或提示。
我是否应该在 API 端设置它,至少已经完成了一些端点?但是如果我的 IdentityServer 和 API 在不同的解决方案中,那么例如对于 运行 在本地进行这些测试,我仍然必须手动启动 IdentityServer 然后才能 运行 在API 哪个项目对接了?
或者对我来说,在 IdentityServer 项目中进行测试、测试 api 和客户端会更有意义(与在源代码解决方案中完成的方式大致相同)。但是在查看源代码集成测试时,我看到他们有一个单独的 Startup class 用于 IdentityServer 启动。我应该以类似的方式执行此操作,还是应该将测试配置为 运行 针对我自己的 IdentityServer 项目的 Startup class?然后我将不得不复制所有 appSettings 文件等
我知道这是一个很笼统的问题和主题,但如果您能提供任何关于如何实际测试正确内容的指示,我们将不胜感激。我知道我不需要对功能本身进行大量测试,因为它也在源代码解决方案中完成,但我宁愿进行集成测试来测试我自己的配置等,所以如果任何组件无法通信到彼此,我会立即知道。
提前致谢!
我基本同意你的想法。
我问了一个问题
Or for me it would make more sense to have the tests, the test api and client in the IdentityServer project (much in the same way it is done in the source code solution). But when looking at the source code integration tests, I saw they had a separate Startup class for IdentityServer startup. Should I do this similarly or rather configure the tests to run against the Startup class of my own IdentityServer project?
我可以说说我们公司是如何处理这个问题的(不是每个人都喜欢这个想法)。由于我们的身份服务器将仅处理混合流(仅授权 mvc 应用程序、win 应用程序和其余 api),我们创建了一些示例项目(每个用于一种)并通过 [=10] 运行 它们=].我们在 IdentityServer 的 Startup class 上有一些虚拟方法,这样我们就可以播种数据并连接到内存数据库。 每个测试在内存中创建自己的数据库
无论如何,这些测试已经非常优雅地完成了它们的工作。完成 IdentityServer with Admin Interfaces 的实现花了 7 个飞蛾,并且多次指出我们错误的实现。 这些测试通常值得付出努力
最后,我想指出我在开发 IdS4 时发现的一些事情
- 集成测试需要很长时间,所以不要重复相同类型的测试。
- 正如您在问题中提到的,IdentityServer4 源已经正确测试了他们的代码,因此无需测试 identityServer4 的工作方式。只测试连接成功部分
- 很难用 access_token 或 identityToken 来测试断言
- 使用 browser client 来处理重定向和 cookies
- 最后,用这种方式编写集成测试既困难又费时。我认为我们应该为项目之间交互的基本功能添加足够的测试
但是,如果您熟悉 Selenium/Coded UI 或类似工具,最好使用以下方法编写集成测试那些。我相信,编写少量验收测试(或服务级别测试)只是为了确认新代码不会破坏工作流程是更好的方法
最后,我想添加一些我们发现可以节省时间的验收测试
- 从 MVC 客户端登录
- 从客户端登录并从 mvc 客户端调用 api
- 根据设置显示或不显示同意页面
- 从控制台应用程序调用 API
- Api 由于作用域不足,调用失败
- 用户声明添加成功 ...
我们的集成测试数量是 22
如果我在这里提到的任何不正确的方法,请随时纠正我。
祝您 IdentityServer4 实施顺利