오이 특징: 개요
게시 됨: 2022-04-20소개
Gherkin은 여전히 많은 테스트 자동화 프레임워크에서 사용되는 언어입니다. 때로는 클라이언트가 우리에게 그것을 사용하도록 요구하기 때문이고 때로는 팀이 그렇게 하기로 결정하기 때문입니다.
솔직히 나에게 첫눈에 반한 건 아니었다. 나는 개인적으로 Gherkin과 꽤 긴 여정을 가지고 있습니다. 처음에 그것을 좋아하는 것부터 잠시 동안 언어를 싫어하다가 결국 다시 좋아하게 되는 것까지 말입니다. 이 기사에서는 Java 구현과 함께 가장 중요한 Cucumber 기능을 제시할 것입니다.
이 기사에서 다루는 모든 Cucumber 기능은 다음과 같습니다.
특징 | 설명 |
---|---|
대본 | 간단한 시나리오 |
시나리오 개요 | 사용자가 '예시' 섹션에 테스트 데이터를 제공해야 함 |
데이터 테이블 | 사용자가 테스트 단계에 대한 테스트 데이터를 제공해야 함 |
시나리오 컨텍스트 | 테스트 단계 간 값 공유 |
오이 데이터 유형 | 오이가 처리하는 데이터 유형 |
오이 정규식 | 오이 시나리오에서 정규 표현식 사용 |
오이 후크 | 테스트 시나리오에서 추가 코드 실행 |
기능 파일
먼저 기능 파일이란 무엇입니까? 기술 세계에서 비기술적 접근 방식은 비기술적 사람이 앱 개발 중에 팀과 협력할 수 있도록 만들어졌습니다. Gherkin 언어는 BDD 접근 방식의 추가 계층으로 만들어졌습니다. Gherkin 테스트는 코드(Java, Kotlin, C# 등)와 결합된 소위 기능 파일에 있습니다. 일반적으로 Gherkin은 사용하기 매우 쉽고 최소한의 프로그래밍 지식이 필요하지만 일부 코딩이 필요한 기능이 있습니다.
쉬운 것부터 시작합시다.
대본
다음은 Cucumber 테스트의 가장 기본적이고 사용하기 쉬운 예입니다.
기능: 시나리오 배경: 테스트 시나리오 이전 내가 단계 전에 실행하는 것을 감안할 때 @테스트 시나리오: 시나리오 "시나리오 1"의 매개변수화된 단계를 사용한다고 가정할 때
코드 블록 1. 시나리오
코드 블록 1. 설명해야 할 몇 가지 사항이 포함되어 있습니다.
- 기능 : 기능 파일의 제목
- Background : 기능 파일에 정의된 각 테스트 시나리오 이전에 사용자가 테스트 단계를 수행할 수 있도록 하는 키워드
- @Test : 테스트 프레임워크에 어떤 테스트 시나리오를 실행해야 하는지 알려주는 태그입니다. "테스트"는 사용자가 정의합니다. 예를 들어 "@SmokeTest"를 사용할 수 있습니다.
- 시나리오 : 테스트 시나리오명
Gherkin 테스트는 각 테스트 단계 전에 [Given, When, Then, But] 키워드를 사용합니다. Background 단계를 제외한 유일한 테스트 단계에서는 "Scenario 1" 값을 전달하는 매개변수를 사용합니다.
이제 접착된 Java 코드가 어떻게 생겼는지 살펴보겠습니다.
@Given("단계 이전에 실행합니다.") 공개 무효 iExecuteBeforeStep() { //일부 구현 } @Given("{string}의 매개변수화된 단계를 사용합니다.") 공개 무효 iUseParamtizedStepOf(문자열 p) { //일부 구현 }
코드 블록 2. 시나리오의 자바 코드 구현
시나리오 개요
좀 더 복잡한 것을 해보자:
기능: 시나리오 개요 @테스트 시나리오 개요: 시나리오 개요 "<parameter1>" 및 "<parameter2>"로 단계를 실행한다고 가정하면 예: | 매개변수1 | 매개변수2 | | 매개변수1a | 매개변수2a | | 매개변수 1b | 매개변수2b |
코드 블록 3. 시나리오 개요
이번에는 다양한 테스트 데이터 구성으로 테스트 시나리오를 반복할 수 있는 시나리오 개요를 사용할 것입니다. 코드 블록 3. 설명해야 할 몇 가지 사항이 포함되어 있습니다.
- 예 : 테스트 시나리오에서 사용할 테스트 데이터 매트릭스. 첫 번째 행은 매개변수 이름이 있는 헤더입니다.
그리고 자바 구현:
@Given("{string} 및 {string}으로 단계를 실행합니다.") 공개 무효 iRunStepWithAnd(문자열 p1, 문자열 p2) { //일부 구현 }
코드 블록 4. 시나리오 개요의 Java 구현
데이터 테이블
시나리오 개요는 매우 유용하지만 전체 테스트 시나리오를 반복하지 않고 한 테스트 단계만 반복하고 싶다면 어떻게 해야 할까요? Gherkin에는 이를 수행하는 방법이 있으며 이를 "데이터 테이블"이라고 합니다.
기능: 데이터 테이블 @테스트 시나리오: 데이터 테이블 시나리오 열에 예상 값이 포함되어 있는지 확인하면 | 열 이름 | 기대값 | | 일부 열 이름 | 일부예상값 |
코드 블록 5. 데이터 테이블
데이터 테이블이 있는 시나리오는 시나리오 개요와 크게 다르지 않습니다. 유일한 것은 "Examples" 키워드를 테이블 앞에 두지 않는다는 것입니다.
Java 구현은 이전 경우보다 약간 더 복잡해 보입니다.
@Given("열에 예상 값이 포함되어 있는지 확인합니다.") 공개 무효 iVerifyColumnValuesInTableUsingQueryFromFileOnSchema(데이터 테이블 데이터 테이블) { 목록<Map<문자열, 문자열>> 데이터 = dataTable.asMaps(); for (Map<String, String> 형식 : 데이터) { 문자열 columnName = form.get("열 이름"); 문자열 예상 결과 = form.get("예상 값"); //일부 구현 } } }
코드 블록 6. 데이터 테이블의 Java 구현
데이터 테이블의 데이터에 액세스하기 위해 "DataTable" 유형의 특수 변수 dataTable을 만듭니다. 모든 데이터는 List 변수에 저장됩니다.

시나리오 컨텍스트
시나리오 컨텍스트를 사용하여 단계 간에 데이터를 공유할 수 있습니다. 1단계에서 2단계(코드 블록 7)로 값 "데이터"를 전달하려는 2단계 시나리오가 있다고 가정해 보겠습니다.
@테스트 시나리오: 시나리오 컨텍스트 시나리오 컨텍스트 값 "데이터"를 설정한 경우 시나리오 컨텍스트 값을 사용하는 경우
코드 블록 7. 시나리오 컨텍스트
먼저 데이터를 설정하고 가져오는 시나리오 컨텍스트 기능을 사용하여 ScenarioContext라는 특수 클래스를 빌드해야 합니다(코드 블록 8). 시나리오 컨텍스트는 키-값 쌍이 있는 HashMap입니다. 키로 값을 식별합니다.
- 시나리오 컨텍스트() : 키-값 쌍의 HashMap
- setContext() : 시나리오 컨텍스트 데이터를 저장하는 키-값 메소드
- getContext() : 키를 제공하는 데이터를 가져오는 메소드
공개 클래스 ScenarioContext { 개인 Map<문자열, 개체> 시나리오 컨텍스트; 공개 시나리오 컨텍스트(){ 시나리오 컨텍스트 = 새로운 HashMap<>(); } 공개 무효 setContext(컨텍스트 키, 객체 값) { 시나리오Context.put(key.toString(), 값); } 공개 개체 getContext(컨텍스트 키){ 반환 시나리오Context.get(key.toString()); } } 공개 열거형 컨텍스트 { ID; }
코드 블록 8. Scenario Context 클래스의 Java 구현
이것을 가지고 우리는 구현된 방법을 사용할 수 있습니다. 그런 다음 1단계에서 시나리오 컨텍스트에서 값을 설정하고 2단계에서 값을 얻습니다(코드 블록 9).
ScenarioContext 시나리오 컨텍스트 = 새로운 ScenarioContext(); @Given("시나리오 컨텍스트 값 {string}을(를) 설정했습니다.") 공개 무효 iSetScenarioContextValue(문자열 값) { 시나리오Context.setContext(Context.ID, 값); } @Given("시나리오 컨텍스트 값을 사용합니다.") 공개 무효 iUseScenarioContextValue() { 문자열 공유 값 = 시나리오 컨텍스트.getContext(Context.ID).toString(); }
코드 블록 9. 시나리오 컨텍스트 단계
오이 데이터 유형
Cucumber는 제한된 수의 데이터 유형을 처리합니다. 문자열, 정수 및 부동 소수점 값을 정의할 수 있지만 부울 값의 경우 몇 가지 해결 방법을 코딩해야 합니다.
@테스트 시나리오: 변수가 있는 시나리오 문자열 "string", int 1, float 1.1 및 부울 "false"를 사용한다고 가정하면
코드 블록 10. 오이 데이터 유형
Java 코드는 다음과 같습니다.
@Given("문자열 {string}, int {int}, float {float} 및 부울 {string}을 사용합니다.") 공개 무효 iUseStringIntFloatAndBoolean(문자열 var1, 정수 var2, 이중 var3, 문자열 var4) { 부울 f = 부울.valueOf(var4); //일부 코드 }
코드 블록 11. Cucumber 데이터 유형의 Java 구현
오이 정규식
이것은 자주 사용되는 또 다른 기능입니다. 코드 블록 12는 다른 변수 값(var1 및 var2)을 사용하는 것만으로 다른 두 단계 시나리오를 보여줍니다. 이것은 실제로 한 단계에 불과하며 Java 코드(코드 블록 13)에서 정규식과 하나의 매개변수 var를 사용하여 단 하나의 메소드만 정의합니다.
@테스트 시나리오: 정규식 시나리오 변수 var1을 사용하는 경우 변수 var2를 사용하는 경우
코드 블록 12. 오이의 정규 표현식
@Given("^변수(.*)를 사용합니다.") 공개 무효 시험 시간 테이블InSummerSeason(문자열 변수) { if (var.equals("var1")){ //일부 코드 } 그렇지 않으면 if(var.equals("var2")){ //일부 코드 } }
코드 블록 13. Cucumber 정규 표현식의 Java 구현
오이 후크
마지막으로 중요한 것은 오이 후크입니다.
코드 블록 14는 4가지 가장 중요한 후크를 제공합니다.
- @Before : 각 테스트 시나리오 전에 코드를 실행합니다.
- @After : 각 테스트 시나리오 이후에 코드 실행
- @BeforeStep : 각 테스트 단계 전에 코드를 실행합니다.
- @AfterStep : 각 테스트 단계 후에 코드를 실행합니다.
@전에 public void beforeScenario() { //일부 코드 } @후에 공개 무효 afterScenario() { //일부 코드 } @BeforeStep 공개 무효 beforeStep() { //일부 코드 } @애프터스텝 공개 무효 afterStep() { //일부 코드 }
코드 블록 14. 오이 후크
요약
테스트에 Gherkin을 사용하도록 설득하셨기를 바랍니다. 이러한 몇 가지 기능을 통해 비기술자도 테스트를 더 읽기 쉽고 이해하기 쉽게 만들 수 있습니다. 또한 신규 가입자의 경우 비즈니스 로직을 이해하고 온보딩 시간을 단축하는 것이 더 쉬울 것입니다.