Cucumber-js: κΈ°λŠ₯ 후크 및 ν•΄ν‚Ή μ „/ν›„

에 λ§Œλ“  2017λ…„ 08μ›” 23일  Β·  10μ½”λ©˜νŠΈ  Β·  좜처: cucumber/cucumber-js

BeforeFeature/AfterFeature κΈ°λŠ₯ 후크가 μ—†λŠ” 이유λ₯Ό μ΄ν•΄ν•©λ‹ˆλ‹€. ν…ŒμŠ€νŠΈλŠ” μ΄μƒμ μœΌλ‘œ κ²©λ¦¬λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ‹€μš©μ μΈ μ„±λŠ₯μƒμ˜ 이유둜 λ°μ΄ν„°λ² μ΄μŠ€ κ³ μ • μž₯μΉ˜μ™€ 같은 것을 κΈ°λŠ₯λ‹Ή ν•œ 번 μ„€μ •ν•˜λŠ” 것이 더 λ‚˜μ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

#614에 μ§€μ •λœ ν•΄κ²° 방법은 λ‹€μŒκ³Ό 같은 이유둜 λΆ€μ μ ˆν•©λ‹ˆλ‹€.

  1. μ—°μ†λœ κΈ°λŠ₯에 λ™μΌν•œ νƒœκ·Έκ°€ μžˆλŠ” 경우 Afterλ₯Ό ν˜ΈμΆœν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  2. νƒœκ·Έκ°€ μ§€μ •λœ κΈ°λŠ₯이 λΉŒλ“œμ˜ λ§ˆμ§€λ§‰ ν…ŒμŠ€νŠΈμΈ 경우 Afterλ₯Ό ν˜ΈμΆœν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

3.0.0 μ΄μ „μ—λŠ” registerHandler('BeforeFeatures')의 첫 번째 인수둜 μ „λ‹¬λœ μ»¨ν…μŠ€νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ 이 κΈ°λŠ₯을 ν•΄ν‚Ήν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

이 κΈ°λŠ₯에 λŒ€ν•œ PR을 μˆ˜λ½ν•˜κ±°λ‚˜ 3.0μ—μ„œ μœ μ‚¬ν•œ μ»¨ν…μŠ€νŠΈλ₯Ό μ œκ³΅ν•˜μ—¬ μ΅œμ†Œν•œ 해킹을 λ‹€μ‹œ κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” 것에 λŒ€ν•œ 생각이 μžˆμŠ΅λ‹ˆκΉŒ?

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

BeforeFeature/AfterFeature ν›„ν¬μ˜ 경우 +1
ν…ŒμŠ€νŠΈ 격리와 μ„±λŠ₯의 κ· ν˜•μ„ μœ μ§€ν•΄μ•Ό ν•œλ‹€λŠ” 데 λ™μ˜ν•©λ‹ˆλ‹€. ν˜„μž¬ ν”„λ ˆμž„μ›Œν¬κ°€ κ΅¬μΆ•λœ 방식은 λ°˜λ³΅λ˜λŠ” λ°°κ²½ 단계λ₯Ό μ œμ™Έν•˜κ³  단일 κΈ°λŠ₯으둜 μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μ—°κ²°ν•˜λŠ” 것이 거의 μ—†μŠ΅λ‹ˆλ‹€. μ–΄λ–€ κ²½μš°μ—λŠ” λ°°κ²½ 단계가 λ°˜λ³΅λ˜λŠ” 것을 μ›ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. 였히렀 κΈ°λŠ₯ μ‹œμž‘ μ‹œ ν•œ 번만 λ°œμƒν•˜κ³  λͺ¨λ“  μ‹œλ‚˜λ¦¬μ˜€κ°€ μ™„λ£Œλœ ν›„μ—λ§Œ μ‚­μ œλ˜λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  10 λŒ“κΈ€

