Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.net中针对启用Oauth2的API自动化集成测试_C#_.net_Oauth 2.0_Integration Testing - Fatal编程技术网

C# 在.net中针对启用Oauth2的API自动化集成测试

C# 在.net中针对启用Oauth2的API自动化集成测试,c#,.net,oauth-2.0,integration-testing,C#,.net,Oauth 2.0,Integration Testing,我有一个API,它使用另一个API(例如GoogleCalendarAPI),该API通过OAuth2的身份验证 httpRequest => MyApi under test => uses external Oauth2 enabled API 如果“启用Oauth2的API”使用HTTP基本身份验证,我可以在某个地方硬编码用户名和密码来测试应用程序——使用在公开我正在使用的API的外部应用程序中创建的测试用户的用户名和密码 与Oauth2一样,我们要求用户同意(用户通常被重定

我有一个API,它使用另一个API(例如GoogleCalendarAPI),该API通过OAuth2的身份验证

httpRequest => MyApi under test => uses external Oauth2 enabled API
如果“启用Oauth2的API”使用HTTP基本身份验证,我可以在某个地方硬编码用户名和密码来测试应用程序——使用在公开我正在使用的API的外部应用程序中创建的测试用户的用户名和密码

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

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


这是否可能以及如何实现?

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


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

我一直在想最好的方法是什么。 到目前为止,我已经找到了一些选择:

  • 使用
    password
    grant类型作为用户进行身份验证。根据最佳实践,这显然不再推荐,但这是针对最终用户的。不是为了测试
  • 使用
    client\u凭据
    grant类型作为应用程序本身进行身份验证。问题在于,如果你的测试依赖于能够检索用户数据,那么应用程序本身不会有任何关联,除非你事先对其进行操作
  • 请求
    刷新\u令牌
    ,以作为先前已验证的用户重新验证。这是通过请求
    脱机访问
    范围来完成的。用户必须进行第一次身份验证,获取一个刷新令牌并使用它提供测试脚本。然后,脚本必须能够在每次运行时使用新的刷新令牌不断更新自身。如果刷新令牌在下次运行之前过期,则再次需要人工干预
  • 使用
    设备\u code
    授权类型在其他地方轮询最终用户同意。这就像YouTube用来配对您的SmartTV一样,您可以在SmartTV上启动登录,并在移动设备上使用配对代码表示同意。在这里,同意书也需要人为干预,至少第一次,如果同意书过期,也需要人为干预

  • 好吧,你说得对。但是,如果我想对自己的OAuth2API进行单元测试,并检查一切是否都以自动化方式工作,该怎么办呢。而且我还需要测试更多的api,所以模仿它们将是一项巨大的工作。依靠一个测试帐户,我认为自动化单元测试应该在您的代码单元上完成,而不是在整个过程中完成会更容易。这就是集成测试的目的。与在正常单元测试期间模拟任何数据库访问的方式相同(即使使用测试数据库似乎更容易),您也需要在测试期间模拟外部API访问。你的测试实际运行的“外部”代码越少越好。好吧,我完全同意单元测试这个词。让我们来谈谈集成测试。如何测试与其他支持oauth2的api的集成。有没有一种不使用selenium这样的工具就能做到这一点的方法?