40

测试用户非常擅长做集成测试。

当我开发启用 facebook oauth 的东西时,我可以以编程方式创建测试用户并将他们用作我的应用程序的真实用户。它们的行为方式与真实用户相同,唯一的区别是它们是沙盒的。

谷歌提供类似的东西吗?

他们正在将所有服务转移到 oauth2,我想与“真实”用户编写一个完整的集成测试。

目前我手动运行我的集成测试并在请求时授权应用程序,显然这种方法不适合 CI 和真正的自动化测试。

我看到的唯一替代方法是创建一个仅在测试中使用的真实帐户,并使用其凭据与 selenium 之类的东西进行交互。

其他选择?

4

3 回答 3

17

你是对的,谷歌没有像 Facebook 那样提供测试用户 API。我认为你有两个选择:

  1. 如您所述,使用“真实”的 Google 用户。如果 Google 阻止这些帐户或添加额外检查以测试他们是否是真实用户(电话验证),这可能会导致问题。他们还进行了一些 AB 测试,这些测试可能会破坏您的测试脚本。

  2. 使用模拟第三方而不是 Google 服务。这将测试您的通用 oauth 集成代码,但显然不如针对真正的 Google 服务进行测试那么健壮。当您控制模拟服务时,此方法可以更稳定。

于 2013-12-15T13:09:26.727 回答
7

如何以编程方式获取Google 访问令牌(自动测试)?

  • 在 Google 控制台上创建一个项目:https ://console.cloud.google.com/

  • 转到凭据-> + CREATE CREDENTIALS -> OAuth 客户端 ID

    • 应用程序类型:网络
    • 名称:某个应用程序的名称
    • 授权的重定向 URI:https ://developers.google.com/oauthplayground +(可选)您真正的回调处理程序,例如https://example.com/auth/google/callback
    • 创建
    • 保存Client IDClient Secret
  • 转到https://developers.google.com/oauthplayground

  • 按右上角的设置(齿轮)图标(OAuth 2.0 配置):

    • (!) 强制提示:同意屏幕
    • 勾选“使用您自己的 OAuth 凭据”并输入 OAuth 客户端 ID 和 OAuth 客户端密码,关闭 OAuth 2.0 配置”屏幕。
  • Step 1折叠面板的底部输入所需的以空格分隔的范围(请参阅https://developers.google.com/identity/protocols/oauth2/scopes#oauth2):

  • 在下一个屏幕上选择帐户(可选屏幕)并授予应用程序权限。

  • 然后你应该被重定向到https://developers.google.com/oauthplayground/?code=SOME -SINGLE-USE-CODE&scope=openid& ..。

  • Exchange 授权码获取代币

  • 或手动通过

    curl -v "https://oauth2.googleapis.com/token" -d "code=SOME-SINGLE-USE-CODE&redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground&client_id=YOUR_APP_CLIENT_ID&client_secret=YOUR_APP_CLIENT_SECRET&scope=&grant_type=authorization_code"
    
  • 获取未过期的刷新令牌。

  • 最后,从Access token 中获取 access token

  • 或手动:

    curl -d "client_id=YOUR_APP_CLIENT_ID&client_secret=YOUR_APP_CLIENT_SECRET&grant_type=refresh_token&refresh_token=YOUR_APP_REFRESH_TOKEN" "https://oauth2.googleapis.com/token"
    

证实:

curl "https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=ACCESS_TOKEN"
{
  "id": "10934363016XXXXXXXXXX",
  "picture": "https://lh3.googleusercontent.com/a-/AOh14GhoUlKjYgC-..."
}
于 2021-08-19T08:49:57.820 回答
1

您可以创建一个谷歌帐户并在谷歌云控制台中配置一个简单的项目/客户端。然后,您可以为 oauth 配置它并使用 googles oauth-playground来创建刷新令牌(永不过期)。

使用您的客户端 ID、客户端密钥和刷新令牌,您可以在测试中向 googles auth-token 端点 ( https://www.googleapis.com/oauth2/v4/token) 发送一个后请求,并将收到一个有效的(短时间)访问令牌。这里不需要手动步骤。

我已在本指南中阅读过它。

于 2021-04-21T13:23:43.273 回答