μ—°μ†λœ κΈ°λŠ₯에 λ™μΌν•œ νƒœκ·Έκ°€ μžˆλŠ” 경우 Afterλ₯Ό ν˜ΈμΆœν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이해가 μ•ˆ λΌμš”. 이것에 λŒ€ν•΄ 더 μžμ„Ένžˆ μ•Œλ €μ£Όμ‹€ 수 μžˆμŠ΅λ‹ˆκΉŒ? 쑴재 여뢀에 관계없이 νƒœκ·Έμ™€ κ΄€λ ¨λœ After 후크λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή ν•΄κ²° 방법이 제곡된 이후 νƒœκ·Έ ꡬ문이 λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

νƒœκ·Έκ°€ μ§€μ •λœ κΈ°λŠ₯이 λΉŒλ“œμ˜ λ§ˆμ§€λ§‰ ν…ŒμŠ€νŠΈμΈ 경우 Afterλ₯Ό ν˜ΈμΆœν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ΄λ²ˆμ—λ„ 이해가 잘 μ•ˆκ°€μ„œ μ„€λͺ…μ’€ λΆ€νƒλ“œλ¦½λ‹ˆλ‹€. After 후크λ₯Ό μ‚¬μš©ν•  수 μžˆμ–΄μ•Ό ν•˜μ§€λ§Œ 이것이 λ§ˆμ§€λ§‰ 후크인지 여뢀에 λŒ€ν•œ μ»¨ν…μŠ€νŠΈλ₯Ό μžƒκ²Œ λ©λ‹ˆλ‹€. μ΄μƒμ μœΌλ‘œλŠ” μ—¬κΈ°μ„œ λΆ„ν•΄λ₯Ό μˆ˜ν–‰ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.


λ˜ν•œ 당신은 λ‚™λ‹΄ν•˜λŠ” μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μ—°κ²°ν•˜λ €κ³  λ…Έλ ₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ 쀑 ν•˜λ‚˜λ₯Ό μ œμ•ˆν•©λ‹ˆλ‹€.

  • μ‹œλ‚˜λ¦¬μ˜€ μ—°κ²° 끊기
  • λ‹€μ–‘ν•œ 지원 νŒŒμΌμ„ λ‘œλ“œν•˜λŠ” 였이-jsλ₯Ό μ—¬λŸ¬ 번 μ‹€ν–‰ν•˜κ³  BeforeAll/AfterAll을 μ‚¬μš©ν•©λ‹ˆλ‹€.

λͺ…ν™•νžˆ ν•˜μžλ©΄, λ‚΄κ°€ μ–ΈκΈ‰ν•˜λŠ” ν•΄κ²° 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

this.Before({ tags: ['<strong i="6">@featurehook</strong>'] }, function () {
  // log user in (if needed)
})

this.Before({ tags: ['~<strong i="7">@featurehook</strong>'] }, function () {
  // log user out (if needed)
})

λͺ‡ 가지 κΈ°λŠ₯을 κ³ λ €ν•˜μ‹­μ‹œμ˜€.

<strong i="11">@featurehook</strong>
Feature: feature 1
   Scenario: scenario 1

<strong i="12">@featurehook</strong>
Feature: feature 2
   Scenario: scenario 2

Feature: feature 3
   Scenario: scenario 3

<strong i="13">@featurehook</strong>
Feature: feature 4
   Scenario: scenario 4

μœ„μ˜ μˆœμ„œλ‘œ μ‹€ν–‰ν•˜λ©΄ κΈ°λŠ₯ 1κ³Ό κΈ°λŠ₯ 2 사이에 λΆ„ν•΄κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κΈ°λŠ₯ 4 이후에도 λΆ„ν•΄κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ λ‹€λ₯Έ ν…ŒμŠ€νŠΈ μΌμΉ˜κ°€ μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€ ~ @featurehook (이것은 λ‹€μŒμœΌλ‘œ κ³ μΉ  수 μžˆμŠ΅λ‹ˆλ‹€. κ²°κ΅­).

