e2e-testing
Playwright E2E 테스트 패턴, 페이지 오브젝트 모델(POM), 구성, CI/CD 통합, 아티팩트 관리 및 플래키(flaky) 테스트 전략.
Skill by kypo42
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/kypo42-e2e-testing
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: testing, devops
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/e2e-testing
What's inside
- Skill name
e2e-testing- Description
- Playwright E2E 테스트 패턴, 페이지 오브젝트 모델(POM), 구성, CI/CD 통합, 아티팩트 관리 및 플래키(flaky) 테스트 전략.
- License
- MIT
- Instructions
- 322 lines in SKILL.md · view on GitHub
Files (2)
- SKILL.md
- openai.yaml · agents/
SKILL.md (first lines)
# E2E 테스트 패턴 (E2E Testing Patterns)
안정적이고 빠르며 유지보수가 쉬운 E2E 테스트 스위트를 구축하기 위한 포괄적인 Playwright 패턴입니다.
## 테스트 파일 구성
```
tests/
├── e2e/
│ ├── auth/
│ │ ├── login.spec.ts
│ │ ├── logout.spec.ts
│ │ └── register.spec.ts
│ ├── features/
│ │ ├── browse.spec.ts
│ │ ├── search.spec.ts
│ │ └── create.spec.ts
│ └── api/
│ └── endpoints.spec.ts
├── fixtures/
│ ├── auth.ts
│ └── data.ts
└── playwright.config.ts
```
## 페이지 오브젝트 모델 (Page Object Model, POM)
```typescript
import { Page, Locator } from '@playwright/test'
export class ItemsPage {
readonly page: Page
readonly searchInput: Locator
readonly itemCards: Locator
readonly createButton: Locator
constructor(page: Page) {
this.page = page
this.searchInput = page.locator('[data-testid="search-input"]')
this.itemCards = page.locator('[data-testid="item-card"]')
this.createButton = page.locator('[data-testid="create-btn"]')
}
async goto() {
await this.page.goto('/items')
await this.page.waitForLoadState('networkidle')
}
async search(query: string) {
await this.searchInput.fill(query)
await this.page.waitForResponse(resp => resp.url().includes('/api/search'))
await this.page.waitForLoadState('networkidle')
}
async getItemCount() {
return await this.itemCards.count()
}
}
```
## 테스트 구조
```typescript
import { test, expect } from '@playwright/test'
import { ItemsPage } from '../../pages/ItemsPage'
test.describe('아이템 검색', () => {
let itemsPage: ItemsPage
test.beforeEach(async ({ page }) => {
itemsPage = new ItemsPage(page)
await itemsPage.goto()
})
test('키워드로 검색해야 함', async ({ page }) => {
await itemsPage.search('test')
const count = await itemsPage.getItemCount()
expect(count).toBeGreaterThan(0)
await expect(itemsPage.itemCards.first()).toContainText(/test/i)
await page.screenshot({ path: 'artifacts/search-results.png' })
})
test('결과가 없을 때를 처리해야 함', async ({ page }) => {
await itemsPage.search('xyznonexistent123')
await expect(page.locator('[data-testid="no-results"]')).toBeVisible()
expect(await itemsPage.getItemCount()).toBe(0)
})
})
```
## Playwright 구성 (Configuration)
```typescript
import { defineConfig, devices } from '@playwright/test'
export default defineConfig({
testDir: './tests/e2e',
fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
workers: process.env.CI ? 1 : undefined,
reporter: [
['html', { outputFolder: 'playwright-report' }],
['junit', { outputFile: 'playwright-results.xml' }],
['json', { outputFile: 'playwright-results.json' }]
],
use: {
baseURL: process.env.BASE_URL || 'http://localhost:3000',
trace: 'on-first-retry',
screenshot: 'only-on-failure',
video: 'retain-on-failure',
actionTimeout: 10000,
navigationTimeout: 30000,
},
projects: [
{ name: 'chromium', use: { ...devices['Desktop Chrome'] } },From kypo42/everything-claude-code-kr, MIT.
More from kypo42/everything-claude-code-kr
- 0.434score
brand-voice
kypo42
실제 게시물, 에세이, 런칭 노트, 문서 또는 사이트 문구에서 소스 유래 글쓰기 스타일 프로필을 작성한 다음, 해당 프로필을 콘텐츠, 아웃리치 및 소셜 워크플로우 전반에서 재사용합니다.
SkillDFreshness: D★ 1Claude Code +9 - 0.429score
article-writing
kypo42
제공된 예시나 브랜드 가이드에서 추출한 독특한 목소리로 아티클, 가이드, 블로그 포스트, 튜토리얼, 뉴스레터 및 기타 긴 형식의 콘텐츠를 작성합니다.
SkillDFreshness: D★ 1Claude Code +9 - 0.429score
dmux-workflows
kypo42
dmux(AI 에이전트용 tmux 창 관리자)를 사용한 다중 에이전트 오케스트레이션.
SkillDFreshness: D★ 1Claude Code +9 - 0.429score
agent-sort
kypo42
기술, 명령어, 규칙, 훅 및 기타 요소를 DAILY 대 LIBRARY 버킷으로 분류하여 특정 저장소에 대한 증거 기반의 ECC 설치 계획을 수립합니다.
SkillDFreshness: D★ 1Claude Code +9 - 0.429score
claude-api
kypo42
Python 및 TypeScript를 위한 Anthropic Claude API 패턴.
SkillDFreshness: D★ 1Claude Code +9 - 0.429score
content-engine
kypo42
X, LinkedIn, TikTok, YouTube, 뉴스레터 및 멀티 플랫폼 캠페인을 위한 플랫폼 네이티브 콘텐츠 시스템을 구축합니다.
SkillDFreshness: D★ 1Claude Code +9 - 0.429score
crosspost
kypo42
X, LinkedIn, Threads 및 Bluesky에 걸친 멀티 플랫폼 콘텐츠 배포.
SkillDFreshness: D★ 1Claude Code +9 - 0.429score
deep-research
kypo42
firecrawl 및 exa MCP를 사용한 다중 소스 심층 조사.
SkillDFreshness: D★ 1Claude Code +9 - 0.429score
documentation-lookup
kypo42
학습 데이터 대신 Context7 MCP를 통해 최신 라이브러리 및 프레임워크 문서를 사용합니다.
SkillDFreshness: D★ 1Claude Code +9 - 0.429score
fal-ai-media
kypo42
fal.ai MCP를 통한 통합 미디어 생성 — 이미지, 비디오 및 오디오.
SkillDFreshness: D★ 1Claude Code +9 - 0.426score
bun-runtime
kypo42
런타임, 패키지 관리자, 번들러 및 테스트 러너로서의 Bun.
SkillDFreshness: D★ 1Claude Code +9 - 0.426score
exa-search
kypo42
웹, 코드 및 회사 조사를 위한 Exa MCP를 통한 신경망 검색.
SkillDFreshness: D★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Apr 12, 2026 (6 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from kypo42
- 0.434score
brand-voice
kypo42
실제 게시물, 에세이, 런칭 노트, 문서 또는 사이트 문구에서 소스 유래 글쓰기 스타일 프로필을 작성한 다음, 해당 프로필을 콘텐츠, 아웃리치 및 소셜 워크플로우 전반에서 재사용합니다.
SkillDFreshness: D★ 1Claude Code +9 - 0.429score
dmux-workflows
kypo42
dmux(AI 에이전트용 tmux 창 관리자)를 사용한 다중 에이전트 오케스트레이션.
SkillDFreshness: D★ 1Claude Code +9 - 0.429score
article-writing
kypo42
제공된 예시나 브랜드 가이드에서 추출한 독특한 목소리로 아티클, 가이드, 블로그 포스트, 튜토리얼, 뉴스레터 및 기타 긴 형식의 콘텐츠를 작성합니다.
SkillDFreshness: D★ 1Claude Code +9 - 0.429score
agent-sort
kypo42
기술, 명령어, 규칙, 훅 및 기타 요소를 DAILY 대 LIBRARY 버킷으로 분류하여 특정 저장소에 대한 증거 기반의 ECC 설치 계획을 수립합니다.
SkillDFreshness: D★ 1Claude Code +9 - 0.429score
claude-api
kypo42
Python 및 TypeScript를 위한 Anthropic Claude API 패턴.
SkillDFreshness: D★ 1Claude Code +9 - 0.429score
content-engine
kypo42
X, LinkedIn, TikTok, YouTube, 뉴스레터 및 멀티 플랫폼 캠페인을 위한 플랫폼 네이티브 콘텐츠 시스템을 구축합니다.
SkillDFreshness: D★ 1Claude Code +9
Cite this page
e2e-testing skill. Agent Mart. https://agentmart.dev/skills/kypo42-e2e-testing (last updated 2026-10-24)