E2E ํ ์คํธ๋ ?
E2E ํ ์คํธ๋ ? E2E ํ ์คํธ ๊ณผ์ ์์๋ ์ค์ ์ฌ์ฉ์์ ์๋๋ฆฌ์ค๋ฅผ ํ ์คํธํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์ ๋์์ ํ ์คํธํ๊ฒ๋๊ณ ,๋ํ ํ๋ก ํธ์๋์์ OS์ ๋ธ๋ผ์ฐ์ ์์ง ํ๊ฒฝ์ด ๋ฌ๋ผ์ ๋ฐ์ํ๋ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง ์ด์๋ฅผ E2E ํ ์คํธ๋ฅผ ํตํด ๋ฏธ๋ฆฌ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
์ด ํ ์คํธ๋ฅผ ํต๊ณผํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฌด๊ฒฐ์ฑ์ ์ฆ๋ช ํ ์ ์๊ฒ ๋ฉ๋๋ค.E2E ํ ์คํธ๋ End To End์ ์ฝ์๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ฆ์ ์ฒ์๋ถํฐ ๋๊น์ง ํ ์คํธํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
React ์์์ ํ ์คํ ๋๊ตฌ ?
React ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ํ ์คํ ๋๊ตฌ๋ cypress๋ค.
ํ์ง๋ง ์์ฆ์ playwright ๊ฐ ๋จ๊ธฐ ์์ํ๋ฉด์ ์ฐพ์๋ณด๋ cypress์์ playwright ๋ก ์ฎ๊ธฐ๋ ๊ฐ๋ฐ์๋ค๋ ๋๊ณ ์๋ ๊ฒ ๊ฐ๋ค.
Cypress์ ์ฅ์ ์ผ๋ก๋ ์ฌ์ฉ๋ฒ์ด ์ง๊ด์ ์ด๊ณ ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ถ์ด ์ฌ์ฐ๋ฉฐ ,ํ ์คํธ ๊ณผ์ ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์ธ ๊ฐ๋ฅํ์ฌ ๋๋ฒ๊น ์ด ์ฉ์ดํ๋ค.
๋ํ ์ปค๋ฎค๋ํฐ๊ฐ ๊ฐ์ฅ ํ๋ฐํ ํ๋ ์์ํฌ๋ผ์ ๋ด๋ถ์ ์ธ ์ง์์ด ์๋๋ ๊ธฐ๋ฅ์ด๋ผ๋ ๋ค์ํ ํ๋ฌ๊ทธ์ธ์ ํตํด์ ๊ตฌ์ถ์ด ๊ฐ๋ฅํฉ๋๋ค.
๊ทธ๋ฌ๋, ๋จ์ ์ผ๋ก๋ ๋ชจ๋ ํ ์คํธ๊ฐ ์ง๋ ฌ๋ก ์คํ๋๋ฏ๋ก ํ ์คํธ์ ๊ฐฏ์๊ฐ ์ฆ๊ฐํ ์๋ก ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ ์ ๊ณผ
( ๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ๊ฒฝ์ฐ ์ ๋ฃ ํ๋ & ์ธ๋ถ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํด์ ํ ์คํธ ์๋ ๋ณด์ ๊ฐ๋ฅํ์ง๋ง ์ธ๋ถ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ ๋งํผ ๋ฒ๊ฑฐ๋ก์ด ์ค์ ํ์ )
ํฌ๋ก๋ฏธ์ ๊ธฐ๋ฐ์ ๋ธ๋ผ์ฐ์ , Firefox 2๊ฐ์ง์ ๋ธ๋ผ์ฐ์ ๋ง ์ง์ํ๋ฉฐ, ๋ชจ๋ฐ์ผ ํ๊ฒฝ์ ์ ๊ณตํ์ง ์๋๋ค๋ ๋จ์ ์ด ์กด์ฌํ๋ค.
๋ฐ๋ฉด์ Playwright๋ ์ ๋ฃ๋ก ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ Cypress์ ๋นํด ๋ฌด๋ฃ๋ก ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ์ฌ ์ด๋ก์ธํด Cypress์ ๋นํด ๋ ๋น ๋ฅธ ํ ์คํธ ์คํ์ด ๊ฐ๋ฅํ๋ค.
๋ํ Cypress์๋ ์ง์ํ์ง ์๋ ์๋ํ ๋๊ตฌ ๋ค์คํญ(๋ฉํฐ ํญ) ๊ธฐ๋ฅ์ ์ง์ํ์ฌ ์ฌ๋ฌ ํญ์ผ๋ก ๋๋์ด ํ ์คํธ๋ฅผ ์งํํ ์ ์๋ ์
๋ค์ค ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํ์ฌ Chrome, Firefox, Safari๋ฅผ ํฌํจํ ๋ค์ํ ๋ธ๋ผ์ฐ์ ์์ ํ ์คํธ๋ฅผ ์คํํ ์ ์์ผ๋ฉฐ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์ ์ ๊ณตํ๋ฉฐ , ํฌ๋ก์ค ํ๋ซํผ ํ ์คํ ์ด ๊ฐ๋ฅํ์ฌ Windows,Mac,Linux์์ ๋์ผํ ํ ์คํธ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ์ฅ์ ์ด ์กด์ฌํฉ๋๋ค.
Playwright์ ๋จ์ ์ ๋ค์ํ ๋ธ๋ผ์ฐ์ ์ ํ๋ซํผ์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์ค์ ์ด ๋ณต์กํ๋ค๋ ๋ถ๋ถ๊ณผ ์๋ฃ๋ฅผ ์ฐพ์ ์ ์๋ ์ปค๋ฎค๋ํฐ๊ฐ ๋ถ์กฑํ๋ค๋ ์ ์ด ๊ผฝํ์ง๋ง, ์ฑGpt ์ PlayWright ์ ์ฉ GPT ๊ฐ ์กด์ฌํ์ฌ ์ด๋ฅผ ์ ํ์ฉํ๋ฉด ์๋ฃ ๋ถ์กฑ ๋ฌธ์ ๋ ํด๊ฒฐ๋ ๊ฒ ๊ฐ๋ค.
ํ๋ก์ ํธ ์๊ตฌ ์ฌํญ์ด๋ ํ์ ์ ํธ๋์ ๋ฐ๋ผ ์ ํฉํ ๋๊ตฌ์ ์ ํ์ด ํ์ํ๋ค.
๋๋ ์ด๋ฒ์ ๊ณต๋ถ๋ฅผ ํ๊ธฐ์ํด ๋ ์ค ํ๋๋ง ์ ํํ์ฌ E2E ํ ์คํธ๋ฅผ ํด๋ณด๊ธฐ๋ก ํ๋๋ฐ,
์ฑ๋ฅ๊ณผ ๋น์ฉ์ ์ธ ์ธก๋ฉด์์ ๋ฐ๋ผ๋ดค์ ๋๋ Cypress์ ๋นํด Playwright๊ฐ ์ข ๋ ์ ๋ฆฌํ๋ค๊ณ ํ๋จํ์ฌ Playwright๋ฅผ ์ ํํ๊ฒ ๋์๋ค.
Playwright ์์ํ๊ธฐ
์ค์นํ๊ธฐ
npm init playwright@latest
์๋์ ๊ฐ์ด ํ์ ์คํฌ๋ฆฝํธ๋ ๊นํ๋ธ ์ก์ workflow๋ ์ค์ ํ ์ ์๋ค.

