【问题标题】:Automate Integration Test against an Oauth2 enabled API in .net针对 .net 中启用 Oauth2 的 API 自动进行集成测试
【发布时间】:2014-08-26 16:19:21
【问题描述】:

我有一个使用另一个 API(例如谷歌日历 API)的 API,该 API 通过 OAuth 2 进行了身份验证。

httpRequest => MyApi under test => uses external Oauth2 enabled API

如果“启用 Oauth2 的 API”使用 HTTP 基本身份验证,我可以在某处硬编码用户名和密码来测试应用程序 - 使用在公开我的 API 的外部 APP 中创建的测试用户的用户名和密码正在使用。

与 Oauth2 一样,我们要求用户同意(用户通常被重定向到网页)以请求他们同意应用程序通过 API 访问他们的数据。

我只想创建简单的集成测试:例如,我的 API 在 google 日历中创建一个事件,然后将其删除以进行清理,但无需人工干预。

这可能吗?如何实现?

【问题讨论】:

    标签: c# .net oauth-2.0 integration-testing


    【解决方案1】:

    如果您正在开发 API,那么您的测试应该只针对该 API。您不对外部 Oauth2 API 中所做的工作负责,该 API 的作者负责。只测试你自己的代码。

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

    【讨论】:

    • 好吧,你是对的。但是如果我想对我自己的 oauth2 api 进行单元测试并检查一切是否以自动化的方式工作。而且我还需要测试更多的 api,所以嘲笑它们将是一个很大的努力。依靠测试帐户,我认为它会更容易
    • 自动化单元测试应该在你的代码单元上完成,而不是在整个过程上。这就是集成测试的目的。与您在正常单元测试期间模拟任何数据库访问的方式相同(即使使用测试数据库看起来更容易),您需要在您的测试期间模拟外部 API 访问。您的测试实际运行的“外部”代码越少越好。
    • 好的,单元测试不是正确的词,我完全同意。所以让我们谈谈集成测试。如何测试与其他启用 oauth2 的 api 的集成。有没有办法在不使用 selenium 之类的工具的情况下做到这一点?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多