Behat

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

Behat는 소프트웨어 개발 프로세스에서 개발자, 고객 및 기타 관계자 간의 소통을 돕기 위해 설계된 테스트 도구이다. 소프트웨어의 예상 동작을 테스트 가능한 예제로 문서화할 수 있게 해준다. Behat 테스트는 Gherkin 언어를 사용하여 작성되며, Given, When, Then 단계를 사용하여 비즈니스 사례를 설명한다. Behat는 PHP 코드 테스트에 사용되며, Selenium과 함께 브라우저 원격 제어에도 활용된다. 테스트 결과를 JUnit XML 및 HTML 형식으로 출력할 수 있다.

Behat - [IT 관련 정보]에 관한 문서
기본 정보
이름Behat
종류행위 주도 개발
개발자Konstantin Kudryashov
최초 출시일2010년 9월 8일
안정화 버전3.15.0
안정화 버전 출시일2024년 10월 30일
프로그래밍 언어PHP
운영 체제크로스 플랫폼
라이선스MIT 허가서
웹사이트공식 웹사이트
📚 더 읽어볼만한 페이지
  • PHP - 젠드 엔진
    젠드 엔진은 PHP 스크립트를 opcode로 컴파일하여 실행하고 HTML을 생성하는 PHP의 컴파일러이자 런타임 엔진이며, PHP 4에서 파서가 재작성되면서 명명되었고, 젠드 테크놀로지스를 통해 PHP 기반 웹 애플리케이션 개발을 지원한다.
  • 자유 소프트웨어 테스트 도구 - Valgrind
    Valgrind는 동적 분석 도구들의 프레임워크로, 가상 머신 기반으로 작동하며 메모리 오류 감지, 멀티스레드 코드 분석 등 다양한 기능을 제공하지만, 정적 또는 스택 할당 데이터의 경계 오류는 모두 감지하지 못한다.
  • 자유 소프트웨어 테스트 도구 - Cppcheck
    Cppcheck는 C/C++ 코드의 정적 분석 도구로서, 버그, 코드 스타일 문제, 성능 저하 요인 등을 검출하여 코드 품질을 향상시키고, 다양한 운영체제와 IDE에서 사용 가능한 오픈 소스 프로젝트이다.
  • 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 브루클린 미술관
    브루클린 미술관은 1823년 브루클린 견습생 도서관으로 시작하여 현재 약 50만 점의 소장품을 보유한 뉴욕 브루클린 소재의 미술관으로, 다양한 분야의 예술 작품을 전시하며 특히 아프리카 미술과 여성주의 미술에 대한 기여가 크다.
  • 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 광주지방기상청
    광주지방기상청은 광주광역시와 전라남도 지역의 기상 예보, 특보, 관측, 기후 정보 제공 등의 업무를 수행하는 기상청 소속 기관으로, 1949년 광주측후소로 설치되어 1992년 광주지방기상청으로 개편되었으며, 기획운영과, 예보과, 관측과, 기후서비스과와 전주기상지청, 목포기상대를 두고 있다.

2. 목적

Behat은 소프트웨어 개발 과정에서 개발자, 고객, 그리고 다른 이해 관계자들 사이의 의사소통을 돕고, 소프트웨어의 의도한 동작에 대한 테스트 가능한 예제를 명확하게 문서화하기 위해 설계되었다. Behat 테스트 시나리오는 Gherkin이라는, 정의된 패턴을 따르는 비즈니스에서 읽을 수 있는 도메인 특화 언어를 사용하여 작성된다.

3. 이점

새로운 코드가 코드베이스에 도입될 때마다 테스트를 실행하여, 기존 테스트 범위 내에서 회귀(Regression)가 발생하지 않았는지 확인할 수 있다. Behat는 PHP 코드를 직접 테스트하는 데 사용될 수 있으며, 시나리오의 일부로 브라우저를 원격 제어하기 위해 셀레늄과 함께 자주 사용된다. 원격으로 제어되는 브라우저는 테스트 실패 시 비디오 또는 스크린샷을 촬영하여 문제 해결을 도울 수 있다. 셀레늄이나 셀레노이드와 같은 도구를 사용하면 여러 브라우저에서 동시에 테스트를 실행하는 병렬 테스트가 가능하여 테스트 시간을 단축할 수 있다. PHP 전용 시나리오를 실행하기 위한 모듈도 존재한다.

다른 BDD(행동 주도 개발) 프레임워크와 마찬가지로, Behat 시나리오는 비즈니스 사례를 설명하는 Given, When, Then 단계의 연속으로 구성된다. 이러한 단계의 구체적인 내용은 BehatContext를 확장하는 클래스 내의 주석 메서드를 통해 정의된다.

Behat는 테스트 결과를 JUnit XML 및 HTML을 포함한 다양한 형식으로 출력할 수 있어 결과 확인 및 공유가 용이하다.

4. 예제

