Cucumber-js: ๊ฒฐ๊ณผ์— ์‹œ๋‚˜๋ฆฌ์˜ค ๋ฐ ํƒœ๊ทธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 09์›” 05์ผ  ยท  37์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: cucumber/cucumber-js

์ƒˆ ๋ฒ„์ „ v3์—์„œ ์‹œ๋‚˜๋ฆฌ์˜ค ๊ฒฐ๊ณผ.scenario.tags์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด์ „ ๋ชจ๋ธ ์‹œ๋‚˜๋ฆฌ์˜ค_๊ฒฐ๊ณผ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ๋“  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์™„๋ฃŒ ์ด๋ฒคํŠธ๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ ํ•ด์š”

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

FWIW, ์˜ค์ด-๋ฃจ๋น„์—๋Š” "์‰ฌ์šด ๊ฒƒ์€ ์‰ฌ์›Œ์•ผ ํ•˜๊ณ , ์–ด๋ ค์šด ๊ฒƒ์€ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค"๋Š” ์›์น™์„ ์ถฉ์กฑํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ํ™•์žฅ์ ์ด ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ์•„์ด๋””์–ด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ์„  RunningTestCase ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ ํ›„ํฌ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Gherkin ์†Œ์Šค(์‹œ๋‚˜๋ฆฌ์˜ค/๊ฐœ์š”/ํƒœ๊ทธ ๋“ฑ)์— ๋Œ€ํ•œ ๋ชจ๋“  ์ •๋ณด์™€ ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ํ˜„์žฌ ๊ฒฐ๊ณผ ์ƒํƒœ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์šฐ๋ฆฌ์—๊ฒŒ ๋ฌด์–ธ๊ฐ€๋ฅผ ์‹œ๋„ํ•˜๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋งŒ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ˜„์žฌ ํ”Œ๋ ˆ์ด ์ƒํƒœ์— ๋Œ€ํ•œ ํˆฌ๋ช…์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‘˜์งธ, ํ•„ํ„ฐ ๊ฐ€

HTH

๋ชจ๋“  37 ๋Œ“๊ธ€

์•„๋‹ˆ์š”. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ํƒœ๊ทธ์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด์ „ ์‹œ๋‚˜๋ฆฌ์˜ค ๊ฒฐ๊ณผ๋กœ ๋Œ์•„๊ฐˆ ๊ณ„ํš์€ ์—†์Šต๋‹ˆ๋‹ค. ํƒœ๊ทธ๊ฐ€ ํ•„์š”ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ œ ๊ฒฝ์šฐ์—๋Š” ํƒœ๊ทธ ์‹œ์Šคํ…œ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ํ›„ํฌ์—์„œ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด.

์ด ๊ฐ™์€:

<strong i="7">@SuiteName</strong> <strong i="8">@SuiteSectionName</strong> <- These tags tell the suite
Feature: 

<strong i="9">@TC1563697</strong> <- This tag identifies the testcase in the test management tool <strong i="10">@New</strong>
Scenario: 
    Given  
    When 
    Then 

ํŠน์ • ํƒœ๊ทธ๊ฐ€ ์žˆ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•ด์„œ๋งŒ ์‹คํ–‰๋˜๋Š” ํ›„ํฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/cucumber/cucumber-js/blob/v3.0.1/docs/support_files/hooks.md#tagged -hooks

๋˜ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค ํƒœ๊ทธ๋ฅผ ์•Œ๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ sudo ์˜ˆ์ œ๊ฐ€ ์ฃผ์–ด์ง€๋ฉด(1.3.1์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์žˆ๊ณ  ์ตœ์‹  3.0.1์„ ๋ณด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„์ „ ๊ตฌ๋ฌธ์ด ์•ฝ๊ฐ„ ๋ˆ„๋ฝ๋จ):

<strong i="6">@set_video</strong> <strong i="7">@youtube</strong>
Scenario: User should see youtube video

<strong i="8">@set_video</strong> <strong i="9">@vimeo</strong>
Scenario: User should see vimeo video


this.After({tags: @set_video}, function (testCase) {
  let tags = testCase.scenario.tags;

_.forEach(tags, (function (tag) {
 if(tag === '<strong i="10">@youtube</strong>') {
   setVideo('youtube');
 }
if(tag === '<strong i="11">@vimeo</strong>') {
 setVideo('vimeo');
}
});

}

ํ›„ํฌ๋ฅผ ์–ธ์ œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” ํƒœ๊ทธ๊ฐ€ ํ•˜๋‚˜ ์žˆ๊ณ  ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ์ž‘๋™ํ•˜๋„๋ก ํ›„ํฌ๋ฅผ ๋ณด๋‹ค ๋™์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฐ์ดํ„ฐ ์—ญํ• ์„ ํ•˜๋Š” ๋‹ค๋ฅธ ํƒœ๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋™์ผํ•œ ๋…ผ๋ฆฌ๋กœ ๋™์ผํ•œ ํ›„ํฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์ „๋‹ฌํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํƒœ๊ทธ๋ฅผ ์•„๋Š” ๊ฒƒ์€ ํ›„ํฌ๋ฅผ ๋” ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ 3.0.1์˜ After ํ›„ํฌ์—์„œ ๊ฒฐ๊ณผ ๊ฐœ์ฒด๋ฅผ ์–ป์„ ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. testCase, ์‹œ๋‚˜๋ฆฌ์˜ค ๊ฒฐ๊ณผ ๋ฐ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

TestRail์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์‹คํ–‰ ์ „์— ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ๊ธฐ๋Šฅ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ›„ํฌ์—์„œ ์ž์„ธํ•œ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • TestRail์˜ ๊ธฐ๋Šฅ ID - ํƒœ๊ทธ์—์„œ ๊ฐ€์ ธ์˜ด(๊ฐ ๊ธฐ๋Šฅ์€ ๊ธฐ๋Šฅ ID๊ฐ€ ์žˆ๋Š” ํƒœ๊ทธ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•จ)
  • ๋˜์ ธ์ง„ ์˜ˆ์™ธ - ์˜ค์ด 1.x์˜ scenario.getException() ์—์„œ ๊ฐ€์ ธ์˜ด
  • ๊ธฐ๋Šฅ์— ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ๋ชจ๋“  ํƒœ๊ทธ
  • ์‹คํŒจํ•œ ๋‹จ๊ณ„ - stepResult ํ›„ํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๋‹จ๊ณ„์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.
  • ํƒœ๊ทธ์—์„œ ๊ฐ€์ ธ์˜จ ๊ธฐ๋Šฅ ID๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ TestRail์—์„œ ๊ฐ€์ ธ์˜จ ๋งŽ์€ ๋‹ค๋ฅธ ์ •๋ณด

๋”ฐ๋ผ์„œ ์˜ค์ด 3.x์˜ ํ˜„์žฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด ์ธํ”„๋ผ๊ฐ€ ์™„์ „ํžˆ ์†์ƒ๋˜๋ฏ€๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@pawelus ๋‚ด ์ธํ”„๋ผ๋Š” ์ •ํ™•ํžˆ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ์ž‘์—…์„ ๋น„๋™๊ธฐ์‹์œผ๋กœ ์ˆ˜ํ–‰ํ•ด๋„ ์•„๋ฌด ๊ฒƒ๋„ ์žƒ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—(์ฆ‰, ์‹ค์ œ ํ…Œ์ŠคํŠธ ์ธํ”„๋ผ๋Š” TestRail ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•ด "๊ด€์‹ฌ"ํ•˜์ง€ ์•Š์Œ) ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ • ํฌ๋งทํ„ฐ๋กœ ์ด๋™ํ•˜๊ณ  ์ด๋ฒคํŠธ์—์„œ ์˜ค๋Š” ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด๊ณ ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ์˜ค์ด๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ž˜ํผ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ค์ด๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „์— TestRail ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋ฏ€๋กœ TestRail ๋ณด๊ณ ์„œ ์ฝ”๋“œ๋ฅผ ์˜ค์ด ํ›„ํฌ์—์„œ ๋ž˜ํผ ์Šคํฌ๋ฆฝํŠธ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์€ ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
์˜ค์ด๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ์Šคํฌ๋ฆฝํŠธ๋Š” ์ถœ๋ ฅ๋œ cucumberResults JSON์„ ์ฝ๊ณ  ๊ฑฐ๊ธฐ์—์„œ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.

์–ด๋Š ์ชฝ์ด๋“  ์ฝ”๋“œ๋ฅผ ์žฌ์ •๋ ฌํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋ชจ๋“  ์‚ฌ์ „/์‚ฌํ›„ ์ž‘์—…์„ ๋ž˜ํผ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์€ V3์—์„œ ์žƒ์–ด๋ฒ„๋ฆฐ ์ œ์–ด ๊ธฐ๋Šฅ ์ค‘ ์ผ๋ถ€๋ฅผ ๋ณต์›ํ•˜๋Š” ์ข‹์€ ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์ถœ๋ ฅ๋œ ๊ฒฐ๊ณผ๋ฅผ ํ’๋ถ€ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ค‘์š”ํ•œ ์ปจํ…์ŠคํŠธ ์ •๋ณด๋ฅผ ์ง๋ ฌํ™”ํ•ด์•ผ ํ•˜๋ฏ€๋กœ(๊ด€๋ จ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์ธํ”„๋ผ ์ƒํƒœ๊ฐ€ ํŒŒ๊ดด๋˜๋ฏ€๋กœ) ์—ฌ์ „ํžˆ ๋‹ค์†Œ ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

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

@yaronassa ์šฐ๋ฆฌ๋Š” Protractor๋ฅผ ํ†ตํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์˜ค์ด๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์—์„œ ๊ณ„์‚ฐํ•  ๋˜ ๋‹ค๋ฅธ ์ถ”์ƒํ™” ๊ณ„์ธต์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋‹น์‹ ์ฒ˜๋Ÿผ ๊ฐ๋„๊ธฐ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „์— ๊ธฐ๋Šฅ์„ ๋‹ค์šด๋กœ๋“œํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค.

Selenium ๊ทธ๋ฆฌ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ์ƒค๋”ฉ ๋ฐ ํ…Œ์ŠคํŠธ์™€ ์‹คํŒจํ•œ ๊ธฐ๋Šฅ์˜ ์žฌ์‹คํ–‰์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š” ๊ฒƒ์€ ์ƒ๋‹นํžˆ ๋ฒˆ๊ฑฐ๋กญ๊ณ  ๋ณต์žกํ•œ ๋…ผ๋ฆฌ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ค์ด 1๊ณผ 2์—์„œ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๊ธฐ๋Šฅ์„ ๋ณต์›ํ•˜๊ธฐ ์œ„ํ•œ ์ƒ๋‹นํ•œ ์–‘์˜ ์ž‘์—….

๋˜ํ•œ ๋‹จ๊ณ„ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด์„œ๋งŒ ์‚ฌ์šฉ์ž ์ •์˜ ํฌ๋งทํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ ์ ˆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋ด, ๋‚œ ๋„ˆ์™€ ํ•จ๊ป˜์žˆ์–ด.
๋‚˜๋Š” ์˜ค์ด์˜ ํ˜„์žฌ ์ƒํƒœ(๊ธฐ๋Šฅ, ์‹œ๋‚˜๋ฆฌ์˜ค, ๋‹จ๊ณ„, ์ „์ฒด ์†์„ฑ ์ปฌ๋ ‰์…˜ ํฌํ•จ)์— ๋Œ€ํ•œ ๋ฌด์ œํ•œ ์•ก์„ธ์Šค๋ฅผ ์›ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ).

์˜ค์ดJS๊ฐ€ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ "๋‚ด๋ถ€ ๊ฐ€์‹œ์„ฑ"์—์„œ ์˜๋„์ ์œผ๋กœ ๋ฉ€์–ด์ง€๋Š” ๊ฒƒ์„ ๋ณด๊ณ , ๋‚˜๋Š” ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ํšจ๊ณผ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ข…๋ฅ˜์˜ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ, ๋‚˜๋Š” ์šฐ๋ฆฌ์™€ ๊ฐ™์€ ๋•œ์žฅ์ด๊ฐ€ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์•ก์„ธ์Šค๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Cucumber์˜ ๋‚ด๋ถ€์—์„œ ๋‚ด๋ถ€ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์˜ฌ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ˆ˜์‹ญ ๋ช…์ด๊ณ  ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” ์ˆ˜์ฒœ ๋ช…์— ๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ์ด๋ฆ„๋„ ๋’ท๋ฐ›์นจํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์Šค๋ƒ…์ƒท ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋‚ด ์Šค๋ƒ…์ƒท์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋ ค๋ฉด ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ์ด๋ฆ„์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@gd46 ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

this.After({tags: "<strong i="7">@set_video</strong> and @youtube"}, function () {
  setVideo('youtube');
})

this.After({tags: "<strong i="8">@set_video</strong> and @vimeo"}, function () {
  setVideo('vimeo');
})

@set_video ํ”Œ๋ž˜๊ทธ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


@pawelus

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ›„ํฌ์—์„œ ์ž์„ธํ•œ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

After ํ›„ํฌ์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? json ํฌ๋งทํ„ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์—ฌ ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋” ๋งŽ์€ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•จ์— ๋”ฐ๋ผ ๊ณ„์†ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฒคํŠธ ํ”„๋กœํ† ์ฝœ ํฌ๋งทํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 3.x ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ๋ถ€์‚ฐ๋ฌผ์€ ๊ตฌ๋ฌธ ๋ถ„์„ ๊ฒฐ๊ณผ๊ฐ€ ์ง€์› ํŒŒ์ผ์—์„œ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ํ”„๋กœ์„ธ์Šค๋กœ ์ด๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์‚ฌ๋ฌผ์˜ ๋” ๋‚˜์€ ๋ถ„๋ฆฌ์™€ ์ด์ƒ์ ์œผ๋กœ ์‚ฌ๋ฌผ์ด ์›๋ž˜ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด ์กŒ๋Š”์ง€ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.


@bnadim

attach ํ•จ์ˆ˜๋กœ ์Šคํฌ๋ฆฐ์ƒท์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด๋ฒคํŠธ potocol / json ํฌ๋งทํ„ฐ์—์„œ ์ถœ๋ ฅํ•˜๋„๋ก ํ•œ ๋‹ค์Œ ์ผ๋ถ€ ์‚ฌํ›„ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์‹œ๋‚˜๋ฆฌ์˜ค ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒŒ์ผ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธก๋ฉด์ด ์•„๋‹˜: ์‹œ๋‚˜๋ฆฌ์˜ค ์ด๋ฆ„์€ ๊ณ ์œ ํ•˜์ง€ ์•Š์€ ๋ฐ˜๋ฉด ์‹œ๋‚˜๋ฆฌ์˜ค uri ๋ฐ ํ–‰ ๋ฒˆํ˜ธ๋Š” ๊ณ ์œ ํ•ฉ๋‹ˆ๋‹ค.

@charlierudolph ๋‚ด ์š”๊ตฌ์— ๋Œ€ํ•œ ๊ฒฌ๊ณ ํ•œ ๋Œ€์ฒด ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ถ„์„ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๊ฐ€ ํ›„ํฌ ๋‚ด์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์กฐํ•ฉ์„ ์„ค๋ช…ํ•˜๋Š” ํ›„ํฌ์˜ ์—ฌ๋Ÿฌ ์กฐํ•ฉ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์‹œ๋‚˜๋ฆฌ์˜ค ํƒœ๊ทธ๊ฐ€ ํŒจํ„ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ„ํ• ํ•˜๊ณ  ์ผ์น˜์˜ ์ผ๋ถ€๋ฅผ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ์œ ์‚ฌํ•œ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ๋‹จ๊ณ„๋Š” ๋™์ผํ•˜๋ฉฐ ๋ณ€๊ฒฝ๋˜๋Š” ์œ ์ผํ•œ ๊ฒƒ์€ ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์€ ํ›„ํฌ์˜ ์—ฌ๋Ÿฌ ์„ค์ • ๋‹จ๊ณ„๋ฅผ ์ค„์—ฌ ์—ฌ๋Ÿฌ ๊ฒฝ์šฐ์— ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌํ•œ ์˜ˆ:

tags: <strong i="9">@clear_w2OnlyUser</strong>, <strong i="10">@clear_w2OnlyArcotEnableUser</strong>

I split based on <strong i="11">@clear_</strong> and grab the second half as the parameter. tagName coming from the old scenario result of getTags, getName. 

let profileToClear = tagName.split('<strong i="12">@clear_</strong>')[1];

browser.waitForAngularEnabled(false);
browser.get(url);
login();
navigate();
deleteProfile(profileToClear);

์ด์— ๋Œ€ํ•œ ์ƒ๊ฐ์„ ๋ง์”€ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๋‹น์‹ ์˜ ์˜ˆ๊ฐ€ ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์‰ฝ๊ฒŒ ๋Œ€์ฒด๋  ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐœ์ƒํ•ด์•ผ ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ๋‹จ๊ณ„๊ฐ€ ์žˆ๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ์ž ์žฌ์ ์œผ๋กœ ๋ณต์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ๋Š” ํƒœ๊ทธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•ด mockserver๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•œ ํ›„ํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๋งค์šฐ ์ง‘์•ฝ์ ์ž…๋‹ˆ๋‹ค. ์ง€์›ํ•˜๋Š” ๊ฐ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•œ ํ›„ํฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค...

๋˜ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค ์ด๋ฆ„์„ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด Before ๋ฐ After ํ›„ํฌ์—์„œ ์‹œ๋‚˜๋ฆฌ์˜ค.name์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๋ถ„์„ํ•  ๋•Œ ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์‹œ์ž‘๋˜๊ณ  ๋๋‚˜๋Š” ์‹œ์ ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

Cucumber-js๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Selenium์„ ๊ตฌ๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ๋ฐ Browserstack ๋ชจ๋‘

๋‚˜๋Š” ๋งŽ์€ ํ•„์ˆ˜์ ์ธ ๊ฒƒ๋“ค์„ ์œ„ํ•ด ํ›„ํฌ์—์„œ ํ…Œ์ŠคํŠธ ์ƒํƒœ(๊ธฐ๋Šฅ, ์‹œ๋‚˜๋ฆฌ์˜ค, ํƒœ๊ทธ, ๊ฒฐ๊ณผ ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„ URL ๋ณ€๊ฒฝ
  • ํ˜„์žฌ ๋ธŒ๋ผ์šฐ์ € ๊ตฌ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ๊ฑด๋„ˆ๋›ฐ๊ธฐ
  • ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„ URL์„ ์‚ฌ์šฉํ•˜์—ฌ Browserstack์— ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ๊ธฐ๋กํ•˜์‹ญ์‹œ์˜ค.
  • ๊ธฐ๋Šฅ ๋ฐ ์‹œ๋‚˜๋ฆฌ์˜ค ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ Browserstack์—์„œ ์„ธ์…˜ ์ด๋ฆ„ ์ƒ์„ฑ
  • ํƒœ๊ทธ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์—ฌ ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„ ๋ธŒ๋ผ์šฐ์ € ํ•ด์ƒ๋„๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ๊ฒƒ์€ ๋™์‹œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ „์ฒด ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๋„๋ก ์•ฑ์œผ๋กœ ๋ž˜ํ•‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์™œ ์ด๊ฒƒ๋“ค์ด ๋–จ์–ด์กŒ์Šต๋‹ˆ๊นŒ?
๊ทธ๋“ค์€ ๊ฒฐ์ฝ” ๋Œ์•„ ์˜ค์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

@gd46

์‹คํ–‰ ์ค‘์ธ ์‹œ๋‚˜๋ฆฌ์˜ค์— ํ•ด๋‹น ์œ ํ˜•์˜ ํ”„๋กœํ•„์ด ํฌํ•จ๋ฉ๋‹ˆ๊นŒ? ์–ด๋–ค ์œ ํ˜•์˜ ํ”„๋กœํ•„์ด ์„ธ์ƒ๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š”์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ €์žฅํ•˜๊ณ  ์ €์žฅ๋œ ํ”„๋กœํ•„์„ ์ œ๊ฑฐํ•˜๋ผ๋Š” ๋‹จ์ผ ๋ช…ํ™•ํ•œ ํƒœ๊ทธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?


@justusromijn

๋ชจ์˜ ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ ์„ค์ •์„ ์ •์˜ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํƒœ๊ทธ ๊ธฐ๋ฐ˜์—์„œ ์„ค์ •์„ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋Ÿฌ๋ฉด ์‰ฝ๊ฒŒ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


@Jordyderuijter

์‹œ๋‚˜๋ฆฌ์˜ค ๋ผ์ธ๊ณผ URI(์‹ค์ œ๋กœ ๊ณ ์œ ํ•˜๊ณ  ์‹œ๋‚˜๋ฆฌ์˜ค ์ด๋ฆ„์„ ๊ฒ€์ƒ‰ํ•  ํ•„์š”๊ฐ€ ์—†์Œ)๋ฅผ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


@leggebroten

์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„ URL ๋ณ€๊ฒฝ

๋Œ€์‹  ์ด ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๊ณ ์œ ํ•œ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ธŒ๋ผ์šฐ์ € ๊ตฌ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

์–ด๋–ป๊ฒŒ ๋™์ ์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ? #912์— ๋Œ€ํ•œ ์ง€์› ์ถ”๊ฐ€

์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„ URL์„ ์‚ฌ์šฉํ•˜์—ฌ Browserstack์— ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ๊ธฐ๋กํ•˜์‹ญ์‹œ์˜ค.

์ด๋ฆ„ ๋Œ€์‹  line๊ณผ uri๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ž์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด line๊ณผ uri๋Š” ๊ณ ์œ ํ•˜์ง€๋งŒ ์ด๋ฆ„์€ ๊ณ ์œ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ์œ„ํ•ด json ํฌ๋งทํ„ฐ ๋˜๋Š” ์ด๋ฒคํŠธ ํ”„๋กœํ† ์ฝœ ํฌ๋งทํ„ฐ ํฌ๋งทํ„ฐ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ์ฒจ๋ถ€ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ๋ฐ ์‹œ๋‚˜๋ฆฌ์˜ค ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ Browserstack์—์„œ ์„ธ์…˜ ์ด๋ฆ„ ์ƒ์„ฑ

๋ผ์ธ + URI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํƒœ๊ทธ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์—ฌ ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„ ๋ธŒ๋ผ์šฐ์ € ํ•ด์ƒ๋„๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ด ๋ชจ๋“  ์˜ˆ์—์„œ ํ›„ํฌ์— ๋‹ค์‹œ ํƒœ๊ทธ๋‚˜ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ™•์‹ ํ•˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์•„์ง ์—†์Šต๋‹ˆ๋‹ค. ํƒœ๊ทธ์™€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ์ž‘์—…์„ ๋” ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๋” ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@charlierudolph ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ชจ์˜ ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ ์ด๋ฏธ ์ผ๋ถ€ ๋™๋ฃŒ์™€ ๋น ๋ฅธ ๋Œ€ํ™”๋ฅผ ๋‚˜๋ˆด๊ณ  ๊ณต์œ  "๋ฐฐ๊ฒฝ"์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์†”๋ฃจ์…˜์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชฉ๋ก ์ค‘ ํ•˜๋‚˜๋ฅผ ๋„˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@charlierudolph ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ถœ๋ ฅ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋ผ๋Š” ์ œ์•ˆ์ด ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ฝœ๋ฐฑ์ด ์ƒํƒœ ํ…Œ์ŠคํŠธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์ด์ „ ๋ฒ„์ „๋ณด๋‹ค ํ›จ์”ฌ ์—ด๋“ฑํ•ฉ๋‹ˆ๋‹ค.

0) ๊ด€์ฐฐ์ž ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฝœ๋ฐฑ์€ ์ง€์›ํ•˜๋Š” ๋™์ž‘์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1) ๊ทน๋„์˜ ์ทจ์•ฝ์„ฑ์„ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ค„ ๋ฒˆํ˜ธ์™€ ํŒŒ์ผ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์บ๋ฆฌ์ง€ ๋ฆฌํ„ด์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

2) ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ DRY๋ฅผ ์œ„๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค. ํƒœ๊ทธ๋กœ ํ‘œ์‹œ๋œ A/B ํ…Œ์ŠคํŠธ๋ฅผ ์ž์ฃผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ํฌํ•จ๋œ ๋‹จ๊ณ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ช…๋ น์ค„ ํ™•์žฅ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š” ํ•œ ํ…Œ์ŠคํŠธ์—๋Š” ํƒœ๊ทธ์™€ ์ง€์›ํ•˜๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ ๋‹จ๊ณ„๊ฐ€ ๋ชจ๋‘ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

3) ๊ฐœ๋ฐœ์ž๊ฐ€ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ์ถœ๋ ฅ ๊ตฌ๋ฌธ ๋ถ„์„์€ ๋ถˆํ•„์š”ํ•˜๊ณ  ์ง€๋ฃจํ•˜๋ฉฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅ ํ˜•์‹(๋นˆ์•ฝํ•œ ์ปคํ”Œ๋ง)์— ๋ฐ”์ธ๋”ฉํ•˜๊ณ  DRY๋ฅผ ์œ„๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค.

4) ์˜ค์ด์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ๋‹จ๊ณ„(ํ…Œ์ŠคํŠธ์˜ ์˜๋ฏธ๋ก ์  ๋ถ€๋ถ„)๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๊ฒฉ๋ฆฌ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์ž์˜ ์˜๋„์— ์œ„๋ฐฐ๋ฉ๋‹ˆ๋‹ค. ๋™์ž‘์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

5) ์„ ์–ธ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํƒœ๊ทธ๋Š” ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์ด๋ฉฐ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋  ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜๋ฏธ์ ์œผ๋กœ ์ผ๊ด€๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ๋‹จ๊ณ„๋Š” ํ…Œ์ŠคํŠธ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ๋‹จ๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ ํƒœ๊ทธ๋กœ ํ…Œ์ŠคํŠธ ์„ธํŠธ๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

์•„, ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ์‹ค์ œ๋กœ "๊ฑด๋„ˆ๋›ฐ๊ธฐ" ํ…Œ์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์‹คํ–‰์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด callback( null, 'pending' )์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด '๊ฑด๋„ˆ๋›ฐ๊ธฐ' ๊ธฐ๋Šฅ์€ ํƒ์›”ํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

@charlierudolph , ๋‚˜๋Š” ๋‹ค๋ฅธ ํ•ด๊ฒฐ์ฑ…์„ ์ƒ๊ฐํ•˜๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค ...
World ๊ฐœ์ฒด๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉ๋œ Scenario ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

World๋Š” ๋ชจ๋“  ์ฝœ๋ฐฑ์— ๋Œ€ํ•ด "this"๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ V2์™€ ์™„์ „ํ•œ ํŒจ๋ฆฌํ‹ฐ๋ฅผ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค(AfterAll ์ฝœ๋ฐฑ์— ๊ฒฐ๊ณผ๊ฐ€ ์ œ๊ณต๋œ ๊ฒฝ์šฐ).

@leggebroten

  1. ๊ด€์ฐฐ์ž ํŒจํ„ด์ด ์˜ค์ด์˜ ๋””์ž์ธ ๋ชฉํ‘œ๋ผ๋Š” ๋ง์„ ๋“ค์–ด๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค.
  2. ์‹œ๋‚˜๋ฆฌ์˜ค ์ด๋ฆ„๋„ ๋‹จ์ผ ์บ๋ฆญํ„ฐ ๋ณ€๊ฒฝ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ทจ์•ฝํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ จ ์—†๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ํŒŒ์ผ/์ค„ ๋ฒˆํ˜ธ ๋‚˜๋ˆ„๊ธฐ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜์ž๊ณ  ์ œ์•ˆํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ์ทจ์•ฝํ•œ ๋ถ€๋ถ„์€ ๊ทธ๋‹ค์ง€ ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  3. Using Steps to alter State violates DRY ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํƒœ๊ทธ๋Š” ๊ธฐ๋Šฅ ์„ ํƒ์— ์‚ฌ์šฉ๋˜๋ฉฐ ๋‹จ๊ณ„๋Š” ์„ค์ •/์•ก์…˜/๊ธฐ๋Œ€์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์€ ๋‹ค๋ฅธ ๋ชฉ์ ์ž…๋‹ˆ๋‹ค. ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ํ›„ํฌ๊ฐ€ ์žˆ๋Š” ์„ค์ •์„ ์œ„ํ•ด ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ง€์›์€ ์ตœ์†Œํ•œ์ด์ง€๋งŒ ๋ณต์žก์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ตฌ์ถ•๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
  4. ๋‚˜๋Š” ๋ณด๊ณ ๋ฅผ ์œ„ํ•ด ํฌ๋งทํ„ฐ ์ถœ๋ ฅ์„ ํŒŒ์‹ฑํ•˜๋Š” ๊ฒƒ์„ ์ œ์•ˆํ–ˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์‹คํ–‰์— ๊ด€์—ฌํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.
  5. Adding Steps (a semantic part of the test) to alter the Feature's state is counter to intent of Cucumber of isolating test writer ๋‚˜๋„ ์ดํ•ด๊ฐ€ ์•ˆ ๋œ๋‹ค. ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ƒํƒœ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ํ…Œ์ŠคํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?
  6. Tags are metadata ABOUT the test, it is semantically consistent to use them to alter the state in which the test will run . ์ผ๊ด€์„ฑ์ด ์žˆ๋‹ค๋Š” ์ ์— ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ํƒœ๊ทธ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์€ ์ง€์›ํ•˜์ง€๋งŒ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ณต์žกํ•œ ์ƒํƒœ ๋ณ€๊ฒฝ์€ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ์— ๋” ์ด์ƒ ์‹œ๋‚˜๋ฆฌ์˜ค ๊ฐœ์ฒด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. v2์™€์˜ ํŒจ๋ฆฌํ‹ฐ๊ฐ€ ๋ชฉํ‘œ๊ฐ€ ๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋Œ€ํ™”๊ฐ€ ๋‚˜์™”๊ณ  ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์„ ์ฐพ๊ณ  ์žˆ์–ด์„œ ๊ธฐ์ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ์˜ค์ด์˜ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ๊ตฌํ˜„์— ํ›จ์”ฌ ๋” ์˜์กดํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „์œผ๋กœ ๋Œ์•„๊ฐ€๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@charlierudolph ,

์‹œ๊ฐ„์„ ๋‚ด์–ด ์ด ๋ฌธ์ œ๋ฅผ ๋…ผ์˜ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. Cucumber-js๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•œ ์ž‘์—…์— ์ง„์‹ฌ์œผ๋กœ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋Œ€๋กœ V3๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ „ํˆฌ์ ์ผ ์ƒ๊ฐ์ด ์—†๋‹ค. ๊ฑฑ์ •์ด ๋˜๊ธฐ๋„ ํ•˜๊ณ  ์ œ ๋‹ต๋ณ€์— ๋‚˜์˜ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ „ ๋ฒ„์ „์˜ ๋ฌธ์„œํ™”๋œ ์ด๋ฒคํŠธ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์šด์˜ ์ฒด์ œ/๋ฒ„์ „, ๋ธŒ๋ผ์šฐ์ €/๋ฒ„์ „, ๋ฐ์Šคํฌํƒ‘/ ๋ชจ๋ฐ”์ผ ๋ฐ Optimizely A/B ํ…Œ์ŠคํŠธ.

๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋Šฆ์—ˆ์–ด ์žฅ์น˜ ์œ ํ˜•, OS/๋ฒ„์ „ ๋ฐ ๋ธŒ๋ผ์šฐ์ €/๋ฒ„์ „์€ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „์— ๊ฒฐ์ •๋˜์–ด์•ผ ํ•˜๋ฉฐ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค์— "OS ์„ค์ •" ๋‹จ๊ณ„์™€ "๋ธŒ๋ผ์šฐ์ € ์„ค์ •" ๋‹จ๊ณ„๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Cucumber์˜ ๋ชฉํ‘œ์™€ ์ง์ ‘์ ์œผ๋กœ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

๋˜๋Š” ์•ž์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์‹œ๋‚˜๋ฆฌ์˜ค ์ •๋ณด(๊ธฐ๋Šฅ URI, ์ด๋ฆ„, ํ–‰ ๋ฐ ํƒœ๊ทธ)๋ฅผ World ์ƒ์„ฑ์ž์— ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜๋ฏธ์ ์œผ๋กœ World ๊ฐ์ฒด์˜ ์˜๋„์™€ ์ผ์น˜ํ•˜๋ฉฐ ์บก์Šํ™” ๋ฐ ํ™•์žฅ์ด ๋” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋Œ€๋ถ€๋ถ„์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ œ๊ฑฐํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•ธ๋“ค๋Ÿฌ์˜ "this"๊ฐ€ World ๊ฐœ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ด€์ฐฐ์ž ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

  1. ๋‚˜๋Š” Observer Pattern์ด Cucumber์˜ ๋””์ž์ธ ๋ชฉํ‘œ๋ผ๊ณ  ๋งํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Hooks์™€ Events๋Š” Observer์ด๊ณ , ๋”ฐ๋ผ์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ƒํƒœ๋ฅผ ์ œ๊ณต๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ํ˜ธ์ถœ์ž์˜ ๊ตฌํ˜„๊ณผ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ๋‚˜๋Š” ์‹ค์ œ ์ด๋ฆ„์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ๋“ค์€ ๊ณ ์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Browserstack์—์„œ ์—ฐ๊ด€๋œ ์‚ฌ์šฉ์ž ์˜๋ฏธ ์„ธ์…˜ ์ด๋ฆ„์„ ๊ตฌ์ถ•ํ•˜๋Š” ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค.

  3. Before ๋™์•ˆ ํƒœ๊ทธ ์„ธํŠธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์–ด ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜์ •(๋‹จ๊ณ„ ์ถ”๊ฐ€)ํ•˜์ง€ ์•Š๊ณ ๋„ ์ƒํƒœ ๋ณ€๊ฒฝ(์˜ˆ: Optimizely URL ๋งค๊ฐœ๋ณ€์ˆ˜ ์„ค์ •)์„ ์œ„ํ•œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์„ฑ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์€ ํ…Œ์ŠคํŠธ(ํƒœ๊ทธ)์™€ ์„ค์ • ์‚ฌ์ด์— 1-1 ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ์žˆ์Œ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ๋ฅธ.

  4. ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ตฌํ˜„์— ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์šฐ๋ ค๋ฅผ ํ‘œ๋ช…ํ–ˆ์ง€๋งŒ ํ•„์š”ํ•œ ๊ด€์ฐฐ์ž ์ƒํƒœ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ์†”๋ฃจ์…˜์€ ๊ฐœ๋ฐœ์ž๋ฅผ ๋‹ค๋ฅธ ๊ตฌํ˜„(ํŒŒ์ผ ํ˜•์‹)์— ์˜์กดํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ? ์‚ฌ์šฉ์ž๊ฐ€ State ์†์„ฑ์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์ง€๋ฃจํ•˜๊ณ  ๋Š๋ฆฌ๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฌ์šด ์ž‘์—… ๊ตฌ๋ฌธ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋” ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

  5. ๋ถ„๋ช…ํžˆ ๋‹จ๊ณ„๋Š” ํ…Œ์ŠคํŠธ ์ƒํƒœ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Cucumber์˜ ๋””์ž์ธ ๋ชฉํ‘œ ์ค‘ ํ•˜๋‚˜๋Š” ๋‹จ๊ณ„๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์‚ฌ๋žŒ์ด ๊ธฐ๋ณธ ๊ตฌํ˜„์—์„œ ๊ฒฉ๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. EG๋Š” ๊ธฐ๋ณธ ์„ธ๋ถ€ ์‚ฌํ•ญ์— ์–ฝ๋งค์ด์ง€ ์•Š๊ณ  ์˜๋ฏธ๋ก ์  ๋™์ž‘์„ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์žฅ์น˜/๋ธŒ๋ผ์šฐ์ €/OS๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ ์ด ๋ชฉํ‘œ์— ์–ด๊ธ‹๋‚˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  6. ๋‹น์‹ ์„ ์œ„ํ•ด ํƒœ๊ทธ๋Š” ํ…Œ์ŠคํŠธ ์‹๋ณ„์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Cucumber Wiki ๋Š” ํƒœ๊ทธ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  7. ๊ตฌ์„ฑ ๋ฐ ๊ทธ๋ฃนํ™”
  8. ํ•„ํ„ฐ(๋ช…๋ น์ค„์„ ํ†ตํ•ด ์„ธํŠธ ์‹คํ–‰)
  9. ๊ด€๋ จ ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋งํฌ(์˜ˆ: Optimizely ํ”Œ๋ž˜๊ทธ)
  10. ํ”„๋กœ์„ธ์Šค์—์„œ ๊ธฐ๋Šฅ์ด ์–ด๋””์— ์žˆ๋Š”์ง€ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

Before ์ฝœ๋ฐฑ ๋™์•ˆ ํƒœ๊ทธ์— ์•ก์„ธ์Šคํ•˜๋ฉด ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ธŒ๋ผ์šฐ์ € ๊ตฌ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ ์ ˆํ•œ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ ์–ธ์ ์ž…๋‹ˆ๋‹ค. ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜๋„๊ฐ€ ๋‚œ๋…ํ™”๋ฉ๋‹ˆ๋‹ค.

์ด์ „ ๋ฒ„์ „์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ ํ˜ธ์ถœ ๋ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” WERE ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ˆ„์ถœ๋˜๋Š” ๊ฒฝ์šฐ ์ฝ๊ธฐ ์ „์šฉ "์‹œ๋‚˜๋ฆฌ์˜ค" ํ”„๋ก์‹œ๋ฅผ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

@charlierudolph ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

์‹œ๋‚˜๋ฆฌ์˜ค ์ด๋ฆ„๋„ ๋‹จ์ผ ์บ๋ฆญํ„ฐ ๋ณ€๊ฒฝ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ทจ์•ฝํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ จ ์—†๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ํŒŒ์ผ/์ค„ ๋ฒˆํ˜ธ ๋‚˜๋ˆ„๊ธฐ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜์ž๊ณ  ์ œ์•ˆํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ์ทจ์•ฝํ•œ ๋ถ€๋ถ„์€ ๊ทธ๋‹ค์ง€ ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค, ์‹œ๋‚˜๋ฆฌ์˜ค ์ด๋ฆ„๋„ ์ทจ์•ฝํ•˜์ง€๋งŒ ํŒŒ์ผ๊ณผ ์ค„๋กœ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐ ํ›จ์”ฌ ๋œ ์ทจ์•ฝํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋งค์ผ ๋กœ๊น…์—์„œ ์‹œ๋‚˜๋ฆฌ์˜ค ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ์‹คํŒจ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊น…์— ํŒŒ์ผ๊ณผ ์ค„ ๋ฒˆํ˜ธ๋งŒ ํ‘œ์‹œ๋˜๋ฉด ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์—ญ์ถ”์ ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋งŽ์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ธฐ๋Šฅ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ทธ ๋™์•ˆ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์˜ฎ๊ธฐ๋ฉด ์ƒํ™ฉ์ด ํ›จ์”ฌ ๋” ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค.

๋กœ๊น…์— ํŒŒ์ผ๊ณผ ์ค„ ๋ฒˆํ˜ธ๋งŒ ํ‘œ์‹œ๋˜๋ฉด ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์—ญ์ถ”์ ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋งŽ์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ๋” ์˜ค๋ฒ„ ํ—ค๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ํŒŒ์ผ๊ณผ ์ค„ ๋ฒˆํ˜ธ๋ฅผ ์•Œ๊ณ  ๋ฐ”๋กœ ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋‚˜๋ฆฌ์˜ค ์ด๋ฆ„์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ํ•ด๋‹น ํŒŒ์ผ ๋ฐ ํ–‰์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ๋” ์˜ค๋ฒ„ ํ—ค๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ํŒŒ์ผ๊ณผ ์ค„ ๋ฒˆํ˜ธ๋ฅผ ์•Œ๊ณ  ๋ฐ”๋กœ ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋‚˜๋ฆฌ์˜ค ์ด๋ฆ„์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ํ•ด๋‹น ํŒŒ์ผ ๋ฐ ํ–‰์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด, ๊ทธ ์‚ฌ์ด์— ๊ธฐ๋Šฅ ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜๊ณ  ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๋” ์ด์ƒ ๊ทธ ์ค„์— ์œ„์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด. ํŠนํžˆ ์ด์ „ ํ…Œ์ŠคํŠธ ์‹คํ–‰(์˜ˆ: 1์ฃผ ์ „)์˜ ๋กœ๊ทธ๋ฅผ ๋ณผ ๋•Œ. ์ด ๊ฒฝ์šฐ git์„ ํ†ตํ•ด ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์— ํ•ด๋‹น ๋ผ์ธ์— ์–ด๋–ค ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์—ˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

FWIW, ์˜ค์ด-๋ฃจ๋น„์—๋Š” "์‰ฌ์šด ๊ฒƒ์€ ์‰ฌ์›Œ์•ผ ํ•˜๊ณ , ์–ด๋ ค์šด ๊ฒƒ์€ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค"๋Š” ์›์น™์„ ์ถฉ์กฑํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ํ™•์žฅ์ ์ด ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ์•„์ด๋””์–ด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ์„  RunningTestCase ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ ํ›„ํฌ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Gherkin ์†Œ์Šค(์‹œ๋‚˜๋ฆฌ์˜ค/๊ฐœ์š”/ํƒœ๊ทธ ๋“ฑ)์— ๋Œ€ํ•œ ๋ชจ๋“  ์ •๋ณด์™€ ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ํ˜„์žฌ ๊ฒฐ๊ณผ ์ƒํƒœ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์šฐ๋ฆฌ์—๊ฒŒ ๋ฌด์–ธ๊ฐ€๋ฅผ ์‹œ๋„ํ•˜๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋งŒ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ˜„์žฌ ํ”Œ๋ ˆ์ด ์ƒํƒœ์— ๋Œ€ํ•œ ํˆฌ๋ช…์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‘˜์งธ, ํ•„ํ„ฐ ๊ฐ€

HTH

ํ•„ํ„ฐ์— ๋Œ€ํ•œ ๋งํฌ ๋’ค์— ์žˆ๋Š” ๋ฌธ์„œ๊ฐ€ ๋”์ฐํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฉ๊ธˆ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค! ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ ๊ณ ์น  ์‹œ๊ฐ„์€ ์—†์ง€๋งŒ ์—ฌ๊ธฐ์— ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๊ฐ€ ๋” ์žˆ์Šต๋‹ˆ๋‹ค. http://www.rubydoc.info/github/cucumber/cucumber-ruby/Cucumber/Filters

์•ˆ๋…•ํ•˜์„ธ์š” @charlierudolph ,

์ด ๋Œ€ํ™”์— ๋Œ€ํ•œ ํ›„์† ์กฐ์น˜๋ฅผ ์ทจํ•œ ์ง€ ์–ผ๋งˆ ๋˜์ง€ ์•Š์•„ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์ง„์ˆ ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

"์‹คํ–‰ ์ค‘์ธ ์‹œ๋‚˜๋ฆฌ์˜ค์— ํ•ด๋‹น ์œ ํ˜•์˜ ํ”„๋กœํ•„์ด ํฌํ•จ๋ฉ๋‹ˆ๊นŒ? ์„ธ๊ณ„์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ํ”„๋กœํ•„ ์œ ํ˜•์„ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ €์žฅํ•œ ๋‹ค์Œ ์ €์žฅ๋œ ํ”„๋กœํ•„์„ ์ œ๊ฑฐํ•˜๋ผ๋Š” ๋‹จ์ผ ํƒœ๊ทธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?"

ํŒ”๋กœ์šฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

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

PickleFilter์™€ ํ•จ๊ป˜ getTestCasesFromFileSystem์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐ˜ํ™˜๋œ ๊ฒฐ๊ณผ์™€ testCase๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์ƒค๋“œ๋กœ ๊ฐ๋„๊ธฐ์— ์ „๋‹ฌํ•  ํƒœ๊ทธ๋กœ ์‹œ๋‚˜๋ฆฌ์˜ค ํ•„ํ„ฐ๋ง์„ ์ง€์›ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ํฅ๋ฏธ๋กœ์šด ๋ณ‘๋ ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ์—์„œ ๋ฐ˜ํ™˜๋œ ์ •๋ณด๋Š” ํ›จ์”ฌ ๋” ์œ ์šฉํ•˜๋ฉฐ testCase ๊ฒฐ๊ณผ์— ์žˆ์œผ๋ฉด ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

PickFilter์˜ ๊ฒฐ๊ณผ ์˜ˆ:

{ pickle: 
     { tags: [Object],
       name: 'Github test with page object',
       language: 'en',
       locations: [Object],
       steps: [Object] },
    uri: 'test/features/examples/github-example.feature' }

์ •ํ™•ํžˆ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์ด ๊ฒฐ๊ณผ์—์„œ ๋‚˜์™€ ์—ฌ๊ธฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ํ˜œํƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Œ์„ ๋งŽ์ด ๋ด…๋‹ˆ๋‹ค.

๋‚ด ์˜ˆ์—์„œ ํฅ๋ฏธ๋กญ๋‹ค๋ฉด ์—ฌ๊ธฐ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/gd46/dibellag-automation-framework/blob/master/configuration.js#L91

@charlierudolph testCase ๊ฐ€ ์„ค์ •๋˜๋Š” ๊ณณ์ธ๊ฐ€์š”?

https://github.com/cucumber/cucumber-js/blob/fbff6b0fae54d2e341ee247addc60a9f05753f1d/src/formatter/helpers/event_data_collector.js#L22

๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์€ testCase๋ฅผ ๋”ฐ๋ผ ํ”ผํด์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํ”ผํด ๊ฒฐ๊ณผ์—์„œ testCase ๊ฒฐ๊ณผ๋กœ ๋ช‡ ๋น„ํŠธ๋ฅผ ๋” ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@gd46 ์ข‹์Šต๋‹ˆ๋‹ค. sourceLocation์„ ๋Œ€์ฒดํ•˜๋Š” ํ›„ํฌ์— ์ „๋‹ฌ๋˜๋Š” ๊ฐœ์ฒด์— pickle ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์—์„œ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/cucumber/cucumber-js/blob/master/src/runtime/test_case_runner.js#L153

์•ˆ๋…•ํ•˜์„ธ์š” @charlierudolph , ๋ฐฉ๊ธˆ ๊ท€ํ•˜์˜ ์˜๊ฒฌ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค! ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ณง ์‚ดํŽด๋ณด๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ด๋‹ค. ๊ธฐ๊บผ์ด ๊ธฐ์—ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@charlierudolph ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. sourceLocation๊ณผ ๊ฐ™์ด pickle์— ์ค„ ๋ฒˆํ˜ธ๊ฐ€ ์—†๋Š” uri๊ฐ€ ์ง์ ‘ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋Š” ์ฐจ์ด์ ์— ๋Œ€ํ•ด ๊ดœ์ฐฎ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ์ค„ ๋ฒˆํ˜ธ๋กœ uri๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์‚ฌ๋žŒ์€ ํ”ผํด ๊ฐœ์ฒด์—์„œ ๋ฐ˜ํ™˜๋œ ์ค„ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ด๊ฒƒ์— ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๊ณ  ํ™•์ธํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

์†Œ์Šค ์œ„์น˜ ๊ฐœ์ฒด๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋Œ€์‹  ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ํ”ผํด ๊ฐœ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ข‹์•„, ๊ทธ๊ฒƒ์€ ๋‚˜์—๊ฒŒ๋„ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์˜ค์ด์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์ด ์ฒ˜์Œ์ด๊ณ  ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๋Š” ํ–‰์„ ์ง€์ ํ–ˆ๋“ฏ์ด sourceLocation ์˜†์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

pickle: this.testCase.pickle

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ›„ํฌ์—์„œ ์†Œ๋น„ํ•˜๋ ค๋Š” ์‚ฌ๋žŒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

testCase.pickle.tags
testCase.pickle.name
etc. 

์—…๋ฐ์ดํŠธ๋ฅผ ํ–ˆ์ง€๋งŒ ๋ชจ๋“  ๊ด€๋ จ ํ…Œ์ŠคํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ 100% ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์•ˆ๋‚ด๋ฅผ ์ข€ ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

ํฌํฌ๋ฅผ ๋กœ์ปฌ ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด testCase ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{
  "sourceLocation": {
    "uri": "test\/features\/examples\/example.feature",
    "line": 4
  },
  "pickle": {
    "tags": [
      {
        "name": "@example",
        "location": {
          "line": 3,
          "column": 3
        }
      }
    ],
    "name": "Custom Transform should take belly and capitalize it",
    "language": "en",
    "locations": [
      {
        "line": 4,
        "column": 3
      }
    ],
    "steps": [
      {
        "text": "I have cucumbers in my belly",
        "arguments": [

        ],
        "locations": [
          {
            "line": 5,
            "column": 10
          }
        ]
      }
    ]
  },
  "result": {
    "duration": 7,
    "status": "passed"
  }
}

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

์ด๊ฒƒ์€ PickleFilter๊ฐ€ ํ”ผํด์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

{
    "pickle": {
      "tags": [
        {
          "name": "@example",
          "location": {
            "line": 3,
            "column": 3
          }
        }
      ],
      "name": "Custom Transform should take belly and capitalize it",
      "language": "en",
      "locations": [
        {
          "line": 4,
          "column": 3
        }
      ],
      "steps": [
        {
          "text": "I have cucumbers in my belly",
          "arguments": [

          ],
          "locations": [
            {
              "line": 5,
              "column": 10
            }
          ]
        }
      ]
    },
    "uri": "test\/features\/examples\/example.feature"
  }

๋”ฐ๋ผ์„œ ๋ชจ๋“  ๊ฒƒ์€ uri๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์€ ๋™์ผํ•œ ๋นผ๊ธฐ ํ”ผํด์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ•์กฐํ•˜๊ธฐ ์œ„ํ•ด PR์„ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ํ…Œ์ŠคํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ์—…๋ฐ์ดํŠธ ์ž‘์—…. ๋‚ด ๋กœ์ปฌ Java ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ์ด ์„ค์ •์„ ํ–ˆ๊ณ  ์ผ๋ถ€ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์—ˆ๋˜ ์ด์œ ๋ฅผ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ๋Š” ๋‹ซํžŒ ํ›„ ์ตœ๊ทผ ํ™œ๋™์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ฌ์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