๊ทธ๋ฆฌ๊ณ vsCode์ ํ์ฅ ํ๋ก๊ทธ๋จ๋ ์ถ๊ฐํ๋ฉด ๋ ๊ฐ๋จํ๊ฒ ์์ ํ ์ ์๋ค.

์ค์นํ๋ฉด ์๋ฐ ๋ชจ์์ ์์ด์ฝ์ด ์ผ์ชฝ์ ์๊ธฐ๋๋ฐ

๊ทธ๊ฑธ ํด๋ฆญํ๋ฉด ํ ์คํธ ํ์๊ธฐ๊ฐ ๋ฌ๋ค.
์ฌ๊ธฐ์ ์ด์ ์ ์ผ ์ผ์ชฝ์ ์ฌ์๋ฒํผ์ ๋๋ฅด๋ฉด ํ ์คํธ๊ฐ ์คํ๋๋ค.
๋๋ฒ์งธ๋ ํ ์คํธ ๋๋ฒ๊ทธ ๋ฒํผ์

๊ทธ๋ฌ๋ฉด ํ ์คํธ๋ ์ด๋ป๊ฒ ์งํํ๋๊ฐ?
E2E ํ ์คํธ๋ ์์ ์ค๋ช ํ๋ค์ถ์ด ์ฌ์ฉ์์ ์๋๋ฆฌ์ค๋ฅผ ํ ์คํธ ํ๋ ๊ฒ์ด๋ผ๊ณ ํ๋ค.
๊ทธ๋์ ๊ทธ ์๋๋ฆฌ์ค๋ฅผ ์ฝ๋๋ก ์ง์ฃผ๋ฉด ๋๋๊ฒ์.
์๊น playwright๋ฅผ ์ค์นํ๋ฉด์ tests๋ผ๋ ํด๋๋ ์์ฑ๋์๊ฑด๋ฐ, ๊ทธ ์๋์ ํ ์คํธ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.

