当我使用 python vcr 运行测试时,遇到奇怪的 google video Intelligence api 请求错误。我想知道是否有其他人看到过这个错误,如果是的话,为什么会出现这个错误以及如何解决它?
我使用VCR来模拟对视频智能API的请求。
我使用 pytest 来运行我的测试。
如果我删除 VCR 并重新运行它,它运行良好,如果我在创建 VCR 后尝试再次运行它,它也运行良好。然而一段时间后,(目前不确定这是几小时还是几天,我会在运行录像机时收到以下错误)。
错误如下:-
"Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential.
这是录像机错误
E google.api_core.exceptions.Unauthenticated: 401 Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
<string>:3: Unauthenticated
Assertion failed
此问题最简单的解决方案是确保 API 不使用 gRPC。
vision.ImageAnnotatorClient(transport="rest")
这将允许 API 使用 RESTful 端点,而不会对 VCR 造成任何中断。
Google Vision Intelligence 就像其他谷歌服务一样,使用 gRPC 与服务后端进行通信。不幸的是,VCR 还不支持 gRPC。
测试期间 VCR 记录的唯一内容是 OAuth 令牌(检查生成的盒式磁带文件 VCR)。当过期时,会导致
Unauthenticated
错误
有关 gRPC 支持的功能请求 https://github.com/kevin1024/vcrpy/issues/560
用于 gRPC 的 VCR(Ruby)https://github.com/btoews/gcr
错误似乎指向无效的身份验证凭据。
此错误背后可能有两种可能的情况 -
您可以按照以下步骤验证您所做的初始设置配置:
解决方案1- 对于自定义服务帐户,即用户管理的服务帐户:
如果您创建了自己的服务帐户,那么您将需要为该服务帐户生成密钥。
您还需要使用以下方法设置环境变量:
“导出 GOOGLE_APPLICATION_CREDENTIALS=”KEY_PATH”
解决方案2-应用程序默认凭据不可用:
对于默认服务帐户(启用了 Compute Engine API 的项目将拥有一个使用应用程序默认凭据的 Compute Engine 默认服务帐户),您可以按照以下步骤操作: