--- title: "Getting Started with Test Architect" description: Learn Test Architect fundamentals by generating and running tests for an existing demo app in 30 minutes --- Welcome! **Test Architect (TEA) Lite** is the simplest way to get started with TEA - just use `*automate` to generate tests for existing features. Perfect for beginners who want to learn TEA fundamentals quickly. ## What You'll Build By the end of this 30-minute tutorial, you'll have: - A working Playwright test framework - Your first risk-based test plan - Passing tests for an existing demo app feature :::note[Prerequisites] - Node.js installed (v20 or later) - 30 minutes of focused time - We'll use TodoMVC () as our demo app ::: :::tip[Quick Path] Load TEA (`*tea`) → scaffold framework (`*framework`) → create test plan (`*test-design`) → generate tests (`*automate`) → run with `npx playwright test`. ::: ## TEA Approaches Explained Before we start, understand the three ways to use TEA: - **TEA Lite** (this tutorial): Beginner using just `*automate` to test existing features - **TEA Solo**: Using TEA standalone without full BMad Method integration - **TEA Integrated**: Full BMad Method with all TEA workflows across phases This tutorial focuses on **TEA Lite** - the fastest way to see TEA in action. ## Step 0: Setup (2 minutes) We'll test TodoMVC, a standard demo app used across testing documentation. **Demo App:** No installation needed - TodoMVC runs in your browser. Open the link above and: 1. Add a few todos (type and press Enter) 2. Mark some as complete (click checkbox) 3. Try the "All", "Active", "Completed" filters You've just explored the features we'll test! ## Step 1: Install BMad and Scaffold Framework (10 minutes) ### Install BMad Method Install BMad (see installation guide for latest command). When prompted: - **Select modules:** Choose "BMM: BMad Method" (press Space, then Enter) - **Project name:** Keep default or enter your project name - **Experience level:** Choose "beginner" for this tutorial - **Planning artifacts folder:** Keep default - **Implementation artifacts folder:** Keep default - **Project knowledge folder:** Keep default - **Enable TEA Playwright Model Context Protocol (MCP) enhancements?** Choose "No" for now (we'll explore this later) - **Using playwright-utils?** Choose "No" for now (we'll explore this later) BMad is now installed! You'll see a `_bmad/` folder in your project. ### Load TEA Agent Start a new chat with your AI assistant (Claude, etc.) and type: ``` *tea ``` This loads the Test Architect agent. You'll see TEA's menu with available workflows. ### Scaffold Test Framework In your chat, run: ``` *framework ``` TEA will ask you questions: **Q: What's your tech stack?** A: "We're testing a React web application (TodoMVC)" **Q: Which test framework?** A: "Playwright" **Q: Testing scope?** A: "End-to-end (E2E) testing for a web application" **Q: Continuous integration/continuous deployment (CI/CD) platform?** A: "GitHub Actions" (or your preference) TEA will generate: - `tests/` directory with Playwright config - `playwright.config.ts` with base configuration - Sample test structure - `.env.example` for environment variables - `.nvmrc` for Node version **Verify the setup:** ```bash npm install npx playwright install ``` You now have a production-ready test framework! ## Step 2: Your First Test Design (5 minutes) Test design is where TEA shines - risk-based planning before writing tests. ### Run Test Design In your chat with TEA, run: ``` *test-design ``` **Q: System-level or epic-level?** A: "Epic-level - I want to test TodoMVC's basic functionality" **Q: What feature are you testing?** A: "TodoMVC's core operations - creating, completing, and deleting todos" **Q: Any specific risks or concerns?** A: "We want to ensure the filter buttons (All, Active, Completed) work correctly" TEA will analyze and create `test-design-epic-1.md` with: 1. **Risk Assessment** - Probability × Impact scoring - Risk categories (TECH, SEC, PERF, DATA, BUS, OPS) - High-risk areas identified 2. **Test Priorities** - P0: Critical path (creating and displaying todos) - P1: High value (completing todos, filters) - P2: Medium value (deleting todos) - P3: Low value (edge cases) 3. **Coverage Strategy** - E2E tests for user workflows - Which scenarios need testing - Suggested test structure **Review the test design file** - notice how TEA provides a systematic approach to what needs testing and why. ## Step 3: Generate Tests for Existing Features (5 minutes) Now the magic happens - TEA generates tests based on your test design. ### Run Automate In your chat with TEA, run: ``` *automate ``` **Q: What are you testing?** A: "TodoMVC React app at - focus on the test design we just created" **Q: Reference existing docs?** A: "Yes, use test-design-epic-1.md" **Q: Any specific test scenarios?** A: "Cover the P0 and P1 scenarios from the test design" TEA will generate: **`tests/e2e/todomvc.spec.ts`** with tests like: ```typescript import { test, expect } from '@playwright/test'; test.describe('TodoMVC - Core Functionality', () => { test.beforeEach(async ({ page }) => { await page.goto('https://todomvc.com/examples/react/dist/'); }); test('should create a new todo', async ({ page }) => { // TodoMVC uses a simple input without placeholder or test IDs const todoInput = page.locator('.new-todo'); await todoInput.fill('Buy groceries'); await todoInput.press('Enter'); // Verify todo appears in list await expect(page.locator('.todo-list li')).toContainText('Buy groceries'); }); test('should mark todo as complete', async ({ page }) => { // Create a todo const todoInput = page.locator('.new-todo'); await todoInput.fill('Complete tutorial'); await todoInput.press('Enter'); // Mark as complete using the toggle checkbox await page.locator('.todo-list li .toggle').click(); // Verify completed state await expect(page.locator('.todo-list li')).toHaveClass(/completed/); }); test('should filter todos by status', async ({ page }) => { // Create multiple todos const todoInput = page.locator('.new-todo'); await todoInput.fill('Buy groceries'); await todoInput.press('Enter'); await todoInput.fill('Write tests'); await todoInput.press('Enter'); // Complete the first todo ("Buy groceries") await page.locator('.todo-list li .toggle').first().click(); // Test Active filter (shows only incomplete todos) await page.locator('.filters a[href="#/active"]').click(); await expect(page.locator('.todo-list li')).toHaveCount(1); await expect(page.locator('.todo-list li')).toContainText('Write tests'); // Test Completed filter (shows only completed todos) await page.locator('.filters a[href="#/completed"]').click(); await expect(page.locator('.todo-list li')).toHaveCount(1); await expect(page.locator('.todo-list li')).toContainText('Buy groceries'); }); }); ``` TEA also creates: - **`tests/README.md`** - How to run tests, project conventions - **Definition of Done summary** - What makes a test "good" ### With Playwright Utils (Optional Enhancement) If you have `tea_use_playwright_utils: true` in your config, TEA generates tests using production-ready utilities: **Vanilla Playwright:** ```typescript test('should mark todo as complete', async ({ page, request }) => { // Manual API call const response = await request.post('/api/todos', { data: { title: 'Complete tutorial' } }); const todo = await response.json(); await page.goto('/'); await page.locator(`.todo-list li:has-text("${todo.title}") .toggle`).click(); await expect(page.locator('.todo-list li')).toHaveClass(/completed/); }); ``` **With Playwright Utils:** ```typescript import { test } from '@seontechnologies/playwright-utils/api-request/fixtures'; import { expect } from '@playwright/test'; test('should mark todo as complete', async ({ page, apiRequest }) => { // Typed API call with cleaner syntax const { status, body: todo } = await apiRequest({ method: 'POST', path: '/api/todos', body: { title: 'Complete tutorial' } }); expect(status).toBe(201); await page.goto('/'); await page.locator(`.todo-list li:has-text("${todo.title}") .toggle`).click(); await expect(page.locator('.todo-list li')).toHaveClass(/completed/); }); ``` **Benefits:** - Type-safe API responses (`{ status, body }`) - Automatic retry for 5xx errors - Built-in schema validation - Cleaner, more maintainable code See [Integrate Playwright Utils](/docs/how-to/customization/integrate-playwright-utils.md) to enable this. ## Step 4: Run and Validate (5 minutes) Time to see your tests in action! ### Run the Tests ```bash npx playwright test ``` You should see: ``` Running 3 tests using 1 worker ✓ tests/e2e/todomvc.spec.ts:7:3 › should create a new todo (2s) ✓ tests/e2e/todomvc.spec.ts:15:3 › should mark todo as complete (2s) ✓ tests/e2e/todomvc.spec.ts:30:3 › should filter todos by status (3s) 3 passed (7s) ``` All green! Your tests are passing against the existing TodoMVC app. ### View Test Report ```bash npx playwright show-report ``` Opens a beautiful HTML report showing: - Test execution timeline - Screenshots (if any failures) - Trace viewer for debugging ### What Just Happened? You used **TEA Lite** to: 1. Scaffold a production-ready test framework (`*framework`) 2. Create a risk-based test plan (`*test-design`) 3. Generate comprehensive tests (`*automate`) 4. Run tests against an existing application All in 30 minutes! ## What You Learned Congratulations! You've completed the TEA Lite tutorial. You learned: ### Quick Reference | Command | Purpose | | -------------- | ------------------------------------ | | `*tea` | Load the TEA agent | | `*framework` | Scaffold test infrastructure | | `*test-design` | Risk-based test planning | | `*automate` | Generate tests for existing features | ### TEA Principles - **Risk-based testing** - Depth scales with impact (P0 vs P3) - **Test design first** - Plan before generating - **Network-first patterns** - Tests wait for actual responses (no hard waits) - **Production-ready from day one** - Not toy examples :::tip[Key Takeaway] TEA Lite (just `*automate`) is perfect for beginners learning TEA fundamentals, testing existing applications, quick test coverage expansion, and teams wanting fast results. ::: ## Understanding ATDD vs Automate This tutorial used `*automate` to generate tests for **existing features** (tests pass immediately). **When to use `*automate`:** - Feature already exists - Want to add test coverage - Tests should pass on first run **When to use `*atdd` (Acceptance Test-Driven Development):** - Feature doesn't exist yet (Test-Driven Development workflow) - Want failing tests BEFORE implementation - Following red → green → refactor cycle See [How to Run ATDD](/docs/how-to/workflows/run-atdd.md) for the test-drive development (TDD) approach. ## Next Steps ### Level Up Your TEA Skills **How-To Guides** (task-oriented): - [How to Run Test Design](/docs/how-to/workflows/run-test-design.md) - Deep dive into risk assessment - [How to Run ATDD](/docs/how-to/workflows/run-atdd.md) - Generate failing tests first (TDD) - [How to Set Up CI Pipeline](/docs/how-to/workflows/setup-ci.md) - Automate test execution - [How to Review Test Quality](/docs/how-to/workflows/run-test-review.md) - Audit test quality **Explanation** (understanding-oriented): - [TEA Overview](/docs/explanation/features/tea-overview.md) - Complete TEA capabilities - [Testing as Engineering](/docs/explanation/philosophy/testing-as-engineering.md) - **Why TEA exists** (problem + solution) - [Risk-Based Testing](/docs/explanation/tea/risk-based-testing.md) - How risk scoring works **Reference** (quick lookup): - [TEA Command Reference](/docs/reference/tea/commands.md) - All 8 TEA workflows - [TEA Configuration](/docs/reference/tea/configuration.md) - Config options - [Glossary](/docs/reference/glossary/index.md) - TEA terminology ### Try TEA Solo Ready for standalone usage without full BMad Method? Use TEA Solo: - Run any TEA workflow independently - Bring your own requirements - Use on non-BMad projects See [TEA Overview](/docs/explanation/features/tea-overview.md) for engagement models. ### Go Full TEA Integrated Want the complete quality operating model? Try TEA Integrated with BMad Method: - Phase 2: Planning with non-functional requirements (NFR) assessment - Phase 3: Architecture testability review - Phase 4: Per-epic test design → ATDD → automate - Release Gate: Coverage traceability and gate decisions See [BMad Method Documentation](/) for the full workflow. ## Common Questions - [Why can't my tests find elements?](#why-cant-my-tests-find-elements) - [How do I fix network timeouts?](#how-do-i-fix-network-timeouts) ### Why can't my tests find elements? TodoMVC doesn't use test IDs or accessible roles consistently. The selectors in this tutorial use CSS classes that match TodoMVC's actual structure: ```typescript // TodoMVC uses these CSS classes: page.locator('.new-todo') // Input field page.locator('.todo-list li') // Todo items page.locator('.toggle') // Checkbox // If testing your own app, prefer accessible selectors: page.getByRole('textbox') page.getByRole('listitem') page.getByRole('checkbox') ``` In production code, use accessible selectors (`getByRole`, `getByLabel`, `getByText`) for better resilience. TodoMVC is used here for learning, not as a selector best practice example. ### How do I fix network timeouts? Increase timeout in `playwright.config.ts`: ```typescript use: { timeout: 30000, // 30 seconds } ``` ## Getting Help - **Documentation:** - **GitHub Issues:** - **Discord:** Join the BMAD community