๋ด๊ฐ ๋ง๋ค์ด ๋ ๊ธฐ๋ฅ์ ์ค๋ช ํ์๋ฉด ํ์๊ฐ์ ์์ ์๋ ์ฃผ์ ๊ฒ์ ๋ชจ๋ฌ์ด๋ค.
ํ์๊ฐ์ ํผ์์ [์ฃผ์๊ฒ์] ์ ํด๋ฆญํ๋ฉด ๋ชจ๋ฌ์ด ๋์์ง๊ณ ๊ทธ ๋ชจ๋ฌ์์ ๊ฒ์์ฐฝ์ ์์ ์ ์ฃผ์๋ฅผ ์ ๋ ฅ ํ์
enterํค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ๊ฑฐ๊ธฐ์ ์ฃผ์๋ฅผ ๊ณจ๋ผ์ ์ ํํ๋ฉด ์ฃผ์ input ์ ์ ํํ ์ฃผ์์ ์ฐํธ๋ฒํธ๊ฐ ์๋์ผ๋ก ์ ๋ ฅ๋๋ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค.
๊ทธ ์๋๋ฆฌ์ค๋ฅผ ์ฝ๋๋ก ๊ตฌํํ๋ฉด ์๋์ ๊ฐ๋ค.
import { expect, test } from '@playwright/test';
test.describe('Address search E2E test', () => {
test.use({ locale: 'ko-kr' });
test('should search and select an address', async ({ page }) => {
// ํ์ด์ง ์ด๋
await page.goto('http://localhost:3000/client');
// ์ฃผ์ ์ฐพ๊ธฐ ๋ฒํผ ํด๋ฆญ -> ๋ชจ๋ฌ์ด ์ด๋ ค์ผ ํจ
await page.click('button:has-text("์ฃผ์ ์ฐพ๊ธฐ")');
// ์ฃผ์ ๊ฒ์ ์ธํ์ "๋ถ์๋" ์
๋ ฅ
const searchInput = page.locator(
'input[placeholder="์ฃผ์๋ฅผ ์
๋ ฅํด์ฃผ์ธ์."]'
);
await searchInput.fill('์ก์ ๋');
// Enter ํค ์ด๋ฒคํธ ๋ฐ์
await searchInput.press('Enter');
// ์ฃผ์ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ , ๊ฒฐ๊ณผ ์ค ํ๋๋ฅผ ์ ํ
const firstResult = page.locator('text=์ก์ 1๋').first();
await expect(firstResult).toBeVisible();
await firstResult.click();
// ๋ชจ๋ฌ์ด ๋ซํ๊ณ , ํผ์ ์ฃผ์๊ฐ ์
๋ ฅ๋์๋์ง ํ์ธ
await expect(page.locator('input[name="roadAddr"]')).toHaveValue(
'๋ถ์ฐ๊ด์ญ์ ์ก์ 1๋.......)'
);
// ์ค์ ZIP ์ฝ๋๋ฅผ ํ์ธํ์ฌ ๋์ฒด (์: 'ZIP_CODE_HERE')
await expect(page.locator('input[name="zipNo"]')).toHaveValue('11111');
});
});
์ด๋ ๊ฒ ์์ฑํ๊ณ ์๊น์ ๊ฐ์ด ํ ์คํธ์์ด์ฝ์ ๋๋ฌ์ ํ ์คํธ๋ฅผ ์งํํด๋ณธ๋ค.
์ ์์ ์ผ๋ก ํต๊ณผํ๋ฉด ์๋์ ๊ฐ์ด ์ด๋ก๋ถ์ด ๋จ๋๋ฐ
์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ๋ถ์๋ถ์ด ;;;;;;;;;์๊ฒจ์ ;;; ๋ถ์ํด์ง๋คใ ใ ... ๋ญ๊ฐ ์๋ชป๋๋...

