이번 포스트에서는 Cucumber framework에서 쓰이는, Gherkin
이라는 문법에 대해서 작성합니다.
It is a Business Readable, Domain specific language that lets you describe software’s behavior
보통의 business requirement는 Dev와 QA에서 각각 받아들이는 입장에서의 배경지식등이 다르기 때문에, 요구사항에 대한 이해차이가 발생하기 마련입니다.
그렇기 때문에, Business Analyst(혹은 유저)가 이해관계자들과 합의하에 제작된, 공통된 format의 문서를 명확하게 작성하여 Dev와 QA의 이해를 맞춰야할 필요가 있게됩니다.
Gherkin
은 그러한 공통된 format을 지원하는 Cucumber의 툴? 기능? 이라고 생각하면 쉽습니다.
Feature
represents Business requirement.
.feature
파일은 어떠한 시나리오들로 구성된 하나의 TestSuite(테스트케이스 들의 집합)이며, Business requirement를 표현합니다.
Cucmber에서는 .feature
파일이 시나리오를 포함하고 있습니다. 간단하게 .feature
라는 확장자를 붙여 파일을 작성하면, feature
파일이 되는 것 입니다. 이 안에, 어떠한 특정 기능단위로 그룹지어진 기능 시나리오 (use-case)를 작성합니다.
.feature
파일을 작성하면, Gherkin
문법에 맞추어 일반적인 텍스트를 작성하면 됩니다.
.feature
파일을 만들 때의 convention은, 파일의 네이밍은 소문자로 해야한다는 것입니다.
feature
파일에서의 각각의 문장은, 하나의 실행 메소드(테스트 메소드)로 표현이 됩니다.
login.feature
에는, 로그인과 관련된 Spec이 서술되어 있습니다.
하나의 시나리오는, 하나의 테스트케이스입니다.
In Cucumber testcases are represented as Scenario.
Scenario contains Steps which are equivalent to test steps and use the following keywords (Gherkin syntax) to denote them. Give, When, But, Then
Cucumber에서는 테스트케이스가 Scenario
로 표현됩니다. Scenario
는 어떠한 Step
(단계)로 구성되어 있는데요, 이 Step
은 어떠한 테스트를 진행하는 각 단계 라고 이해하면 좋을 것 같습니다.
이 Step
들은 아래와 같은 특정한 keyword로 표현할 수 있습니다.
Given
: 전제조건When
: User가 어떠한 행위를 했을 때~ (Input)Then
: Input을 넣었을 때 예상되는 기대값. (Expected Result)테스트케이스를 작성할 떄에는, 어떠한 시나리오에 근거하여 작성할 수 있어야합니다.
만일, Business Analyst(혹은 유저)가 위와 같은 형식으로 요구사항을 제공해주지 않는다면, cucumber를 이용할 수 없게되는데, 이 경우에라도 Cucumber를 이용하고 싶다하면 직접 Scenario keyword format에 맞추어 작성 혹은 기존 테스트케이스들을 변형을 해주어야 합니다.
우리가 어떤 business requirement를 정의할 때는, 가끔은 여러개의 전제조건이나 유저 액션, 여러 기대값들이 있을 수 있습니다.
그럴때는 And
와 But
키워드를 사용하여 정의할 수도 있습니다.
And
: This is used for statements that are an addition to the previous Steps and represent positive statement.But
: This is used for statements that are an addition to previous Steps and represent negative statement.여러개의 조건들이 온다면, and
로 묶을 수 있고, 부정적인 테스트케이스가 온다면 but
으로 표현할 수 있습니다.
Scenario Outline: Search for items and then move to checkout page
Given User is on Greencart landing page
When User searched for <name> Vegetable
And Added items to cart
And User proceeded to Checkout page for purchase
Then Verify selected <name> items are displayed in checkout page
Examples:
|name|
|"Brinjal" |
|"Beetroot" |
Reference