C# 在.net中针对启用Oauth2的API自动化集成测试
我有一个API,它使用另一个API(例如GoogleCalendarAPI),该API通过OAuth2的身份验证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一样,我们要求用户同意(用户通常被重定
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这样的工具就能做到这一点的方法?