오이(소프트웨어)

Cucumber (software)
오이
개발자아스락 헬레소위,[1] 조셉 윌크,[2] 맷 윈,[3] 그레고리 하티룩,[4] 마이크 사삭[5]
안정적 해제
3.1.2[6] / 2018년 7월 13일; 3년 전(2018-07-13)
리포지토리
기록 위치루비
운영 체제크로스 플랫폼
유형동작 중심의 개발 프레임워크/테스트 도구
면허증MIT 라이선스
웹사이트오이이오

오이는 행동 주도형 개발(BDD)을 지원하는 소프트웨어 도구다.[7][8][9][10]오이 BDD 접근법의 중심에는 게르킨이라는 평범한 언어 파서가 있다.고객이 이해할 수 있는 논리적인 언어로 예상되는 소프트웨어 행동을 명시할 수 있도록 한다.이와 같이, Oii는 업무용 텍스트로 작성된 특징 문서의 실행을 허용한다.[11][7][8]그것은 종종 다른 소프트웨어를 테스트하는데 사용된다.[12]행동 주도형 개발(BDD) 방식으로 작성된 자동 합격 테스트를 실시한다.[13]

오이는 원래 루비 프로그래밍 언어로 쓰여졌다.[7][14][8]그리고 원래 RSpec BDD 프레임워크의 보완으로서 Ruby 테스트 전용으로 사용되었다.오이는 이제 자바[15][8], 자바스크립트 등 다양한 구현을 통해 다양한 프로그래밍 언어를 지원한다.[16][17]Oii의 오픈 소스 포트 in.NET는 SpecFlow라고 불린다.[18][19][20]예를 들어 Cuke4php와 Cuke4Lua는 각각 PHP와 Lua 프로젝트의 시험을 가능하게 하는 소프트웨어 브리지다.다른 구현은 대상 언어로 시험 프레임워크의 나머지 부분을 구현하는 동안 Gherkin 파서를 단순하게 활용할 수 있다.

게르킨어

게르킨은 오이가 시험 케이스를 정의하기 위해 사용하는 언어다.비기술적이고 사람이 읽을 수 있도록 설계되었으며, 소프트웨어 시스템과 관련된 사용 사례를 집합적으로 설명한다.[7][8][21][22]게르킨의 구문 이면의 목적은 비즈니스 분석가와 매니저를 포함한 전체 개발 팀에 걸쳐 행동 중심 개발 관행을 촉진하는 것이다.그것은 사업 관리에 의한 요구사항 정의의 초기 단계와 개발 라이프사이클의 다른 단계에서 시작하여 확실하고 명확한 요구사항을 시행하고자 한다.

게르킨의 자연어 구문은 자동화된 테스트를 위한 스크립트를 제공하는 것 외에도 테스트 대상 코드의 간단한 문서화를 제공하도록 설계되었다.[22]게르킨은 현재 수십 개의 언어로 된 키워드를 지원하고 있다.[22][23][7][8]

언어 운영[22]

# 사용 가능한 언어 목록 --i18n 도움말 목록 언어 키워드 목록 --i18n $LANG

구문

구문은 파이썬과 비슷한 선지향 디자인을 중심으로 이뤄진다.파일의 구조는 공백과 다른 제어 문자를 사용하여 정의된다.[22] #줄 바꿈 문자로 사용되며, 파일의 어느 곳에나 배치할 수 있다.[22]지시사항은 비어 있지 않고 코멘트가 아닌 모든 라인이다.이들은 인식된 게르킨 키워드와 문자열로 구성된다.[24]

모든 게르킨 파일에는.feature파일 확장자테스트 대상 시스템에 대한 단일 특성 정의를 포함하고 있으며 실행 가능한 테스트 스크립트 입니다.[24]

기능, 시나리오 및 단계

오이 검사는 개별 특징으로 나뉜다.이러한 특성은 단계 순서인 시나리오로 세분된다.

특징들

특징은 시험 중인 소프트웨어의 특정 기능을 설명하는 Use Case이다.특징에는[24] 세 가지 부분이 있다.

  • 그Feature:키워드
  • 피쳐 이름(키워드와 동일한 줄에 있음)
  • 다음 행의 선택적 설명

피쳐 정의 예제

특징 :ATM에서 돈 인출  은행에 계좌가 있는 사용자는 ATM에서 돈을 인출하고 싶어한다.  그가 유효한 계좌와 직불카드 또는 신용카드를 가지고 있다면, 그는 거래를 할 수 있다.ATM은 요청된 금액을 조회하고, 카드를 반납하고, 사용자 계좌에서 인출 금액을 빼준다.      시나리오:시나리오 1 주어진전제 조건         언제행동들         그러면결과.      시나리오:시나리오 2 ... 