μ €λŠ” μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μ—°κ²°ν•˜λ €κ³  ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ €μ—κ²ŒλŠ” 격리와 μ„±λŠ₯ κ°„μ˜ κ· ν˜•μ„ 자유둭게 κ²°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μ–‘ν•œ κ΅¬μ„±μœΌλ‘œ ν…ŒμŠ€νŠΈ SMTP μ„œλ²„λ₯Ό μ„€μ •ν•˜λŠ” ν…ŒμŠ€νŠΈμ˜ 예λ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

<strong i="20">@smtpConfig1</strong>
Feature: ....

<strong i="21">@smtpConfig2</strong>
Feature: ....

μ‹œλ‚˜λ¦¬μ˜€λ₯Ό λΆ„ν•΄ν•˜μ§€ μ•ŠμŒμœΌλ‘œμ¨ μ‹œλ‚˜λ¦¬μ˜€ 간에 λΆ€μž‘μš©μ΄ μžˆμ„ 수 μžˆμ§€λ§Œ 이 경우 μˆœλ„μ™€ μ„±λŠ₯ μ‚¬μ΄μ˜ 절좩이 κ°€μΉ˜κ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ£„μ†‘ν•˜μ§€λ§Œ 이것은 μ§€μ›λ˜μ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우λ₯Ό λ‹€λ£¨λŠ” 단일 μ‹œλ‚˜λ¦¬μ˜€μ™€ λͺ¨λ“  μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ μƒνƒœλ₯Ό κ³΅μœ ν•˜λŠ” κΈ°λŠ₯이 μžˆμŠ΅λ‹ˆλ‹€. @featurehook이 μžˆλŠ” λ§ˆμ§€λ§‰ μ£Όμ„μ˜ μ˜ˆλŠ” μ–΄μ¨Œλ“  BeforeFeature/AfterFeatureλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄κ²°λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

BeforeFeature/AfterFeature ν›„ν¬μ˜ 경우 +1
ν…ŒμŠ€νŠΈ 격리와 μ„±λŠ₯의 κ· ν˜•μ„ μœ μ§€ν•΄μ•Ό ν•œλ‹€λŠ” 데 λ™μ˜ν•©λ‹ˆλ‹€. ν˜„μž¬ ν”„λ ˆμž„μ›Œν¬κ°€ κ΅¬μΆ•λœ 방식은 λ°˜λ³΅λ˜λŠ” λ°°κ²½ 단계λ₯Ό μ œμ™Έν•˜κ³  단일 κΈ°λŠ₯으둜 μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μ—°κ²°ν•˜λŠ” 것이 거의 μ—†μŠ΅λ‹ˆλ‹€. μ–΄λ–€ κ²½μš°μ—λŠ” λ°°κ²½ 단계가 λ°˜λ³΅λ˜λŠ” 것을 μ›ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. 였히렀 κΈ°λŠ₯ μ‹œμž‘ μ‹œ ν•œ 번만 λ°œμƒν•˜κ³  λͺ¨λ“  μ‹œλ‚˜λ¦¬μ˜€κ°€ μ™„λ£Œλœ ν›„μ—λ§Œ μ‚­μ œλ˜λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

항상 느리고 μž‘μ—…ν•˜κΈ° νž˜λ“  Browserstackκ³Ό 같은 μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ—(Saucelabs와 같은 λ‹€λ₯Έ 원격 μ„œλ²„ κ³΅κΈ‰μžλ„ λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€) 일반적으둜 BeforeFeature 및 AfterFeature 이벀트 ν•Έλ“€λŸ¬λ₯Ό μ‚¬μš©ν•˜μ—¬ κΈ°λŠ₯ νŒŒμΌλ‹Ή μ…€λ ˆλŠ„ μ„Έμ…˜ 및 λΆ„ν•΄λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ λ‚΄ νŒŒμΌμ— μ–ΈκΈ‰λœ ν•΄λ‹Ή κΈ°λŠ₯κ³Ό κ΄€λ ¨λœ μ‹œλ‚˜λ¦¬μ˜€κ°€ ν•¨κ»˜ μ‹€ν–‰λ˜κ³  각 μ‹œλ‚˜λ¦¬μ˜€μ˜ κ²Œμ‹œλ₯Ό μƒˆλ‘œ μ‹œμž‘ν•˜κΈ° μœ„ν•΄ λΈŒλΌμš°μ € 화면을 μƒˆλ‘œ 고치고 ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ μ•± μƒνƒœλ₯Ό μƒˆλ‘œ κ³ μΉ©λ‹ˆλ‹€. λ”°λΌμ„œ μ–΄λ–€ λ©΄μ—μ„œλŠ” 격리되고 ν…ŒμŠ€νŠΈ μ„±λŠ₯에도 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ΄λŠ” μœ„μ—μ„œ μ œμ•ˆν•œ 바와 같이 κΈ°λŠ₯ νŒŒμΌλ³„λ‘œ 였이jsλ₯Ό μ‹€ν–‰ν•˜λŠ” 것보닀 Before/After κΈ°λŠ₯ 후크λ₯Ό λ‹€μ‹œ μ‚¬μš©ν•˜λ„λ‘ ν•˜λŠ” 경우둜 κ°„μ£Όλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

