Testers Orchestration for Google Play
Use this skill when you need to manage beta testers and testing groups.
Understanding Testing Tracks
Google Play has several testing tracks:
- •Internal - Up to 100 testers, instant access
- •Closed - Invite-only testing groups
- •Open - Public beta, anyone can join
Manage Testers
List testers for a track
bash
gplay testers list \ --package com.example.app \ --edit $EDIT_ID \ --track internal
Get tester group details
bash
gplay testers get \ --package com.example.app \ --edit $EDIT_ID \ --track beta
Update tester emails
bash
gplay testers update \ --package com.example.app \ --edit $EDIT_ID \ --track internal \ --emails "user1@example.com,user2@example.com,user3@example.com"
Add testers (append to existing list)
bash
# Get current testers CURRENT=$(gplay testers get --package com.example.app --edit $EDIT_ID --track internal \ | jq -r '.testers[]' | paste -sd "," -) # Add new testers NEW_TESTERS="user4@example.com,user5@example.com" ALL_TESTERS="$CURRENT,$NEW_TESTERS" gplay testers update \ --package com.example.app \ --edit $EDIT_ID \ --track internal \ --emails "$ALL_TESTERS"
Remove tester
bash
# Get current testers CURRENT=$(gplay testers get --package com.example.app --edit $EDIT_ID --track internal \ | jq -r '.testers[]' | paste -sd "," -) # Remove specific email UPDATED=$(echo "$CURRENT" | tr ',' '\n' | grep -v "user@example.com" | paste -sd "," -) gplay testers update \ --package com.example.app \ --edit $EDIT_ID \ --track internal \ --emails "$UPDATED"
Complete Tester Workflow
Setup internal testing
bash
# 1. Create edit EDIT_ID=$(gplay edits create --package com.example.app | jq -r '.id') # 2. Upload build to internal track gplay bundles upload \ --package com.example.app \ --edit $EDIT_ID \ --file app-internal.aab # 3. Add testers gplay testers update \ --package com.example.app \ --edit $EDIT_ID \ --track internal \ --emails "tester1@example.com,tester2@example.com" # 4. Update track gplay tracks update \ --package com.example.app \ --edit $EDIT_ID \ --track internal \ --json @track-config.json # 5. Commit gplay edits commit --package com.example.app --edit $EDIT_ID
track-config.json
json
{
"releases": [{
"versionCodes": [123],
"status": "completed"
}]
}
Internal Testing (Quick Testing)
Characteristics:
- •Up to 100 testers
- •Instant access (no review)
- •Ideal for rapid iteration
bash
# Release to internal with testers gplay release \ --package com.example.app \ --track internal \ --bundle app.aab \ --testers "dev1@company.com,dev2@company.com,qa@company.com"
Closed Testing (Beta Groups)
Characteristics:
- •Unlimited testers
- •Can have multiple named groups
- •Testers need opt-in link
Create beta release
bash
gplay release \ --package com.example.app \ --track beta \ --bundle app.aab
Testers join via opt-in link
Share this link with testers:
code
https://play.google.com/apps/testing/com.example.app
Open Testing (Public Beta)
Characteristics:
- •Anyone can join
- •Public opt-in page
- •Still requires Play Store review
bash
gplay release \ --package com.example.app \ --track alpha \ # alpha track = open testing --bundle app.aab
Tester Management Best Practices
Organize testers by group
Internal testing:
- •Developers
- •QA team
- •Product managers
Closed beta:
- •Power users
- •Customer advisory board
- •Early adopters
Open beta:
- •General public
- •Community members
Email list management
Store tester lists in files:
bash
# testers-internal.txt dev1@company.com dev2@company.com qa@company.com # testers-beta.txt poweruser1@example.com poweruser2@example.com feedback@example.com
Update from file:
bash
EMAILS=$(cat testers-internal.txt | paste -sd "," -) gplay testers update \ --package com.example.app \ --edit $EDIT_ID \ --track internal \ --emails "$EMAILS"
Testing Workflow Examples
Weekly Beta Release
bash
#!/bin/bash PACKAGE="com.example.app" # Build ./gradlew bundleRelease # Release to internal first gplay release \ --package $PACKAGE \ --track internal \ --bundle app/build/outputs/bundle/release/app-release.aab # Wait 24 hours, monitor for crashes # If stable, promote to beta gplay promote \ --package $PACKAGE \ --from internal \ --to beta
Staged Beta Rollout
bash
# Week 1: Internal team (10 people) gplay release --package com.example.app --track internal --bundle app.aab # Week 2: Beta group 1 (100 people) gplay promote --package com.example.app --from internal --to beta # Week 3: Open beta (unlimited) gplay promote --package com.example.app --from beta --to alpha # Week 4: Production with staged rollout gplay promote --package com.example.app --from alpha --to production --rollout 10
Share Testing Links
Internal testing link
code
https://play.google.com/apps/internaltest/INTERNAL_TESTING_ID
Get from Play Console → Internal testing → Testers → Copy link
Closed testing opt-in link
code
https://play.google.com/apps/testing/com.example.app
Email template for testers
code
Subject: Join the Beta Test for [App Name] Hi, You've been invited to test the beta version of [App Name]! To join: 1. Click this link: https://play.google.com/apps/testing/com.example.app 2. Tap "Become a tester" 3. Download the app from Google Play Your feedback is valuable! Please report any issues to: beta@example.com Thanks, The [App Name] Team
Monitor Beta Feedback
Check feedback
bash
# View recent reviews from beta testers gplay reviews list --package com.example.app \ | jq '.reviews[] | select(.comments[0].userComment.reviewerLanguage != null)'
Crash reports
Use Play Console → Quality → Android vitals → Crashes and ANRs
Filter by version code to see beta-specific crashes.
Automated Tester Management
Sync from CSV
bash
#!/bin/bash # sync-testers.sh PACKAGE="com.example.app" CSV_FILE="testers.csv" # Read emails from CSV (skip header) EMAILS=$(tail -n +2 "$CSV_FILE" | cut -d',' -f1 | paste -sd "," -) # Create edit EDIT_ID=$(gplay edits create --package $PACKAGE | jq -r '.id') # Update testers gplay testers update \ --package $PACKAGE \ --edit $EDIT_ID \ --track internal \ --emails "$EMAILS" # Commit gplay edits commit --package $PACKAGE --edit $EDIT_ID echo "Synced $(echo $EMAILS | tr ',' '\n' | wc -l) testers"
testers.csv
csv
email,name,role dev1@company.com,Alice Developer,Developer qa1@company.com,Bob QA,QA pm@company.com,Carol PM,Product Manager
Remove Inactive Testers
bash
#!/bin/bash # Remove testers who haven't tested in 30 days PACKAGE="com.example.app" EDIT_ID=$(gplay edits create --package $PACKAGE | jq -r '.id') # Get current testers CURRENT=$(gplay testers get --package $PACKAGE --edit $EDIT_ID --track beta \ | jq -r '.testers[]') # Filter active testers (implement your logic) # This is a placeholder - you'd need to track activity separately ACTIVE="tester1@example.com,tester2@example.com" # Update gplay testers update \ --package $PACKAGE \ --edit $EDIT_ID \ --track beta \ --emails "$ACTIVE" gplay edits commit --package $PACKAGE --edit $EDIT_ID
Testing Limits
| Track | Max Testers | Review Required | Access Speed |
|---|---|---|---|
| Internal | 100 | No | Instant |
| Closed | Unlimited | No | Minutes |
| Open | Unlimited | Yes | Days |
| Production | Unlimited | Yes | Days |
Best Practices
DO:
- •✅ Start with internal testing
- •✅ Gradually expand to beta
- •✅ Communicate clearly with testers
- •✅ Provide feedback channels
- •✅ Acknowledge tester contributions
- •✅ Keep tester lists up to date
- •✅ Remove inactive testers periodically
DON'T:
- •❌ Skip internal testing
- •❌ Add everyone to all tracks
- •❌ Ignore tester feedback
- •❌ Leave broken builds in testing
- •❌ Forget to thank your testers
- •❌ Use production track for testing
Track Selection Guide
Use Internal when:
- •Initial feature testing
- •Testing with dev/QA team only
- •Need instant access
- •< 100 testers
Use Closed when:
- •Broader beta testing
- •Need > 100 testers
- •Want named beta groups
- •Testing with customers
Use Open when:
- •Public beta program
- •Want maximum reach
- •Community testing
- •Pre-launch buzz
Communication with Testers
Release notes for testers
Include in app update:
code
Version 1.2.3 (Beta) What's New: - New feature X (please test thoroughly) - Bug fixes for Y Known Issues: - Feature Z is work in progress - Crash on Android 12 is being investigated Please report issues to: beta@example.com
Feedback collection
- •In-app feedback button
- •Dedicated Slack/Discord channel
- •Email address
- •Survey form
This helps you improve before production release!