🥒 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)
들을 잘 정리해놓았다:
Regular Expressions (A Setup For Cucumber Glue Code) - Coveros
Introduction A large part of writing Cucumber Glue Code is ensuring you have the perfect regular expression for the Step Definition. So we’re taking a break from our usual direct Cucumber posts, and dedicating this post to the setup for next month’s post.
www.coveros.com
'👨🏻💻 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💥 Extension 잘 사용하기 Swift의 extension을 잘 사용하면, 테스트 코드가 매우 깔끔해지고, 관리하기도 쉬워지며 새로운 테스트를 작성하기도 수월해진다. 기본적인 코드는 XCUIApplication().tabBars.buttons["Home"].tap() 이러한 방식이다. 매우 간단하지만, XCUIApplication().app()을 매번 불러야하며, Page Object 컨셉을 적용하면, 더욱 코드가 더러워진다. XCTest 라이브러리의 Action Extension을 만들어서 관리해주면, 매우 간편하게 코드를 만들수 있다: extension XCTest { struct UIApplication { static var app: XCUIApplication? } var app: XCUI… -
Swift로 🍏 UI XCTest 기반 잘 다지는 법 #1 - 테스트 케이스
Swift로 🍏 UI XCTest 기반 잘 다지는 법 #1 - 테스트 케이스
2020.04.04❗ 처음 세우는 기둥이 중요하다 뭐든지 처음 기반을 잘 세워두면 이후가 안정적이고 편해진다. iOS/macOS 어플리케이션의 테스팅 프레임워크인 XCTest는 UI 테스팅도 가능하다. Xcode에서는 레코딩 툴도 갖춰져 있어, 자동으로 테스트 코드를 짜주는 기능도 있다. (물론 이 코드는 그리 안정적인 코드는 되지 못하지만 레퍼런스 정도로 사용하기에 좋다.) 🧱 첫 기둥이 되는 Base 테스트 케이스 XCTestCase 라이브러리를 사용하여 베이스를 잘 셋업 해놓으면, 추후 여러 테스트들을 관리하기가 수월해진다. class BaseTestCase: XCTestCase { override func setUp() { super.setUp() // 시스템 알림창이 뜰 경우를 대비해 핸들링 코드를 셋업에 입력해… -
🗳️ QA의 모바일 자동화를 위한 개발환경
🗳️ QA의 모바일 자동화를 위한 개발환경
2020.04.01🏁 시작하기 모바일 개발환경 및 테스트 환경은, iOS가 포함되지 않는 상황이 아니고선 macOS가 필수가 된다. 대부분의 개발 환경은 처음 셋업하고서는 크게 확인하거나 건드릴 일이 없지만, CI 환경을 구축할때 미리 정리해서 알아두면 좋다. 🍺 Homebrew macOS용 패키지 관리자이다. 홈브루를 설치해놓으면, 여러 어플리케이션을 command line에서 손쉽게 설치할 수 있다. /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" brew update && brew doctor 📦 Java & Node 왠만한 환경에서 많이 쓰이는 Java와 Node도 홈브루를 이용하여 … -
Appium + Kotlin = 🚀
Appium + Kotlin = 🚀
2020.03.31🗒️ 시작 Appium은 2012년 처음 오픈소스가 되었을 때부터 사용해왔다. 그동안 Appium만 사용해온 것은 아니다. 각 회사와 팀에 맞는 툴들이 있고, 그 옵션 중 하나일 뿐이다. 보통 Appium을 사용하게 되는 환경과 이유는 보통 다음과 같다. iOS와 Android 두 모바일 플랫폼에 대한 테스트 자동화 Selenium에 대한 지식 2019년 1월부터 회사에서 현재까지 진행하는 프로젝트 중 하나는 Appium을 사용하여 iOS와 Android 어플리케이션의 E2E 테스트 자동화 시스템을 처음부터 디자인하고 키우는 일을 하고 있다. Appium은 Selenium 베이스라 어떤 언어로도 사용 가능하지만, Java 클라이언트가 가장 사용량이 많고, 그만큼 서포트가 빠르며 안정된 클라이언트이기 때문…
댓글을 사용할 수 없습니다.