BeforeFeature/AfterFeature ν›„ν¬λŠ” e2e/uat/bdd/call-it-whatever-you-want μ˜€μ΄κ°€ λ§Œλ“€μ–΄μ§€λŠ” ν…ŒμŠ€νŠΈμ— ν•„μˆ˜μ μž…λ‹ˆλ‹€.

Cucumber의 μ£Όμš” "경쟁자"λŠ” ν•΄ν‚Ή 없이 이λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€(예: JBehave, RobotFramework). μ΄λŠ” ν”„λ ˆμž„μ›Œν¬μ˜ μ μ ˆν•œ κΈ°λŠ₯μž…λ‹ˆλ‹€.

이 λ¬Έμ œλŠ” ν™•μ‹€νžˆ Cucumber μ‚¬μš©μ— λŒ€ν•œ μ°¨λ‹¨μž…λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”... 이와 κ΄€λ ¨λœ λ¬Έμ œμ— 직면해 μžˆμŠ΅λ‹ˆλ‹€. 제 κ²½μš°μ—λŠ” νƒœκ·Έκ°€ μ§€μ •λœ Before 및 After 후크λ₯Ό μ‚¬μš©ν•˜μ—¬ UIλ₯Ό ν…ŒμŠ€νŠΈν•˜λŠ” 데 μ‚¬μš©ν•  데이터λ₯Ό 생성/μ‚­μ œν•©λ‹ˆλ‹€. Before ν›„ν¬μ—μ„œ API 끝점을 λˆ„λ₯΄κ³  데이터λ₯Ό μƒμ„±ν•˜κ³  After ν›„ν¬μ—μ„œ λ‹€λ₯Έ API 끝점을 눌러 μ‚­μ œν•©λ‹ˆλ‹€(생성 μ‘λ‹΅μ—μ„œ λ°˜ν™˜λœ 개체의 IDλ₯Ό μ €μž₯ν•œ λ‹€μŒ ν•΄λ‹Ή ID둜 μ‚­μ œ νŽ˜μ΄λ‘œλ“œλ₯Ό λΉŒλ“œν•©λ‹ˆλ‹€. )

λ¬Έμ œλŠ” ν•΄λ‹Ή 데이터λ₯Ό μ‚¬μš©ν•˜κ³  후크λ₯Ό νŠΈλ¦¬κ±°ν•˜λŠ” μ‹œλ‚˜λ¦¬μ˜€κ°€ λ§ˆμ§€λ§‰μœΌλ‘œ 싀행될 λ•Œ 후크가 νŠΈλ¦¬κ±°λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€...

이 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλŠ” 방법이 μžˆλ‚˜μš”??

감사 ν•΄μš”

κΈ°λŠ₯ 전후에 +1.
우리의 μ‚¬μš© μ‚¬λ‘€λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ λΈŒλΌμš°μ €μ—λŠ” λ‚˜νƒ€λ‚˜μ§€ μ•ŠλŠ” νŠΉμ • λΈŒλΌμš°μ €μ˜ 버그λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 κΈ°λŠ₯에 νƒœκ·Έλ₯Ό μ§€μ •ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