시나리오

각 특성은 시나리오 모음으로 만들어진다.단일 시나리오는 설명되고 있는 형상을 통한 이벤트의 흐름이며, 시스템의 실행 가능한 테스트 케이스와 1:1을 매핑한다.[24]ATM 인출 기능의 예에 따라, 시나리오는 사용자가 어떻게 돈을 요구하는지와 그들의 계좌에 무슨 일이 일어나는지를 설명할 수 있다.

시나리오:에릭은 현금인출기의 은행 계좌에서 돈을 인출하고 싶어한다. 주어진에릭은 유효한 신용 카드 또는 직불 카드를 가지고 있다.     그리고그의 계좌 잔고는 달러다.100     언제그는 그의 카드를 삽입한다.     그리고달러를 인출하다45     그러면현금 자동 인출기가 달러를 돌려주다.45     그리고그의 계좌 잔고는 달러다.55 

경우에 따라 동등성 분할 및 경계 값 분석을 수행하기 위해 여러 시나리오를 한 번에 테스트할 수 있다.aScenario Outline자리 표시자를 사용하여 템플릿 시나리오에 대해 테스트할 여러 예를 지정하는 기법을 제공한다.[24]예를 들어,

시나리오 개요:사용자가 ATM에서 돈을 인출하는 경우 주어진<이름>유효한 신용 카드 또는 직불 카드를 가지고 있음     그리고그들의 계좌 잔액은<오리지널밸런스>     언제그들은 카드를 넣는다.     그리고철수하다<출금금액>     그러면현금 자동 인출기가 돌아오다<출금금액>     그리고그들의 계좌 잔액은<뉴밸런스>      예:        이름    오리지널 밸런스  인출금액  뉴발란스          에릭.     100               45                 55                  가우라브   100               40                 60                  에드       1000              200                800          

런타임에 테이블의 각 행에 대해 시나리오가 실행된다.열 값은 시나리오에서 명명된 각 자리 표시자에 대해 대체된다.

단계

시나리오의 핵심은 발생할 사건의 전제조건과 흐름을 설명하는 일련의 단계에 의해 정의된다.한 단계의 첫 단어는 키워드인데, 일반적으로 다음[24] 키워드 중 하나이다.

  • Given- 테스트 시작 전 전제 조건 및 초기 상태 설명 및 테스트 전 설정 허용
  • When- 시험 중 사용자가 취한 조치 설명
  • Then- When 절에서 취한 조치에 따른 결과 설명

때때로 Given-When-Then의 조합은 다른 키워드를 사용하여 접속사를 정의한다.

  • And- 논리적 및
  • But- 논리적으로 와 같다.And, 그러나 음의 형태로[25] 사용됨
시나리오:사용자가 자신의 계정에 있는 돈보다 더 많은 돈을 인출하려고 하는 경우 주어진존은 유효한 신용 카드 또는 직불 카드를 가지고 있다.     그리고그의 계좌 잔고는 달러다.20     언제그는 그의 카드를 삽입한다.     그리고달러를 인출하다40     그러면현금 자동 인출기에서 오류가 표시됨     그리고그의 명함을 돌려주다.     그렇지만그의 잔고는 아직 미불이다.20 

태그

게르킨의 특징 구조는 조직에 힘을 준다.그러나, 이 기본 조직이 불편하거나 불충분한 경우, 게르킨은 태그를 제공한다.태그는@-prefixed현악기[24] 앞에 배치될 수 있다.

  • Feature
  • Scenario
  • Scenario Outline
  • Examples

요소에는 여러 태그가 있을 수 있으며 상위 요소로부터 상속될 수 있다.[22][24]

오이

단계 정의

게르킨의 계단.feature파일은 메서드 호출로 간주될 수 있다.[26][22]오이가 스텝을 실행하기 전에 스텝 정의를 통해 스텝을 어떻게 실행해야 하는지 알려야 한다.

