level 09 / cloud-grids

Cloud Testing Grids

Run Playwright tests at scale on BrowserStack, LambdaTest, and Sauce Labs cloud grids.

practice site: BrowserStack Automate

What Are Cloud Testing Grids?

Cloud grids provide remote browsers — you run your test code locally or in CI, and the grid executes it in a cloud browser (real device or VM). Benefits:

  • Hundreds of browser/OS combinations
  • Real devices (iOS, Android, physical hardware)
  • No infrastructure to maintain
  • Parallel execution at scale
  • Automatic video, screenshots, and logs

Cloud Grid Comparison

BrowserStackLambdaTestSauce Labs
Playwright support✅ Native CDPv2✅ Native✅ Saucectl
Real devices✅ Extensive✅ Good✅ Good
Free tier100 min/month100 min/month2000 min free trial
ParallelismUp to 25Up to 25Up to 50
Tunnel (localhost)✅ BrowserStack Local✅ LT Tunnel✅ Sauce Connect

BrowserStack with Playwright

// playwright.config.ts
import { defineConfig } from '@playwright/test';

const caps = {
  browser: 'chrome',
  browser_version: 'latest',
  os: 'Windows',
  os_version: '11',
  name: 'Playwright BrowserStack Test',
  build: process.env.GITHUB_RUN_ID ?? 'local',
  'browserstack.username': process.env.BROWSERSTACK_USERNAME,
  'browserstack.accessKey': process.env.BROWSERSTACK_ACCESS_KEY,
};

export default defineConfig({
  projects: [{
    name: 'browserstack-chrome',
    use: {
      connectOptions: {
        wsEndpoint: `wss://cdp.browserstack.com/playwright?caps=${encodeURIComponent(JSON.stringify(caps))}`,
      },
    },
  }],
});
# Run on BrowserStack
BROWSERSTACK_USERNAME=user BROWSERSTACK_ACCESS_KEY=key \
  npx playwright test --project=browserstack-chrome

LambdaTest with Playwright

const capabilities = {
  browserName: 'Chrome',
  browserVersion: 'latest',
  'LT:Options': {
    platform: 'Windows 11',
    project: 'Playwright Guide',
    build: 'Wave 9',
    name: 'LambdaTest Test',
    user: process.env.LT_USERNAME,
    accessKey: process.env.LT_ACCESS_KEY,
    network: true,
    video: true,
    visual: true,
  },
};

export default defineConfig({
  projects: [{
    name: 'lambdatest',
    use: {
      connectOptions: {
        wsEndpoint: `wss://cdp.lambdatest.com/playwright?capabilities=${encodeURIComponent(JSON.stringify(capabilities))}`,
      },
    },
  }],
});

Testing Against Localhost (Tunnel)

Cloud grids can’t reach your localhost — use a tunnel:

# BrowserStack Local
./BrowserStackLocal --key $BROWSERSTACK_ACCESS_KEY --daemon start

# LambdaTest Tunnel
./LT --user $LT_USERNAME --key $LT_ACCESS_KEY --tunnelName myTunnel --daemon

# In capabilities: enable tunnel
'browserstack.local': true
# or
'LT:Options': { tunnel: true, tunnelName: 'myTunnel' }

Multi-Browser Matrix

// playwright.config.ts — test across browsers on BrowserStack
const bsBase = {
  connectOptions: { wsEndpoint: bsEndpoint(caps) },
};

export default defineConfig({
  projects: [
    { name: 'bs-chrome-win', use: { ...bsBase, ...caps('chrome', 'Windows 11') } },
    { name: 'bs-firefox-win', use: { ...bsBase, ...caps('firefox', 'Windows 11') } },
    { name: 'bs-safari-mac', use: { ...bsBase, ...caps('safari', 'OS X Ventura') } },
    { name: 'bs-edge-win', use: { ...bsBase, ...caps('edge', 'Windows 11') } },
  ],
});

When to Use Cloud Grids vs Local/CI

ScenarioUse cloud grid
Cross-browser validation✅ Yes
Real device testing (iOS/Android)✅ Yes
Legacy browser (IE11, old Safari)✅ Yes
Regression suite (smoke tests)❌ Too slow/expensive — run locally
CI smoke tests❌ Use Docker/GitHub Actions
Visual regression✅ Yes (built-in visual testing)