@ie-8-only
Business Need: IE8 should have limited functionality, but what is displayed, should be displayed correctly

@no-access @ssl-insecurity <strong i="8">@security</strong> @BUG-1876
Scenario: No access
   Given I am on the home page
   When I see that my browser is not supported
   Then I should not be able to access the core site functionality

@formatting-issue <strong i="9">@bugs</strong> @BUG-1210
Scenario: The menu should not be formatted like a staircase
   For the users to be able to navigate to the about us / contact us area of the site, the site navigation should be active
   Given I am on the home page
   When I see the menu
   Then it should be displayed in a line

μ΄λ ‡κ²Œ ν•˜λ©΄ λΈŒλΌμš°μ €λ₯Ό λ‹«κ³  BeforeFeature ν›„ν¬μ—μ„œ IEλ₯Ό μ—΄ 수 있으며 AfterFeature ν›„ν¬μ—μ„œ λ‚˜λ¨Έμ§€ μ œν’ˆκ΅°μ— μ‚¬μš© 쀑인 λΈŒλΌμš°μ €λ₯Ό λ‹€μ‹œ μ—΄ 수 μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  μ‹œλ‚˜λ¦¬μ˜€μ— λŒ€ν•΄ λΈŒλΌμš°μ €λ₯Ό λ‹«μ•˜λ‹€κ°€ λ‹€μ‹œ μ—¬λŠ” 데 λ§Žμ€ μ‹œκ°„μ΄ κ±Έλ¦¬λ―€λ‘œ μ‚¬μš©ν•˜κΈ°μ— 쒋은 κΈ°λŠ₯μž…λ‹ˆλ‹€.

λ©”λͺ¨:
λ‚˜λŠ” 세계 객체λ₯Ό ν¬ν•¨ν•˜λŠ” λŒ€μ•ˆμ΄ μžˆλ‹€λŠ” 것을 μ•Œκ³  μžˆμŠ΅λ‹ˆλ‹€(ν˜„μž¬ λΈŒλΌμš°μ €λ₯Ό 거기에 μ„€μ •ν•˜κ³  λΈŒλΌμš°μ €κ°€ 이듀에 λŒ€ν•œ beforeAll Hookμ—μ„œ ν•„μš”ν•œ 것이 μ•„λ‹Œ κ²½μš°μ—λ§Œ λ‹«μŒ). 이미 ν›„ν¬μ—μ„œ μ™„λ£Œλ˜κ±°λ‚˜ Selenium은 절반의 μ‹œκ°„ λ™μ•ˆ νžˆμ‹œ 핏을 던질 것이라고 κ²°μ •ν•©λ‹ˆλ‹€.

이 κΈ°λŠ₯이 μœ μš©ν•œ 또 λ‹€λ₯Έ 예인 BeforeFeature Hookμ—μ„œ κΈ°λŠ₯에 λŒ€ν•œ μΆ”κ°€ μ„€λͺ…μœΌλ‘œ κΈ°λŠ₯에 ν…μŠ€νŠΈλ₯Ό μ²¨λΆ€ν•˜λ €λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€.

νŠΉμ • μœ ν˜•μ˜ ν…ŒμŠ€νŠΈμ—μ„œλŠ” κΈ°λŠ₯ 후크 μ „/ν›„κ°€ μœ μš©ν•  것이라고 μƒκ°ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ .NET용 Cucumber 라이브러리인 Specflowμ—λŠ” λ‹€μŒμ΄ κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
https://specflow.org/documentation/Hooks/

이 μŠ€λ ˆλ“œλŠ” λ‹«νžŒ ν›„ 졜근 ν™œλ™μ΄ μ—†μ—ˆκΈ° λ•Œλ¬Έμ— μžλ™μœΌλ‘œ μž κ²ΌμŠ΅λ‹ˆλ‹€. κ΄€λ ¨ 버그에 λŒ€ν•œ μƒˆ 문제λ₯Ό μ—¬μ‹­μ‹œμ˜€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