-
비개발자도 이해할 수 있는(?) Cucumber Gherkin 문법 가이드지식창고/테스트 2024. 1. 26. 21:32
최근 팀에서 이번 목표로 테스트 코드를 작성해보기로 했습니다. 제가 맡고 있는 프로젝트는 단위 테스트를 적용하기 어려운 문제가 있어(무슨 문제인지는 잘 이해하지 못함..) 인수 테스트를 도입하기로 했습니다.
인수테스트 : 사용자 스토리(시나리오)에 맞춰 수행하는 테스트, 소프트웨어를 고객에게 인수하기 위한 테스트이다.
테스트 시나리오를 기획자와 함께 만들어가야 하기 때문에 기획자분들에게 도움이 되고자 이 문서를 작성하게 되었습니다. 공식 docs 에 적혀있는 주요 문법에 대해서 설명하고, 추가적으로 좀 더 이해하기 쉬운 주관적인 설명이 포함되어 있습니다. 핵심적인 키워드에는 🌠 이모지가 붙어 있습니다.
먼저, Gherkin이란?
Cucumber 라는 행동 기반으로 접근하는 테스트 방식인 BDD(Behavior-Driven Development) 를 지원하는 도구입니다. 테스트 시나리오를 cucumber 가 이해할 수 있도록 만들어주는 문법이 바로 Gherkin 입니다. 실제 시나리오처럼 자연어로 작성할 수 있다는 가장 큰 장점이 있습니다. (그리고 한국어도 지원!)
(cucumber 는 오이, gherkin 은 절인 오이, 피클라고 하네요😮)
Gherkin 을 작성할 파일 만들기
먼저 확장자가 .feature 인 파일을 만듭니다.
그리고 제일 먼저 Feature 키워드를 선언합니다.
Feature:
💡 모든 키워드에 콜론( : ) 이 붙는 것은 아니니 유의해야 합니다!!
Gherkin 키워드
다음은 .feature 파일에서 사용되는 키워드입니다.
🌠 Feature
- : 콜론을 사용합니다.
- .feature 파일은 반드시 Feature 키워드로 시작해야 합니다.
- 소프트웨어의 기능을 설명하거나 연관된 시나리오를 그룹핑 하는 키워드입니다.
- 너무 공들여 작성할 필요 없습니다! 의도 파악과 의미 전달이 용이한 정도로 작성하면 됩니다.
- 키워드 바로 아래에는 설명을 추가할 수 있습니다.
- 만약 Background, Rule, Scenario(Example) or Scenario Outline 키워드를 사용하게 된다면 Feature 키워드에 작성 가능한 설명이 끝납니다.
Feature: 단어 맞추기 (설명) 단어 맞추기 게임은 2인용 턴제 게임입니다. 메이커는 브레이커가 맞혀야 할 단어를 만듭니다. 게임은 브레이커가 메이커의 단어를 맞히면 종료됩니다. (시나리오 시작) Scenario(=Example): 메이커가 게임을 시작합니다.
Rule
- : 콜론을 사용합니다.
- 공식 문서에서 Gherkin 6 문법이라 호환성 이슈를 언급하고 있습니다.
- 이슈가 있다고 하니 당분간은 사용하지 않는 것이...
- 구현해야 하는 비지니스 규칙을 표현하기 위한 키워드입니다.
🌠 Scenario
- : 콜론을 사용합니다.
- = Example (단수형) 과 동일한 키워드입니다.
- 아래에서 설명할 Scenario Outline 단계에서 사용되는 Examples 와 혼동이 올 수 있으니 Scenario 키워드를 사용하는게 좋습니다.
- 비지니스 규칙을 설명하는 구체적인 예시입니다.
- Given, When, Then 등의 step 으로 이루어집니다.
- 너무 많은 step 은 가독성이 떨어지기 때문에 3 ~ 5 step 을 권장합니다.
💡 각 step 의 문장은 중복되선 안됩니다. 각각이 고유한 단계 명을 가져야 합니다.
이미 사용한 문장은 다른 시나리오의 step 에서도 사용하면 안됩니다.
Given 가필드는 고양이다. Then 가필드는 고양이다. 다른 키워드를 사용했지만 같은 step 으로 인식하기 때문에 아래에 쓰인 Then 은 무시됩니다.
🌠 Given
- 콜론을 사용하지 않습니다.
- 시스템의 초기 컨텍스트, 즉 초기 시나리오의 장면이나 조건을 설명하는 데 사용합니다.
- 일반적으론 과거에 있었던 일입니다.
- 사용자가 시스템과 상호작용을 시작하기 전에 어떤 상태인지 알려주는 역할입니다.
🌠 When
- 콜론을 사용하지 않습니다.
- 이벤트나 액션을 설명합니다.
- 사용자와 시스템간의 상호작용, 다른 시스템에 의해 발생할 수 있는 이벤트 등을 적습니다.
- 구현에 대한 세부 사항은 숨깁니다. (개발 단에서 정의)
When 관리자가 리포트를 생성하면
🌠 Then
- 콜론을 사용하지 않습니다.
- 예상되는 결과나 결과에 대해서 설명합니다.
- 사용자가 눈으로 확인할 수 있는 것들에 대해서 묘사합니다.
- 시스템에서 나오는 것으로 묘사
- ui, 알럿 메시지, 보고서 등등
Then 사용자는 리포트를 볼 수 있다.
Given, When, Then 을 여러 번 쓰려면 🌠 And, But 을 사용해 키워드를 대체해서 사용할 수 있습니다.
[before] Given A Given B Given C [after] Given A And B But C
full version 예시 Scenario: 통장의 돈 인출하기 Given 깨꾹이는 통장이 있다. And 깨꾹이의 잔액은 400 만원이다. When 돈을 인출할 때 Then ATM 은 카드를 삼켜야 한다. And 돈이 인출되어야 한다.
🌠 Scenario Outline
- 콜론을 사용합니다.
- 시나리오를 다른 조건으로 여러 번 반복해야 할 때 사용합니다.
- 교체하면서 테스트 해야 하는 변수들은 <> 으로 감싸줍니다.
- Examples (복수형) 에는 변수에 테스트 해볼 값들을 테이블로 정리 할 수 있습니다.
- 콜론을 사용합니다.
- 테이블은 | 로 구분합니다. ( shift + 원화 모양 또는 \ 역슬래시 를 누르면 입력할 수 있습니다. )
- 들여쓰기 안 맞춰도 되지만, 열 개수는 맞아야 함!
Scenario Outline: 마트에서 살 수 있는 물건 Given 마트에는 여러 물건이 있다. When 판매자가 <과일>에 <가격>원 가격표를 붙히면 Then 소비자는 과일을 살 수 있다. Examples: | 과일 | 가격 | | 사과 | 1000 | | 바나나 | 2000 |
Background
- 콜론을 사용합니다.
- 모든 시나리오에서 동일한 Given step을 반복하는 경우에 사용합니다.
- 모든 시나리오에서 반복되기 때문에 주의해야 합니다.
- 복잡하면 안되고, 짧은 동작을 정의합니다.
- Scenario 전에 선언하며, 시나리오와 같은 들여쓰기 레벨입니다.
Feature: Tistory 사용해보기 Background: Given 로그인 한다. Scenario: 글을 작성한다. Given ~~~ Scenario: 다른 사람의 글을 읽는다. Given ~~~
Docs Strings
- 키워드가 아닙니다. """ """ 을 사용해 상세한 설명을 작성할 수 있습니다.
- """ """ 사이에 쓰여진 말들은 주석과 같습니다. 테스트를 시행할 때는 무시되는 영역입니다.
Given 나는 깨꾹이를 좋아한다. """ 깨꾹이는 개구리 캐릭터이다. """ When ... Then ...
주로 많이 사용하는 키워드에 대해서 작성했습니다. 제가 시나리오를 짜기위해 미리 정리해둔 내용들이었는데 기획자분들에게도 도움이 될 수 있어서 기뻤습니다. 쉽게 쓰려고 노력했습니다😅
팀원분이 공유해주신 문서인데 시나리오를 어떻게 써야할지 아직 감이 잘 오지 않는다면 아래 문서를 참고해보시는 것도 도움이 될 것 같습니다 :)
'지식창고 > 테스트' 카테고리의 다른 글
Selenium, Playwright에서 XPath, CSS Selector 사용팁 (0) 2024.02.22 Selenium, Playwright 트러블슈팅 (0) 2024.02.15 Selenium, Cypress, Playwright 비교 (0) 2024.02.10