44

Test users are very good to do integration testing.

When I develop facebook oauth enabled stuff I can programmatically create test users and use them as real users of my application. They behave in the same way of real users, the only difference is that they are sandboxed.

Does Google offer something like that?

They are moving all their services to oauth2 and I'd like to write a full integration test with "real" users.

Currently I manually run my integration tests and authorize the application when requested, obviously this approach is not good for CI and truly automated test.

The only alternative that I see is to create a real account used only in tests and use its credentials interacting with something like selenium.

Other alternatives?

Fabio
  • 18,856
  • 9
  • 82
  • 114

3 Answers3

21

You are correct Google don't offer a test user API in the same way that Facebook do. I think you have two options:

  1. Use "real" Google users as you stated. This can cause issues if Google blocks these accounts or adds extra checks to test if they are real users to not (Phone verification). They also do some A-B testing which can break your test scripts.

  2. Use a mock third party instead of the Google service. This will test your generic oauth integration code but obviously isn't as robust as testing against the real Google service. This method can be more stable as you control the mock service.

Mark Butler
  • 466
  • 3
  • 10
  • 35
    Just in case other people find this. We tried options 1, and they do block automated logins. We went as far as replicating 2FA but they then resorted to recaptcha. – Abe Petrillo Mar 17 '17 at 00:17
13

How to get Google access token programmatically (automated testing)?

Validate:

curl "https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=ACCESS_TOKEN"
{
  "id": "10934363016XXXXXXXXXX",
  "picture": "https://lh3.googleusercontent.com/a-/AOh14GhoUlKjYgC-..."
}
MingalevME
  • 1,827
  • 1
  • 22
  • 19
4

You can create a google account and configure a simple project/client within googles cloud console. Then you can configure it for oauth and use googles oauth-playground for creating a refresh-token (which never expires).

With your client-id, client-secret and the refresh-token you can send a post-request in your tests to googles auth-token endpoint (https://www.googleapis.com/oauth2/v4/token) and will receive a valid (short-time) access-token. No manual steps needed here.

I've read about it in this guide.

Sola Tis
  • 41
  • 1