针对.net中启用了Oauth2的API自动进行集成测试
本文关键字:集成测试 API net 启用 Oauth2 针对 | 更新日期: 2023-09-27 18:19:32
我有一个API,它使用另一个API(例如谷歌日历API),该API通过OAuth 2验证。
httpRequest => MyApi under test => uses external Oauth2 enabled API
如果"启用Oauth2的API"使用HTTP基本身份验证,我可以在某个地方硬编码用户名和密码来测试应用程序-使用在公开我正在使用的API的外部应用程序中创建的测试用户的用户名和密码。
与Oauth2一样,我们要求用户同意(用户通常被重定向到网页),以请求他们同意应用程序通过API访问他们的数据。
我只想创建一个简单的集成测试:例如,我的API在谷歌日历中创建一个事件,然后删除它进行清理,但不需要人工干预。
这可能吗?怎么可能?
如果您正在开发一个API,那么您的测试应该仅针对该API。您不负责在外部Oauth2 API中完成的工作,该API的作者是。只测试您自己的代码。
这意味着,如果可能的话,您应该找到一种方法来模拟对外部API的调用。
我一直在想自己做这件事的最佳方法。到目前为止,我已经找到了一些选择:
- 使用
password
授予类型作为用户进行身份验证。显然,根据最佳实践,这不再是推荐的,但这是为最终用户提供的。不用于测试 - 使用
client_credentials
授权类型,作为应用程序本身进行身份验证。问题是,如果你的测试依赖于能否检索用户数据,那么除非你事先操作它,否则应用程序本身不会有任何关联 - 请求
refresh_token
,以作为先前已验证的用户进行重新验证。这是通过请求offline_access
作用域来完成的。用户必须进行第一次身份验证,获取刷新令牌并为测试脚本提供该令牌。然后,脚本必须能够在每次运行时使用新的刷新令牌不断更新自己。如果刷新令牌在下一次运行之前到期,则需要再次进行人工干预 - 使用
device_code
授予类型在其他地方轮询最终用户的同意。这就像YouTube用来配对你的智能电视一样,你可以在智能电视上开始登录,并用移动设备上的配对码同意登录。在这里,同意书也需要人为干预,至少是第一次,如果同意书到期,则需要再次干预