behave는 파이썬(Python) 언어에서 행동 주도 개발(BDD, Behavior-Driven Development)을 구현하기 위해 사용되는 오픈소스 테스트 프레임워크이다. 이 도구는 Cucumber 스타일의 시나리오 언어인 Gherkin 문법을 사용하여, 사람이 읽을 수 있는 형식으로 소프트웨어의 기대 동작을 기술하고 자동화할 수 있도록 돕는다.
개요
behave는 Python 기반 프로젝트에서 BDD를 적용할 수 있도록 설계되었으며, .feature 파일을 기반으로 한 시나리오와 각 시나리오를 실제로 실행하는 스텝 함수(step definitions)를 분리하여 관리한다. Gherkin 문법으로 작성된 시나리오를 Python 코드와 연결함으로써, 테스트가 요구사항 명세의 역할을 수행하게 한다.
주요 특징
- Gherkin 문법 지원 (Feature, Scenario, Given, When, Then, And, But 등)
- .feature 파일 기반의 시나리오 작성
- Python 함수로 Step Definition 작성
- 명확한 디렉터리 구조와 실행 CLI 제공
- 테스트와 문서를 하나의 형태로 결합할 수 있음
디렉터리 구조
behave 프로젝트의 기본 디렉터리 구조는 다음과 같다:
project/
features/
example.feature
steps/
example_steps.py
environment.py
- `features/`: 모든 시나리오 파일과 설정 파일의 루트 디렉터리
- `steps/`: 시나리오 내 단계에 대응하는 Python 함수들을 정의
- `environment.py`: 테스트 실행 전후의 설정 및 훅(hook) 정의 파일
예시
.feature 시나리오 파일
Feature: 로그인 기능
Scenario: 올바른 사용자 정보로 로그인 성공
Given 사용자 "admin" 이 존재한다
When 사용자가 "admin" 으로 로그인 시도한다
Then 로그인에 성공해야 한다
steps 정의 (example_steps.py)
from behave import given, when, then
@given('사용자 "{username}" 이 존재한다')
def step_given_user_exists(context, username):
context.user = username
@when('사용자가 "{username}" 으로 로그인 시도한다')
def step_when_login(context, username):
context.login_result = (username == "admin")
@then('로그인에 성공해야 한다')
def step_then_login_success(context):
assert context.login_result is True
환경 설정 (environment.py)
behave는 테스트 실행의 다양한 단계에서 사용자 정의 동작을 수행할 수 있도록 여러 훅(hook) 함수를 제공한다. 이러한 훅은 `features/environment.py` 파일에 정의되며, 다음과 같은 기능에 활용된다:
- 테스트 전체에 걸친 설정 또는 리소스 초기화
- 시나리오별 전처리 및 후처리 작업
- 공통 테스트 상태 설정, 외부 서비스 연동 등
def before_all(context):
print("전체 테스트 시작")
def after_all(context):
print("전체 테스트 종료")
def before_scenario(context, scenario):
print(f"시나리오 시작: {scenario.name}")
def after_scenario(context, scenario):
print(f"시나리오 종료: {scenario.name}")
Cucumber와의 관계
behave는 공식 Cucumber 프로젝트의 일부는 아니지만, Cucumber와 동일한 Gherkin 문법을 사용하며, 기능과 개발 흐름 또한 유사하다. Ruby, Java 등에서 사용되는 Cucumber 도구와는 독립적인 Python 기반 구현체로, Python 환경에서 BDD를 적용하기 위한 표준 도구로 널리 사용된다.
설치 방법
pip 명령어로 간단히 설치할 수 있다:
pip install behave
비교 및 관련 도구
Python 생태계의 BDD 프레임워크 비교
| 도구 | 언어 기반 | Gherkin 문법 | pytest 호환 | 특징 |
|---|---|---|---|---|
| behave | Python | 지원 | 아님 | 가장 널리 사용되는 표준 Python BDD 프레임워크 |
| lettuce | Python | 지원 | 아님 | 경량 도구이나 업데이트가 느림 |
| pytest-bdd | Python | 지원 | 예 | pytest에 통합 가능한 BDD 확장 |
다른 구성 도구와의 관계
behave는 별도 에이전트를 요구하지 않는 에이전트리스(agentless) 테스트 도구이다. 따라서 Ansible 등과 마찬가지로 대상 시스템에 별도 설치가 필요 없는 간편한 구조를 갖는다.