# Get started > Examples

# Artillery Examples

Artillery comes with a lot of examples of common scenarios to help you get started. If you'd like to see an example that's not covered here, please [open a discussion](https://github.com/artilleryio/artillery/discussions/new?category=artillery).

## Fundamentals

| Name | Description |
| ---- | ----------- |
| [Automated checks](https://github.com/artilleryio/artillery/blob/main/examples/automated-checks/load-test-with-automated-checks.yml) | Make your tests actionable by using the `apdex`, `ensure` and `expect` plugins. |
| [Reuse load tests as functional tests](https://github.com/artilleryio/artillery/blob/main/examples/functional-testing-with-expect-plugin/functional-load-tests.yml) | Reuse performance tests as functional tests by using the `expect` plugin. |
| [Scenario weights](https://github.com/artilleryio/artillery/tree/main/examples/scenario-weights) | Use scenario weights to recreate real-world patterns by controlling the distribution of VUs across different scenarios. |
| [Test data using CSV](https://github.com/artilleryio/artillery/tree/main/examples/using-data-from-csv) | Use test data from CSV files in load tests. |
| [Test data using Redis](https://github.com/artilleryio/artillery/tree/main/examples/using-data-from-redis) | Make test data uniquely available to each VU in distributed load tests by using Redis. |
| [Table-driven functional tests](https://github.com/artilleryio/artillery/tree/main/examples/table-driven-functional-tests) | Reduce duplication in functional tests by using a table-driven approach. |
| [Organize multiple scenarios](https://github.com/artilleryio/artillery/tree/main/examples/multiple-scenario-specs) | Organize scenarios into multiple files with a shared config for better maintainability |
| [Dynamic values in scripts](https://github.com/artilleryio/artillery/tree/main/examples/script-overrides) | Use dynamic values in test scripts with environment variables. |

## Browser-based load tests with Playwright

| Name | Description |
| ---- | ----------- |
| [Playwright load testing](https://github.com/artilleryio/artillery/tree/main/examples/browser-load-testing-playwright) | Run load tests of your web app using Artillery and Playwright. |
| [Track timings of steps](https://github.com/artilleryio/artillery/tree/main/examples/browser-load-testing-playwright) | Automatically track performance timings for the various steps in your tests. |
| [Reuse Playwright Test Runner tests](https://github.com/artilleryio/artillery/tree/main/examples/browser-playwright-reuse-typescript) | Reuse a pure Playwright codebase written in TypeScript as Artillery tests. |
| [Reuse authentication](https://github.com/artilleryio/artillery/tree/main/examples/browser-playwright-reuse-authentication) | Log in once and reuse authentication in Artillery Playwright tests with `sessionStorage`. |

## HTTP performance testing

| Name | Description |
| ---- | ----------- |
| [Generating API tokens](https://github.com/artilleryio/artillery/tree/main/examples/generating-vu-tokens) | Generate unique API tokens for each VU or reuse a shared token for all VUs. |
| [Refresh auth token](https://github.com/artilleryio/artillery/tree/main/examples/refresh-auth-token) | Automatically refresh short-lived authentication tokens during load tests. |
| [Set custom header](https://github.com/artilleryio/artillery/tree/main/examples/http-set-custom-header) | Set a custom header in HTTP requests. |
| [Cookies](https://github.com/artilleryio/artillery/tree/main/examples/using-cookies) | Use cookies in HTTP requests. |
| [GraphQL](https://github.com/artilleryio/artillery/tree/main/examples/graphql-api-server) | Load test a GraphQL API server. |

## Other protocols

| Name | Description |
| ---- | ----------- |
| [Socket.io](https://github.com/artilleryio/artillery/tree/main/examples/socket-io) | Load test a Socket.io server with Artillery's Socket.io engine. |
| [Socket.io with HTTP](https://github.com/artilleryio/artillery/tree/main/examples/http-socketio-server) | Mix HTTP and Socket.io requests in your load test with Artillery's Socket.io engine. |
| [WebSocket](https://github.com/artilleryio/artillery/tree/main/examples/websockets) | Load test a WebSocket server with Artillery's WebSocket engine. |
| [SOAP](https://github.com/artilleryio/artillery/tree/main/examples/soap-with-custom-function) | Load test a SOAP server by leveraging Artillery's custom functions.|

## Extensibility and Integrations

| Name | Description |
| ---- | ----------- |
| [Track custom metrics](https://github.com/artilleryio/artillery/tree/main/examples/track-custom-metrics) | Create custom metrics to track domain-specific parts of your system. |
| [Custom engine](https://github.com/artilleryio/artillery/tree/main/examples/artillery-engine-example) | Create a custom engine for more advanced or domain-specific requirements. |
| [Custom plugin](https://github.com/artilleryio/artillery/tree/main/examples/artillery-plugin-hello-world) | Create a custom plugin for your specific use case. |
| [Tracetest](https://github.com/artilleryio/artillery/tree/main/examples/tracetest) | Use the `tracetest` plugin to assert on your system's distributed traces using [Tracetest](https://tracetest.io/). |

## CI/CD

| Name | Description |
| ---- | ----------- |
| [Run load tests in parallel on GitHub Actions](https://github.com/artilleryio/example-parallel-github-actions-tests) | Run multiple tests in parallel with a matrix strateg on GitHub Actions. |
