4. playwright

Keyword

  • E2E(End to End) Test

  • Headless Chrome

  • Puppeteer

  • Playwright

  • CodeceptJS

1. E2E(End to End) Test

์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•. ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋น„์Šค๋ฅผ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์žฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ํ†ต๊ณผํ•จ์œผ๋กœ์จ ์„œ๋น„์Šค ๋ฌด๊ฒฐ์„ฑ์„ ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.


2. Headless Chrome

Chrome์„ GUIํ˜•ํƒœ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ๊ณผ๋Š” ๋‹ฌ๋ฆฌ, Headless Chrome์€ CLIํ˜•ํƒœ๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋งํ•œ๋‹ค. UI๋กœ ๋ณด์—ฌ์ค„ ํ•„์š”๊ฐ€ ์—†๋Š” ์›น ์Šคํฌ๋ž˜ํ•‘, ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค.


3. Puppeteer

์›น ๋ธŒ๋ผ์šฐ์ € ์ž๋™ํ™” ํˆด๋กœ ๊ตฌ๊ธ€์—์„œ ๊ฐœ๋ฐœํ•œ Node.js ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๋Š” Headless Chrome๊ณผ Chromium์„ ์ œ์–ดํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. Headless์™€ Non-Headless ๋ชจ๋“œ๋ฅผ on/off ํ•  ์ˆ˜ ์žˆ๋‹ค.

Puppeteer ์‚ฌ์šฉ๋ชฉ์ 

  1. ์›น ํŽ˜์ด์ง€๋ฅผ ์Šคํฌ๋ฆฐ์ƒทํ•˜๊ฑฐ๋‚˜ PDF๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

  2. SPA ํฌ๋กค๋ง ๊ฐ€๋Šฅ - page.goto()์™€ page.waitFor()๋ฅผ ์‚ฌ์šฉํ•ด SPA ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ•˜๊ณ  ํ•„์š”ํ•œ ์š”์†Œ๋“ค์ด ๋กœ๋“œ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•œ๋‹ค.

  3. UI ํ…Œ์ŠคํŠธ ์ž๋™ํ™”

์›น ๋ธŒ๋ผ์šฐ์ € ์ž๋™ํ™”?

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ†ตํ•ด ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์ œ์–ด์™€ ์ƒํ˜ธ ์ž‘์šฉ์„ ์ž๋™ํ™”ํ•œ ๊ฒƒ. ์ง์ ‘ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด๊ณ  ์›น ํŽ˜์ด์ง€๋ฅผ ๋ฐฉ๋ฌธํ•ด ์ƒํ˜ธ ์ž‘์šฉํ•˜์ง€ ์•Š์•„๋„, ํ”„๋กœ๊ทธ๋žจ์ด ๋Œ€์‹  ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์ฃผ๋Š” ๊ฒƒ ์ด๋‹ค.


4. Playwright

MS์—์„œ ๊ฐœ๋ฐœํ•œ ์›น ๋ธŒ๋ผ์šฐ์ € ์ž๋™ํ™” ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.

Puppeteer๊ฐ€ ์žˆ๋Š”๋ฐ ์™œ Playwright๋ฅผ ์‚ฌ์šฉ?

  1. ๋‹ค์–‘ํ•œ ๋ธŒ๋ผ์šฐ์ € ์ง€์› - Puppeteer๋Š” Chromium์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์ง€๋งŒ, Playwright๋Š” ์—ฌ๋Ÿฌ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ํ…Œ์ŠคํŠธ์— ์ ํ•ฉํ•˜๋‹ค.

  2. ๋‹ค์–‘ํ•œ ์–ธ์–ด ์ง€์› - JS๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Python, TS๋ฅผ ์ง€์›ํ•œ๋‹ค.


5. CodeceptJS

E2E ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ๋ฌธ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” Javascript ํ…Œ์ŠคํŠธ ๋„๊ตฌ. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋ฉฐ, ๋น„๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ๋„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ฝ๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Feature('๊ธฐ๋Šฅ ์ž…๋ ฅ');

Scenario('Visit the home page', ({ I }) => {
  I.amOnPage('/');

  I.see('Hello, world!');
});

Scenario('Add a new post', ({ I }) => {
  I.amOnPage('/');

  I.dontSee('What time is it?');

  I.click('Add post!');

  I.waitForText('What time is it?');
});

Last updated