๊ทธ๋ฆฌ๊ณ ์ด์ ๋๋ ์ด ํ ์คํธ๋ฅผ ๊นํ๋ธ์ push ํ ๋๋ง๋ค ์คํํ๊ณ ์ถ์ด์ CI ๋ฅผ ์ ์ฉํด๋ณผ๋ ค๊ณ ํ๋ค.
CI๋?
CI๋ ๊ฐ๋จํ ์์ฝํ๋ฉด ๋น๋/ํ ์คํธ ์๋ํ ๊ณผ์ ์ด๋ค.
CI๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๊ตฌํํ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์๋ก์ด ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ๊ธฐ์ ์ผ๋ก ๋น๋ ๋ฐ ํ ์คํธ๋์ด ๊ณต์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ํตํฉ๋๋ฏ๋ก ์ฌ๋ฌ ๋ช ์ ๊ฐ๋ฐ์๊ฐ ๋์์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ๊ณผ ๊ด๋ จ๋ ์ฝ๋ ์์ ์ ํ ๊ฒฝ์ฐ ์๋ก ์ถฉ๋ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ์ ์์
์ปค๋ฐํ ๋๋ง๋ค ๋น๋์ ์ผ๋ จ์ ์๋ ํ ์คํธ๊ฐ ์ด๋ฃจ์ด์ ธ ๋์์ ํ์ธํ๊ณ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ๋ฌธ์ ๊ฐ ์๊ธฐ๋ ๋ถ๋ถ์ด ์๋๋ก ๋ณด์ฅํ๋ค.
Playwright CI ์ค์ ๊ณต์๋ฌธ์
https://playwright.dev/docs/ci-intro
Setting up CI | Playwright
Introduction
playwright.dev
๊ทธ๋์ ๊นํ๋ธ์ actions์์ ์ํฌํ๋ก์ฐ๋ฅผ ์์ฑํ์ฌ CI ์ค์ ์ ํด๋ณด๋๋ก ํ๋ค.
ํ ์คํธ ์๋ํํ๊ณ ์ ํ๋ ํด๋ ๋ด์ ์๋์ ๊ฐ์ด workflows ๋ฅผ ๋ง๋ค์ด์ค๋ค.

