Playwrite
E2E(End to End) Test
์ค์ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด๋ฅผ ๋์ํด์ ๊ธฐ๋ฅ์ ํ์ธํ๋ ํ ์คํธ
์ฆ, ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ์ํํธ์จ์ด๋ฅผ ์ฌ์ฉํ์๋ ํ๋ก์ฐ๋ฅผ ํ ์คํธํ๋ ๊ฒ
E2E Test ํน์ง
์ค์ ์ฌ์ฉ์ ํ๊ฒฝ์์ ํ ์คํธํ๋ฏ๋ก ์ฌ์ฉ์์ ์ ์ฅ์์์ ๊ฒฝํ์ ์ง์ ์ ์ผ๋ก ํ ์คํธํ ์ ์๋ค.
์ ์ฒด ์์คํ ์ ๋์์ผ๋ก ํ ์คํธ๋ฅผ ์ํํ๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ๋ชจ๋์ด๋ ์ปดํฌ๋ํธ๊ฐ ํจ๊ป ์๋ํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ค์ ํ์ ๊ฐ๋ฅ
์ธ๋ถ ํ๊ฒฝ์ด๋ ๋คํธ์ํฌ๋ฅผ ์ด์ฉํ๋ค๋ฉด ์กฐ๊ธ ๋ถ์์ ํ ์ ์๋ค.
E2E Test Framework
Cypress
npm i -D cypressnpx cypress openCypress์ ์์ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด UI ์์๋ฅผ ๊ฐ์ ธ์ฌ ๋ ๋ด๋ถ ๊ตฌํ ์ฌํญ (์: class)์ ์์กดํ๊ณ ์๋ค.
testing-library๋ Cypress๋ ์ง์ํ๋ฏ๋ก ํจ๊ป ์ฌ์ฉํ๋ฉด UI ์์๋ฅผ ์ฌ์ฉ์ ๊ด์ ์์ ๊ฐ์ ธ์ฌ ์ ์๋ค
npm i -D @testing-library/cypressE2E ํ ์คํธ์์๋ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋คํธ์ํฌ ๊ด๋ จ ์์กด์ฑ๋ค์ Mock ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ํ ์คํธ๋ฅผ ์งํํ๋ค.
์ด๋ ์ฌ์ฉ์์ ์ค์ ํ๊ฒฝ๊ณผ ์ ์ฌํ ํ๊ฒฝ์์ ํ ์คํธ๋ฅผ ์ํํ๋๋ผ๋ ์ธ๋ถ ์์กด์ฑ์ ์ํด ํ ์คํธ๊ฐ ์คํจํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํจ์ด๋ค.
Headless Chrome
Headless ์ํ์์๋ ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ๋ฅผ ์คํํ ์ ์๋ ๋ฐฉ๋ฒ, ํฌ๋กฌ์์ด ํฌ๋กฌ์ ์คํํ๋ ๊ฒ์ด๋ผ๊ณ ์ค๋ช ํ๋๋ฐ ํฌ๋กค๋ง์ ํ๊ฑฐ๋ E2E ํ ์คํธํ ๋ ์ ์ฉํ๋ค๊ณ ํ๋ค.
Chrome ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ๊ฐ์ง๊ณ ์์ง๋ง, ์ค์ ๋ก ํ๋ฉด์ ๊ทธ๋ฆฌ์ง ์๊ณ ๋ด๋ถ์ ์ผ๋ก๋ง ์คํ๋๋ ๋ชจ๋ ์ฆ, GUI -> CLI
Puppeteer
Google์์ ๊ฐ๋ฐํ Node.js์ฉ Headless Chrome ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Puppeteer๋ Headless Chrome์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ ์ดํ์ฌ ์น ํฌ๋กค๋ง, ์คํฌ๋ฆฐ์ท, E2E ํ ์คํธ ๋ฑ ๋ค์ํ ์์ ์ ์๋ํํ ์ ์๋ค.
Chrome DevTools Protocol์ ์ฌ์ฉํ์ฌ Chrome ๋ธ๋ผ์ฐ์ ์ ์ธ์คํด์ค๋ฅผ ์ ์ดํ๋ฉฐ, ์ด๋ฅผ ํตํด Chrome ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
E2E ํ ์คํธ ๋๊ตฌ๋ก ๋ณด๋ค ๊ฐ๋จํ๊ณ ํ ์คํธ ์ฝ๋ ์์ฑ์ ๋น๊ฐ๋ฐ์๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ์ง๊ด์ ์ธ API๋ฅผ ์ ๊ณตํ๋ค.
์ฅ์
๊ฐ๋ ์ฑ์ด ๋์ DSL(Domain Specific Language)์ ์ ๊ณตํ์ฌ ํ ์คํธ ์ฝ๋ ์์ฑ์ด ์ฉ์ดํจ
Selenium, Puppeteer, Playwright ๋ฑ, ๋ค์ํ ๋๋ผ์ด๋ฒ๋ฅผ ์ ๊ณตํ์ฌ ๋ค๋ฅธ ๋๊ตฌ๋ก ์์ฑ๋ ํ ์คํธ ์ฝ๋๋ฅผ
CodeceptJS๋ก ๋ณํ์ด ๊ฐ๋ฅํ๋ค.
Getting Started
package.json ์ script๊ฐ ์๋์ผ๋ก ์ถ๊ฐ๋๋ค.
์ํ ์ฝ๋
์คํ
Playwright
Headless Chrome์ ๊ธฐ๋ฐ์ผ๋ก ํ Puppteer์ ๊ณ์นํ๋ฉด์ ๋ ๋ง์ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํ๋ค.
ํ๊ฒฝ์ค์
playwright.config.ts
tests/.eslintrc.js
jest.config.js
E2E ํ ์คํธ๋ .spec, ๋จ์ ํ ์คํธ๋ .test๋ก ๊ตฌ๋ถํ์ฌ ๋จ์ํ ์คํธ ์คํ์ E2E ํ ์คํธ๋ ์คํํ์ง ์๋๋ก ์ค์
ํ
์คํธ ์ฝ๋ ์์
UI๊ฐ ๋ณต์กํด์ง๋ฉด ์ฌ์ฉ์ ๊ด์ ์์ ํน์ ์์๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์์ง์ ์ด๋ ค์ด๋ฐ ์ถํ์ ์๊ฒ๋๋ฉด ํด๋น ๋ด์ฉ์ ๋ฐ์ํด์ ๋ค์ ์์ฑํ ์์
Last updated