> ## Documentation Index
> Fetch the complete documentation index at: https://www.checklyhq.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Browser Check Structure

> Learn how to structure your Browser Checks with Monitoring as Code.

Monitoring as Code works by connecting Playwrighttest files with Checkly constructs to handle the end-to-endconfiguration of your Browser Check.

## Browser Check Construct

The Browser Check construct is used to configure your monitoring settings, such as frequency, locations, and tags. Learn more about the [Browser Check Construct](/docs/constructs/browser-check)

```ts browser-check.ts theme={null}
import { BrowserCheck, Frequency } from 'checkly/constructs'
import * as path from 'path'

new BrowserCheck('browser-check-1', {
  name: 'Browser check #1',
  frequency: Frequency.EVERY_10M,
  locations: ['us-east-1', 'eu-west-1'],
  code: {
    entrypoint: path.join(__dirname, 'login.spec.js')
  }
})
```

## Test Script Structure

Checkly uses Playwright to power Browser Checks. [Playwright](https://playwright.dev/docs/intro) is a robust, open-source framework for browser automation and end-to-end web application testing. It enables you to write atomic, reliable tests and easily control interactions within a web page. Browser checks execute automated test scripts in real browsers.

```typescript login.spec.ts theme={null}
// Use environment-specific URLs and credentials
const baseURL = process.env.BASE_URL || 'https://app.example.com'
const testUser = process.env.TEST_USER_EMAIL
const testPassword = process.env.TEST_USER_PASSWORD

test('Environment-aware test', async ({ page }) => {
  await page.goto(`${baseURL}/login`)
  await page.fill('[name="email"]', testUser)
  await page.fill('[name="password"]', testPassword)
  // ... rest of test
})
```

## Environment variables

[Check, group and global variables](/docs/platform/variables) are accessible in your code using the standard Node.js `process.env.MY_VAR` notation. For example, the code snippet below show how you can log into GitHub.

<CodeGroup dropdown>
  ```ts variables.spec.ts theme={null}
  import { test } from '@playwright/test'

  test('GitHub login', async ({ page }) => {
    await page.goto('https://github.com/login')
    await page.getByLabel('Username or email address').type(process.env.GITHUB_USER)
    await page.getByLabel('Password').type(process.env.GITHUB_PWD)
    await page.getByRole('button', { name: 'Sign in' }).click()
  })
  ```

  ```js variables.spec.js theme={null}
  const { test } = require('@playwright/test')

  test('GitHub login', async ({ page }) => {
    await page.goto('https://github.com/login')
    await page.getByLabel('Username or email address').type(process.env.GITHUB_USER)
    await page.getByLabel('Password').type(process.env.GITHUB_PWD)
    await page.getByRole('button', { name: 'Sign in' }).click()
  })
  ```
</CodeGroup>

### Built-in runtime variables

Our [check runtimes](/docs/platform/runtimes/overview/) also expose a set of environment variables (e.g. `process.env.CHECK_NAME`)
to figure out what check, check type etc. you are running.

| Variable           | Description                                                                                                                | Availability                                                                                                                                                      |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ACCOUNT_ID`       | The ID of the account the check belongs to.                                                                                |                                                                                                                                                                   |
| `CHECK_ID`         | The UUID of the check being executed.                                                                                      | Only available after saving the check.                                                                                                                            |
| `CHECK_NAME`       | The name of the check being executed.                                                                                      |                                                                                                                                                                   |
| `CHECK_RESULT_ID`  | The UUID where the result will be saved.                                                                                   | Only available on scheduled runs.                                                                                                                                 |
| `CHECK_RUN_ID`     | The UUID of the check run execution.                                                                                       | Only available on scheduled runs.                                                                                                                                 |
| `CHECK_TYPE`       | The type of the check, e.g. `BROWSER`.                                                                                     |                                                                                                                                                                   |
| `CHECKLY_TRACE_ID` | The OpenTelemetry trace ID of the check run. Use it to correlate the run with the trace in your own observability backend. | Only in Browser and Multistep checks and API setup & teardown scripts, and only when [Traces](/docs/resolve/traces/overview) is active for the check; unset otherwise. |
| `PUBLIC_IP_V4`     | The IPv4 of the check run execution.                                                                                       |                                                                                                                                                                   |
| `PUBLIC_IP_V6`     | The IPv6 of the check run execution.                                                                                       |                                                                                                                                                                   |
| `REGION`           | The current region, e.g. `us-west-1`.                                                                                      |                                                                                                                                                                   |
| `RUNTIME_VERSION`  | The version of the runtime, e.g, `2023.09`.                                                                                | Only in Browser, Multistep, and API setup/teardown scripts.                                                                                                       |