Behat 테스트 시나리오는 Gherkin이라는 특별한 언어를 사용하여 작성된다. Gherkin은 정의된 패턴을 따르는, 사람이 비즈니스 용어로 쉽게 읽고 이해할 수 있도록 설계된 도메인 특정 언어이다. 이는 소프트웨어 개발 과정에서 개발자, 고객, 그리고 다른 이해관계자들이 서로 원활하게 소통하고 소프트웨어가 어떻게 동작해야 하는지에 대한 예제를 명확하게 문서화하는 데 도움을 준다.

Gherkin 시나리오는 일반적으로 다음과 같은 주요 키워드를 사용하여 구성된다.

* Feature: 테스트하려는 기능의 전체적인 설명
* Scenario: 특정 상황에서의 기능 동작 예시
* Given: 시나리오 실행을 위한 초기 상태 또는 전제 조건
* When: 사용자의 행동이나 특정 이벤트 발생
* Then: 행동 후에 예상되는 결과

특히 `Given` 키워드 뒤에 오는 전제 조건 설명은 실제 테스트 코드를 실행할 때 특정 PHP 메서드(함수) 이름과 연결되어 해당 코드가 실행되도록 한다. 이를 통해 자연어에 가까운 시나리오 설명과 실제 실행 코드를 연동할 수 있다. 더 자세한 Gherkin 문법과 구체적인 작성 예시는 하위 섹션에서 확인할 수 있다.

4.1. Gherkin 문법 예시

Gherkin 문법은 주로 행동 주도 개발(BDD)에서 사용되며, 사람이 읽을 수 있는 형식으로 소프트웨어의 동작을 설명하는 데 중점을 둔다. Behat은 이 Gherkin 문법을 사용하여 테스트 시나리오를 작성한다.

Gherkin 문법의 기본 구조는 다음과 같다.

기능: 테스트하려는 기능에 대한 설명

자유 형식의 텍스트로 부가 설명 작성 가능

시나리오: 시나리오 1
조건 preconditions
행동 actions
결과 results

시나리오: 시나리오 2
...


여기서 `조건`(Given) 다음에 오는 전제 조건은 실행할 PHP 메서드 이름과 일치하게 된다.

아래는 좀 더 구체적인 Gherkin 문법 예시이다.

기능: 이 기능에 대한 간단한 설명

이 기능이 제공하는 혜택, 관련된 역할, 기능 자체 또는 사용자 스토리에 대한 설명.
필요하다면 여러 줄에 걸쳐 작성할 수 있다.

배경:
조건 모든 시나리오 시작 전에 공통적으로 실행되어야 하는 단계들

시나리오: 특정 시나리오나 예시에 대한 설명
조건 다음과 같은 전제 조건으로 시작한다:
| 데이터 열 1 | 데이터 열 2 |
| 앨리스 | 밥 |
행동 "파란색" 버튼을 누른다
결과 결과는 다음과 같아야 한다:
"""
여러 줄에 걸친
데이터 문자열 예시
"""

# 필요하다면 이렇게 주석을 추가할 수 있다.

시나리오 개요: 여러 입력 값에 대해 동일한 시나리오를 반복 실행할 때 사용
조건 "" 값으로 설정을 구성한다
행동 "

4.2. Gherkin 문법 상세 (예시)

"Given" 뒤의 전제 조건은 실행할 PHP 메서드 이름과 일치한다:

Feature: 테스트할 기능 설명

자유 형식 텍스트

Scenario: 시나리오 1
Given 전제 조건
When 행동
Then 결과

Scenario: 시나리오 2
...


아래는 Gherkin 문법의 다양한 요소를 보여주는 예시이다.


# 기능(Feature): 테스트 대상 기능의 전체적인 설명
Feature: 이 기능에 대한 간단한 설명

# 시나리오 실행 전 공통적으로 필요한 배경 설명 (선택 사항)
혜택, 역할, 기능 또는 사용자 스토리 설명
필요에 따라 여러 줄 사용

# 배경(Background): 모든 시나리오 시작 전에 실행되는 공통 단계
Background:
Given 모든 시나리오에 대해 실행되는 몇 가지 단계가 주어짐

# 시나리오(Scenario): 테스트할 구체적인 상황과 예상 결과
Scenario: 시나리오 또는 예시 설명
# Given: 시나리오 실행을 위한 초기 상태 또는 전제 조건 설정
Given 다음과 함께 전제 조건을 설정합니다:
# 데이터 테이블: 여러 데이터를 구조화하여 전달
| 데이터 열 1 | 데이터 열 2 |
| 앨리스 | 밥 |
# When: 특정 행동이나 이벤트 발생
When "파란색" 버튼을 누르면
# Then: 예상되는 결과 검증
Then 결과는 다음과 같습니다:
# 여러 줄 문자열(DocString): 여러 줄의 텍스트 데이터를 전달
"""
여러 줄
데이터 문자열
"""

# 주석: '#' 기호를 사용하여 설명을 추가할 수 있음

# 시나리오 개요(Scenario Outline): 유사한 시나리오를 템플릿화하여 여러 데이터 세트로 실행
Scenario Outline: 시나리오 또는 예시 설명
Given ""으로 구성을 설정합니다.
When "