谷歌是不是提供测试用户进行集成测试

Posted

技术标签:

【中文标题】谷歌是不是提供测试用户进行集成测试【英文标题】:Does Google provide test users for integration testing谷歌是否提供测试用户进行集成测试 【发布时间】:2013-07-13 12:46:31 【问题描述】:

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

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

Google 是否提供类似的服务?

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

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

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

其他选择?

【问题讨论】:

【参考方案1】:

您说得对,Google 不像 Facebook 那样提供测试用户 API。我认为你有两个选择:

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

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

【讨论】:

以防万一其他人发现这个。我们尝试了选项 1,它们确实阻止了自动登录。我们甚至复制了 2FA,但他们随后求助于 recaptcha。【参考方案2】:

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

使用您的客户端 ID、客户端密码和刷新令牌,您可以在测试中向 google 的身份验证令牌端点 (https://www.googleapis.com/oauth2/v4/token) 发送后请求,​​并会收到有效的(短时间)访问权限 -令牌。此处无需手动步骤。

我在this guide 上读到过。

【讨论】:

【参考方案3】:

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

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

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

应用程序类型:Web 名称:某个应用程序的名称 授权重定向 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):

openid(默认)

https://www.googleapis.com/auth/userinfo.email

https://www.googleapis.com/auth/userinfo.profile

例子:

openid https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile

然后按授权 API

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

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

兑换令牌的授权码

或手动通过

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-..."

【讨论】:

以上是关于谷歌是不是提供测试用户进行集成测试的主要内容,如果未能解决你的问题,请参考以下文章

集成测试框架

单元测试集成测试

使用 Jooq 进行集成测试

SAP用户集成测试顺利进行!

使用 Maven、Protractor 和 Selenium WebDriver 进行集成测试

谷歌开源模糊测试工具:ClusterFuzz 安装方法