🥒 Cucumber 이해하고 잘 쓰는 방법
🥒 Cucumber
Cucumber (큐컴버)
는 Behaviour-Driven Development (BDD)
지원용 툴이다. BDD는 소프트웨어 개발에서 비지니스와 테크니컬한 부분 사이의 문제를 줄이기 위해 시작되었다. 협옵을 통해 문제는 해결하고, 작은 주기의 빠른 흐름으로 피드백을 늘리는 동시에 문서화도 할수 있는 방식이다. 애자일 환경에서 많이 사용되며, 작지만 여러개의 User story들이 애자일 좋은 개발 환경을 구축하는데 도움을 준다.
보통은 Gherkin (절킨)
이라는 문법을 사용한다. 이는 Step Definition (스텝 데피니션) 시스템으로, '사람이 읽을 수 있는' 방식으로 적게된다. 명확한 실행 사양, Cucumber를 이용한 테스트 자동화 및 실제로 어떻게 동작하는지 문서화가 동시에 이뤄질 수 있다. Gherkin은 여러 다양한 프로그래밍 언어를 지원하고 있어 매우 많이 사용되고 있다.
각 Step Definition
은 Given/When/Then, 혹은 이전 스텝을 따라가는 And로 시작되어야 하며,
다음은 예제 example.feature
파일이다:
# Example feature
Feature: Log in with Email
@before
Background:
Given user is on the log in with email screen
@ui
Scenario: Log in screen UI
Then the title of the view is visible
And email field is visible
And password field is visible
But the log in button is disabled
@functional
Scenario: Successful log in with an existing email address
When user enters a known email address to log in
And enters a valid password
And taps log in button
Then user is logged in successfully
이처럼 짧고 간단하게 화면이나 기능을 설명하는 시나리오를 작성할 수 있다.
아래처럼 한글로도 작성이 가능하다:
# 예제 기능
기능: 이메일로 로그인
@before
배경:
조건 유저가 이메일 로그인 화면에 있을 때
@ui
시나리오: 로그인 화면 UI
그러면 화면의 타이틀이 보이고
그리고 이메일을 입력하는 필드가 보이고
그리고 비밀번호를 입력하는 필드가 보이지만
하지만 로그인 버튼은 비활성화 되어있다
@functional
시나리오: 이미 존재하는 계정으로 성공적인 로그인
만약 유저가 이미 존재하는 계정의 이메일을 입력하고
그리고 이미 존재하는 계정의 비밀번호를 입력하고
그리고 로그인 버튼을 누르면
그러면 유저는 성공적으로 로그인 된다
또한, 이모지로도 작성이 가능하다:
# 예제 기능
📚: 이메일로 로그인
@before
💤:
😐 유저가 이메일 로그인 화면에 있을 때
@ui
📕: 로그인 화면 UI
🙏 화면의 타이틀이 보이고
😂 이메일을 입력하는 필드가 보이고
😂 비밀번호를 입력하는 필드가 보이지만
😔 로그인 버튼은 비활성화 되어있다
@functional
📕: 이미 존재하는 계정으로 성공적인 로그인
🎬 유저가 이미 존재하는 계정의 이메일을 입력하고
😂 이미 존재하는 계정의 비밀번호를 입력하고
😂 로그인 버튼을 누르면
🙏 유저는 성공적으로 로그인 한다
처음 시작은 매우 쉽고 간단하다. 하지만 시간이 지나면서 점차 시나리오들이 길어지거나, 이전 Step Definition에서 조건이 더 많이 붙고 관리하기가 어려워진다. 개인적으로 이를 오랫동안 경험해오고, 가이드라인
을 세워놨다.
📝 가이드라인
1. 3인칭 한명의 시점으로 작성하라.
인칭을 정해놓지 않고 시작하면, 추후 마구 뒤섞여서 혼란스러울때가 많다. 대부분 '내가', 혹은 '그/그녀가' 등의 1, 2인칭 시점으로 쓰게되면 상황적 제한이 생길수도 있다. 3인칭의 시점에서 보편화하여 적는것이 포인트이다. 시나리오는 나를 포함하여 소프트웨어를 사용하는 '사용자'를 설명하기 때문에 개인적으로 User (유저)
라는 단어를 선호한다. 또한 영어에서 문법상 Step Definition을 재사용하기에 매우 유용해진다.
2. Step 내에서 접속사를 쓰지말아라.
스탭 자체 내에서 그리고, 그러면, 하지만, 등의 접속사를 피한다. 접속사가 들어가게 된다는 것은 한가지 이상의 행동이나 확인이 필요하다는 것이기 때문에, 다른 스텝으로 쓰거나 다른 시나리오로 써야한다.
3. GIVEN (조건) 은 과거형 또는 현재형
으로 쓴다.
조건 스텝은 시나리오의 전제조건을 조성하는 스텝이다. 이 스텝은 과거형으로 적어서 전제조건이 확립된 것으로 작성하며, 각 시나리오 최대한 단 한개의 조건 스텝만 작성하도록 한다. (예, 유저가 로그인 화면에 있을 때
, 기본 계정으로 로그인 된 유저가 설정 화면에 있을 때
, user is on the home screen with an existing account
)
4. WHEN (만일, 만약) 은 현재형
으로 쓴다.
만일, 만약 스텝은 시나리오 내에서 이루어지는 행동이나 변화를 포함한다. 그러므로 이 스텝은 현재형으로 작성하여 간결화한다. (예, 유저가 로그인 버튼을 클릭하고
, (유저가) 화면을 위로 스크롤하면
, user enters an email
)
5. THEN (그러면) 은 현재완료형
으로 쓴다.
그러면 스텝은, 만약 스텝이 행해졌을 시 예상하는 완료 상태에 대해 설명하기 때문에, 완료형으로 적는다. (예, 유저는 성공적으로 로그인이 된다
, 리스트의 가장 마지막 아이템을 화면에 보이게 된다
, button is enabled
, image is displayed
)
6. AND (그리고) & BUT (하지만, 단) 은 바로 이전 스텝의 시제를 따라간다.
따로 설명이 필요 없을 것 같다. WHEN의 AND나 BUT이면 현재형으로, THEN의 AND나 BUT이면 완료형으로 적는다.
Cucumber에서 Step definition은 여러 변수를 받고 관리할 수도 있으며, 다음 사이트가 그 어구 (Expression)
들을 잘 정리해놓았다:
'👨🏻💻 QA이야기 > 📱 모바일자동화' 카테고리의 다른 글
Kotlin으로 ☕ Espresso UI 테스트 기반 잘 다지는 법 #1 - 테스트 케이스 (0) | 2020.04.12 |
---|---|
Swift로 🍏 UI XCTest 기반 잘 다지는 법 #2 - Action (0) | 2020.04.04 |
Swift로 🍏 UI XCTest 기반 잘 다지는 법 #1 - 테스트 케이스 (0) | 2020.04.04 |
🗳️ QA의 모바일 자동화를 위한 개발환경 (0) | 2020.04.01 |
Appium + Kotlin = 🚀 (2) | 2020.03.31 |
댓글
이 글 공유하기
다른 글
-
Swift로 🍏 UI XCTest 기반 잘 다지는 법 #2 - Action
Swift로 🍏 UI XCTest 기반 잘 다지는 법 #2 - Action
2020.04.04 -
Swift로 🍏 UI XCTest 기반 잘 다지는 법 #1 - 테스트 케이스
Swift로 🍏 UI XCTest 기반 잘 다지는 법 #1 - 테스트 케이스
2020.04.04 -
🗳️ QA의 모바일 자동화를 위한 개발환경
🗳️ QA의 모바일 자동화를 위한 개발환경
2020.04.01 -
Appium + Kotlin = 🚀
Appium + Kotlin = 🚀
2020.03.31