정의는 Ruby에 쓰여져 있고 관례적으로 다음과 같이 정리되어 있다.features/step_definitions/*_steps.rb.[22] 정의는 호출과 동일한 키워드로 시작한다(게르킨의 전체 언어 지원 포함).[22]각 정의는 두 개의 인수를[22] 사용한다.

  • 정규식 또는 $variables가 있는 문자열
  • 실행할 루비 코드가 들어 있는 블록

정규식 사용 예제

주어진 /(.*) 유효한 신용 카드 또는 직불 카드가 있음/ 하다  이름을 붙이다    # 루비코드 종지부를 찍다 

문자열 및 $variables 사용 예런타임에 문자열이 정규식으로 변환되고 $variable이 일치하도록 변환된다는 점에 유의하십시오.(.*).[22]

주어진 "$name에 유효한 신용 카드 또는 직불 카드가 있음" 하다  이름을 붙이다    # 루비코드 종지부를 찍다 

훅스

Hooks는 테스트를 실행하기 전에 설정을 수행하고 그 후에 해체하는 것을 허용하는 Oii의 방법이다.실행 가능한 루비 블록으로 정의되며, JUnit 방법은 다음과 같다.@Before, @After주석을 달다통상적으로 그것들은 아래에 놓여진다.support/, 그리고 전세계적으로 적용된다.[22]후크에는 세 가지 기본 유형이 있다[22].

  • Before- 시나리오 전에 실행
  • After- 시나리오 후 실행
  • Around- 통제력을 가정하고 시나리오 주위에서 실행

추가 후크 포함[22]

  • BeforeStep
  • AfterStep
  • AfterConfiguration- Oi 구성 후 실행 및 구성 인스턴스 통과

Before, After, and Around후크는 자신이 적용되는 태그 필터링 시나리오 목록을 선택적으로 취한다.동일한 문자열의 태그 목록은 다음과 같이 처리된다.OR, 개별적인 주장이 로 취급되는 동안.AND; 태그는 다음에 선행되어 선택적으로 부정될 수 있다.~.[22]

후크 전에 태그가 지정된 예제

이전('@ATM') 하다  시나리오    # 루비코드 종지부를 찍다 

후크는 일반적으로 시나리오를 실행하기 전에 정리함으로써 데이터베이스 상태를 유지하는 데 사용된다.또한 다음과 같은 방법으로 트랜잭션을 시작하고 롤백할 수 있다.Before그리고After훅, 그리고 많은 오이 연장은@txn그런 목적으로 꼬리표를 [24]달다

통합 및 구현

자바, 자바스크립트, 파이톤 등 인기 언어에 대한 비 루비 구현이 존재한다.[24]통합 시험 프레임워크에 대한 지원도 존재한다.구현의 전체 목록은 오이에서 찾을 수 있다.오이에는 많은 연속 통합 구성과 함께 잘 작동하는 통합 테스트 도구가 있다.Jenkins와 TeamCity와 같은 인기 있는 CI 도구와 Eclipse와 RubyMine과 같은 IDE를 위한 오이 플러그인이 있다.

아래는 Java에 대해 Hai-JVM으로 작성된 단계 정의의 예다.[27]

@Given("(.*) 유효한 신용 카드 또는 직불 카드가 있음") 공중의 공허하게 하다 has_card(끈 이름을 붙이다) {     // 자바 코드 } 

포맷터 플러그인

오이는 출력을 제공하기 위해 포매터 플러그인을 사용한다.다음과[24] 같은 몇 가지 공통 형식이 기본적으로 제공된다.

사용 가능한 형식은 서로 다른 오이 구현에 걸쳐 표준화되지 않기 때문에 오퍼링이 다를 수 있다.[24]오이는 또한 이미지나 비디오와 같은 풍부한 출력 형식을 지원한다.

브라우저 자동화

오이는 브라우저 자동화를 제공하지 않는다.그러나 셀레니움, WATiR-WebDriver와 같은 기존 프로그램과 잘 작동한다.[28]ActiveRecord와 같은 다른 프로그램을 활용하여 트랜잭션으로 테스트를 실행할 수 있도록 지원한다.[29]

오이 커맨드 라인

오이는 명령어 라인 인터페이스가 내장되어 있어 포괄적인 명령어 목록을 포괄한다.대부분의 명령줄 도구와 마찬가지로, 오이는--help명령이 허용하는 인수 요약을 제공하는 옵션.[30]

$ 오이 --help -r, --Library DIR 기능을 실행하기 전에 파일이 필요함. --i18n LANG List 키워드 특정 언어.                                         모든 언어를 보려면 "--i18n 도움말"을 사용하여 실행하십시오. -f, --format FORMAT 기능을 포맷하는 방법(기본값: pretty).        -o, --out [FILE DIR] 출력 대신 파일/디렉토리에 기록... 

오이 명령줄을 사용하여 정의된 테스트를 신속하게 실행할 수 있다.또한 태그를 필터링하여 시나리오의 서브셋 실행을 지원한다.

$ Oi --tag-name @tag-name

위의 명령은 지정된 시나리오만 실행하는 데 도움이 된다.@tag-name논리는 논리로 제공될 수 있다.[30]OR또는AND태그의 조작태그 외에도 시나리오 이름에서 시나리오를 필터링할 수 있다.[30]

$ 오이 --이름 로그아웃

위의 명령은 '로그아웃'이라는 단어가 포함된 시나리오만 실행한다.

시험이 실패했을 때 무엇이 잘못되었는지 알 수 있는 것도 유용하다.오이는 코드로 벌레를 쉽게 잡을 수 있게 한다.--backtrace옵션의[30]

오이는 또한 진행 중인 작업 태그로 표시하여 완료되지 않은 특정 시나리오를 무시하도록 구성할 수 있다.@wip오이가 지나가면.--wip논쟁, 오이는 그와의 시나리오를 무시한다.@wip꼬리표를 달다

참조

  1. ^ "Aslak Hellesøy". Aslakhellesoy.com. Retrieved 2012-01-24.
  2. ^ "Joseph Wilk on AI, The Web, Usability, Testing & Software process". Blog.josephwilk.net. Retrieved 2012-01-24.
  3. ^ "Tea-Driven Development". Blog.mattwynne.net. Retrieved 2012-01-24.
  4. ^ "ghnatiuk's Profile". GitHub. Retrieved 2012-01-24.
  5. ^ "msassak's Profile". GitHub. Retrieved 2012-01-24.
  6. ^ "Releases - cucumber/cucumber-ruby". Retrieved 9 August 2018 – via GitHub.
  7. ^ a b c d e "The Pragmatic Bookshelf The Cucumber Book". Pragprog.com. Archived from the original on 2012-01-21. Retrieved 2012-01-24.
  8. ^ a b c d e f Rose, Seb; Wynne, Matt; Hellesøy, Aslak (15 February 2015). The Pragmatic Bookshelf The Cucumber For Java Book. Pragprog.com. Retrieved 2019-04-28.
  9. ^ "What is Cucumber?". cucumber. Retrieved 2019-06-08.
  10. ^ Aslak Hellesøy. "The world's most misunderstood collaboration tool". cucumber.
  11. ^ Fox, Armando; Patterson, David (2016). Engineering Software as a Service. Strawberry Canyon. pp. 218–255. ISBN 978-0-9848812-4-6.
  12. ^ "Automated testing with Selenium and Cucumber". www.ibm.com. 2013-08-06. Retrieved 2017-02-09.
  13. ^ Soeken, Mathias; Wille, Robert; Drechsler, Rolf (2012-05-29). Furia, Carlo A.; Nanz, Sebastian (eds.). Objects, Models, Components, Patterns. Lecture Notes in Computer Science. Springer Berlin Heidelberg. pp. 269–287. doi:10.1007/978-3-642-30561-0_19. ISBN 9783642305603.
  14. ^ "The Pragmatic Bookshelf The RSpec Book". Pragprog.com. 2010-12-02. Archived from the original on 2012-01-21. Retrieved 2012-01-24.
  15. ^ "Cucumber-jvm". cucumber. Retrieved 2018-03-08.
  16. ^ "Cucumber-js". cucumber. Retrieved 2018-03-08.
  17. ^ Naidele Manjunath; Olivier de Meulder (2019-02-01). "No Code? No Problem — Writing Tests in Plain English". Times Open. Retrieved 2019-04-29.
  18. ^ "Binding Business Requirements to .NET Code". SpecFlow. Retrieved 2019-04-29.
  19. ^ "SpecFlow". GitHub. Retrieved 2019-04-29.
  20. ^ Richard Lawrence; Paul Rayner (2018). Behavior-Driven Development with Cucumber. Addison Wesley.
  21. ^ "cucumber/gherkin". GitHub. Retrieved 2017-02-09.
  22. ^ a b c d e f g h i j k l m n o p "Gherkin Syntax". cucumber. Retrieved 2019-07-09.
  23. ^ "Gherkin Supported Languages". Gherkin. cucumber/cucumber: Cucumber monorepo - building blocks for Cucumber in various languages. Retrieved 2021-03-21 – via GitHub.
  24. ^ a b c d e f g h i j k l "Reference". cucumber. Archived from the original on 2015-10-25. Retrieved 2016-01-17.
  25. ^ "Gherkin Language". behat. Retrieved 2016-01-17.
  26. ^ "Cucumber documentations". GitHub. 2019-01-23.
  27. ^ "Cucumber-JVM". GitHub. Retrieved 10 February 2016.
  28. ^ "GitHub - watir/watir-webdriver: Watir-webdriver code has moved". 2018-06-09.
  29. ^ "GitHub - rails/rails: Ruby on Rails". 2019-01-24.
  30. ^ a b c d Wynne, Matt; Hellesoy, Aslak. "The Cucumber Book". SafariBooksOnline. Retrieved 22 January 2016.

외부 링크