针对.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在谷歌日历中创建一个事件,然后删除它进行清理,但不需要人工干预。

这可能吗?怎么可能?

针对.net中启用了Oauth2的API自动进行集成测试

如果您正在开发一个API,那么您的测试应该仅针对该API。您不负责在外部Oauth2 API中完成的工作,该API的作者是。只测试您自己的代码。

这意味着,如果可能的话,您应该找到一种方法来模拟对外部API的调用。

我一直在想自己做这件事的最佳方法。到目前为止,我已经找到了一些选择:

  1. 使用password授予类型作为用户进行身份验证。显然,根据最佳实践,这不再是推荐的,这是为最终用户提供的。不用于测试
  2. 使用client_credentials授权类型,作为应用程序本身进行身份验证。问题是,如果你的测试依赖于能否检索用户数据,那么除非你事先操作它,否则应用程序本身不会有任何关联
  3. 请求refresh_token,以作为先前已验证的用户进行重新验证。这是通过请求offline_access作用域来完成的。用户必须进行第一次身份验证,获取刷新令牌并为测试脚本提供该令牌。然后,脚本必须能够在每次运行时使用新的刷新令牌不断更新自己。如果刷新令牌在下一次运行之前到期,则需要再次进行人工干预
  4. 使用device_code授予类型在其他地方轮询最终用户的同意。这就像YouTube用来配对你的智能电视一样,你可以在智能电视上开始登录,并用移动设备上的配对码同意登录。在这里,同意书也需要人为干预,至少是第一次,如果同意书到期,则需要再次干预