๊ทธ๋ฆฌ๊ณ playwright.yml ํ์ผ๋ด์ ์ค์ ์ ํด์ฃผ๋ฉด๋จ
name: Playwright Tests # ์ํฌํ๋ก์ฐ ์ด๋ฆ: Playwright ํ
์คํธ
on:
push:
branches: [main] # main ๋ธ๋์น๋ก push ๋ ๋ ์ด ์ํฌํ๋ก์ฐ๊ฐ ์คํ๋จ
jobs:
test:
timeout-minutes: 60 # ์ต๋ ์คํ ์๊ฐ 60๋ถ ์ค์
runs-on: ubuntu-latest # ์ต์ Ubuntu ํ๊ฒฝ์์ ์คํ
steps:
- uses: actions/checkout@v4 # GitHub ์ก์
: ์ฝ๋ ์ฒดํฌ์์ (ํ์ฌ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ด)
- uses: actions/setup-node@v4 # GitHub ์ก์
: Node.js ํ๊ฒฝ ์ค์
with:
node-version: lts/* # LTS(Long Term Support) ๋ฒ์ ์ Node.js ์ฌ์ฉ
- name: Install dependencies # ์์กด์ฑ ์ค์น ๋จ๊ณ
run: yarn install # yarn์ ์ฌ์ฉํด ํ๋ก์ ํธ ์์กด์ฑ ์ค์น
- name: Install Playwright Browsers # Playwright ๋ธ๋ผ์ฐ์ ์ค์น
run: npx playwright install --with-deps # Playwright ๋ธ๋ผ์ฐ์ ์ ํ์ํ ์ข
์์ฑ ์ค์น
- name: Start development server # ๊ฐ๋ฐ ์๋ฒ ์์
run: yarn dev & # ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๊ฐ๋ฐ ์๋ฒ ์คํ
env:
CI: true # CI ํ๊ฒฝ์์ ์คํ๋๋๋ก ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์
- name: Wait for server to be ready # ์๋ฒ๊ฐ ์ค๋น๋ ๋๊น์ง ๋๊ธฐ
run: npx wait-on http://localhost:3000 # ์๋ฒ๊ฐ ์คํ๋ ๋๊น์ง localhost:3000 ๋๊ธฐ
- name: Run Playwright tests # Playwright ํ
์คํธ ์คํ
run: npx playwright test
- uses: actions/upload-artifact@v4 # ํ
์คํธ ๊ฒฐ๊ณผ ๋ณด๊ณ ์ ์
๋ก๋
if: always() # ํ
์คํธ ์ฑ๊ณต ์ฌ๋ถ์ ์๊ด์์ด ํญ์ ์คํ
with:
name: playwright-report # ์
๋ก๋ํ ์ํฐํฉํธ ์ด๋ฆ ์ง์
path: playwright-report/ # Playwright ๋ณด๊ณ ์ ๊ฒฝ๋ก
retention-days: 30 # ์
๋ก๋๋ ํ์ผ์ด 30์ผ๊ฐ ์ ์ง๋จ
์์๋ yarn์ ๊ธฐ์ค์ผ๋ก ์์ฑํ๋๋ฐ ์๋๋ npm์ผ๋ก ์์ฑํจ
name: Playwright Tests
on:
push:
branches: [main]
jobs:
test:
timeout-minutes: 60
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: lts/*
- name: Install dependencies
run: npm ci
- name: Install Playwright Browsers
run: npx playwright install --with-deps
- name: Start development server
run: npm run dev &
env:
CI: true
- name: Wait for server to be ready
run: npx wait-on http://localhost:3000
- name: Run Playwright tests
run: npx playwright test
- uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-report
path: playwright-report/
retention-days: 30
์ด๋ ๊ฒ ์์ฑํ๊ณ ์ปค๋ฐ ํ ๊นํ๋ธ ๋ ํฌ -> actions๋ก ์ด๋ํ๋ฉด

์ด๋ ๊ฒ workflows๊ฐ ์์ฑ๋๊ณ ์ ์ผ ์์ ์ปค๋ฐ๊ณผ ๊ฐ์ด (๋ ธ๋์) ํ ์คํธ๊ฐ ์งํ์ค์ธ๊ฒ์ ํ์ธ๊ฐ๋ฅํ๋ค.
์๋ฌ์ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ๋ถ์ ์์ผ๋ก ๋จ๋๋ฐ

์ด๋์์ ์๋ฌ๊ฐ ๋ฌ๋์ง ํ์ธ์ ํ๋ ค๋ฉด
์๋ฌ๋ ๋ถ๋ถ์ ํด๋ฆญํด์ ์๋ฌ๋ ๋ถ๋ถ์ ํผ์ณ๋ณด๋ฉด๋๋ค.


์ด๋ฐ ์์ผ๋ก ๋ธ
๊ทธ๋ฆฌ๊ณ ๊ทธ ์๋ฌ๋ ๋ถ๋ถ์ ๋ํด์ ๋ฆฌํฌํธ๋ฅผ ๋ค์ด๋ฐ์์ ์์ธํ ? ํ์ธํด ๋ณผ ์ ์๋๋ฐ
summary -> Artifacts์์ playwright-report๋ฅผ ํด๋ฆญํ๋ฉด zipํ์ผ์ด ๋ค์ด๋ฐ์์ง


zip์ ์ด์ด์ ํ์ธํด๋ณด๋ฉด


์์ ๊ฐ์ด ์ด๋ค ๋ถ๋ถ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋์ง ํ์ธ๊ฐ๋ฅํ๊ณ ์์ธ๋ณด๊ธฐ๋ ๊ฐ๋ฅํ๋ค.
๊ทธ๋์ ๊ทธ ๋ถ๋ถ์ ์์ ํ๊ฑฐ๋ ์ค์ ์ ์๋ณด๋ฉด ๋จ
๋๋ ์ค์ ์ ๋ฌธ์ ๊ฐ ์์์ด์ ์ฌ๋ฌ ๋ฒ ์๋ดค๋ค...
๋ฌดํผ ์ฑ๊ณตํ๋ฉด ์๋กท๊ฒ ๋ณด๊ธฐ ์ข๊ฒ ๋ฌ๋ค..

์ฐธ๊ณ ์๋ฃ
https://www.axelerant.com/blog/cypress-selenium-playwright
Cypress vs. Selenium vs. Playwright: Choose the Right Automation Tool
Explore Cypress, Selenium, and Playwright for automation testing. Compare features, pros, cons, and recommendations to make an informed choice.
www.axelerant.com
https://shorttrack.tistory.com/7
E2E ํ ์คํธ๋ก ์ Playwright ์ ํํ๋๊ฐ?
์ด ๊ธ์ 'E2E ํ ์คํธ ๋๊ตฌ(tool)๋ค ๋ถ๋ฅํ๊ธฐ'์ ์ด์ 3๋ฒ์งธ ์ฐ์ฌ๋ฌผ์ ๋๋ค. ์์ ๋ถ๋ฅํ๋ Progressive automation๊ณผ Test runner ์์ญ์์ ๊ฐ๊ฐ์ ๋๊ตฌ๋ฅผ ์ ํํ์ต๋๋ค. ์ด๋ ์ ํ์ ๊ธฐ์ค์ ์ธ์ฐ๊ณ ๊ทธ ๊ธฐ์ค์
shorttrack.tistory.com
https://seungahhong.github.io/blog/2023/04/2023-04-02-playwright/#cypress%EC%97%90%EC%84%9C-playwright%EB%A1%9C-%EC%99%9C-%EB%84%98%EC%96%B4%EA%B0%94%EB%82%98
Playwright 2023.04.02 ๋ค์ด๊ฐ๊ธฐ ์ ์.. (vs. Cypress) Cypress์์ Playwright๋ก ์ ๋์ด๊ฐ๋?? Cypress ๊ฐ๋ฐ ์ ์ด๋ ค์ ์ ํ ์คํธ ํ๊ฒฝ ๋ก๋ฉ, ํ ์คํธ ์ํ ์ ๋๋ฌด ๋ง์ ์๊ฐ์ด ์์ํ๋ค๋ ๋๋์ ๋ฐ์์ต๋๋ค. ํ
seungahhong.github.io
Cypress vs Playwright E2E ํ ์คํธ ํ๋ ์์ํฌ ๋น๊ต
์น ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํ ์ ๊ฐ๋ฐ ๊ณผ์ ์์ ์ค์ํ ๋ถ๋ถ์ ๋๋ค. Cypress์ Playwright๋ ๋ชจ๋ ์๋ํ๋ ๋ธ๋ผ์ฐ์ ํ ์คํ ์ ์ํ ํ๋์ ์ธ ํ๋ ์์ํฌ์ ๋๋ค. ์ด ๊ธ์์๋ Cypress์ Playwright๋ฅผ ๋น๊ตํ๊ณ ,
kir93.tistory.com
๊ธฐ๋ฅ ํ ์คํธ ์๋ํ, ์ Playwright๋ฅผ ์ ์ ํ์๊น? (2)
Selenium, Cypress, Puppeteer, Playwright ์๋ํ ๋๊ตฌ ์ค Playwright๋ฅผ ์ ์ ํ ์ด์ ์ ๋ํ์ฌ ๊ธฐ์ ํฉ๋๋ค.๊ฐ ์๋ํ ๋๊ตฌ๋ง๋ค ์ฅ๋จ์ ์ด ์์ผ๋ ์ฐธ๊ณ ์ฉ์ผ๋ก ์ฌ์ฉํด์ฃผ์ธ์!์ด์ ๊ธ2024.06.06 - [QA/๊ธฐ๋ฅ ์๋ํ] -
qa-subi.tistory.com
https://velog.io/@heelieben/E2E-%ED%85%8C%EC%8A%A4%ED%8A%B8-PlayWright-2eub88ik
E2E ํ ์คํธ : Playwright
ํ๋ก ํธ์๋์์ Playwright ๋ฅผ ์ฌ์ฉํด์ E2E ํ ์คํธ๋ฅผ ํด๋ด ์๋ค!
velog.io
'STUDY' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [๋ผ์ด๋ธ๋ฌ๋ฆฌ] react-spring ์ ๋๋ฉ์ด์ ๊ตฌํ (1) | 2024.09.29 |
|---|---|
| [๋ผ์ด๋ธ๋ฌ๋ฆฌ] react hook form ์ ํจ์ฑ ๊ฒ์ฌํ๋ ํผ ๋ง๋ค๊ธฐ (2) | 2024.09.18 |
| [react-signature-canvas] ์ ์์๋ช ๊ตฌํํ๊ธฐ (1) | 2024.09.13 |
| axios ์ธ์คํด์ค (0) | 2024.09.10 |
| session ๋ฐฉ์์ ๊ฐ๋ ๋ฐ ํ๊ณ์ JWT token ์ธ์ฆ ๋ฐฉ์ (0) | 2024.09.04 |