我有一个使用anotther API(例如google calendar API)的API,该API通过OAuth 2进行身份验证。
httpRequest => MyApi under test => uses external Oauth2 enabled API
如果“启用Oauth2的API”使用HTTP基本身份验证,我可以在某处硬编码用户名和密码来测试应用程序。 (在外部APP中创建的公开我正在使用的API的测试用户的用户名和密码)
与Oauth2一样,我们要求用户同意(用户通常会被重定向到网页(同意屏幕),询问他是否允许应用通过API访问其数据。)。
我只是想创建一个简单的单元测试:例如,我的Api在谷歌日历中创建一个事件,然后删除它进行清理,但没有人为干预...
这可能吗?如何?
答案 0 :(得分:2)
如果您正在开发API,那么您的测试应仅针对该API。您不对外部Oauth2 API所做的工作负责,该API的作者是。只测试你自己的代码。
这意味着,如果可能的话,你应该找到一种模拟外部API调用的方法。
答案 1 :(得分:0)
我一直在想自己做这件事的最佳方法。 到目前为止,我已经找到了一些选择:
password
授予类型来验证用户身份。显然,按照最佳做法,我们不再建议这样做,但 是针对最终用户的。不用于测试。client_credentials
授予类型来认证为应用程序本身。这样做的问题在于,如果您的测试依赖于能够检索用户数据,那么除非您事先进行操作,否则该应用程序将不会与自身相关联。refresh_token
,以重新验证为先前通过身份验证的用户。这是通过请求offline_access
范围来完成的。用户将必须进行第一次身份验证,获取刷新令牌并为其提供测试脚本。这样,脚本每次运行时都必须能够使用新的刷新令牌来保持自身更新。如果刷新令牌在下一次运行之前到期,则将再次需要人工干预。device_code
授予类型在其他地方轮询最终用户的同意。这就像YouTube用于配对SmartTV的方式一样,您可以在SmartTV上开始登录并在移动设备上使用配对代码同意登录。在这里,至少对于第一次同意,还需要人工干预,至少在第一次同意之后,然后在同意终止时再次进行。