rest api testing with cucumber using bdd approach
이 튜토리얼은 BDD 접근 방식을 사용하여 Cucumber로 REST API 테스트를 설명합니다. 소프트웨어 설치, 프로젝트 설정, TestScript 실행 및 보고서를 다룹니다.
이 기사에서는 Cucumber 프레임 워크를 사용하여 BDD 스타일의 REST API 테스트를 시작하는 방법을 살펴 봅니다.
주제에 깊이 들어가기 전에 관련 중요한 개념을 이해합시다.
시작하자!!
학습 내용 :
REST API의 중요한 개념
쉬다
이것은 소프트웨어 아키텍처 스타일입니다. 전체 형태 REST는 표현 상태 전송입니다. . 웹 서비스를 만드는 데 사용할 제약 조건 집합을 정의합니다. REST 아키텍처 스타일을 준수하는 웹 서비스를 RESTful 웹 서비스라고합니다.
REST API 테스트
REST API 테스트는 POST, GET, PUT 및 DELETE의 4 가지 주요 방법을 사용하여 API를 테스트하는 것입니다.
REST 템플릿
RestTemplate은 HTTP 메소드에 오버로드 된 메소드를 제공하여 HTTP 기반의 편안한 웹 서비스를 테스트하는 편리한 방법을 제공하는 오픈 소스 스프링 프레임 워크 클래스입니다.
노트 : REST API 테스트 개념에 대한 자세한 내용은 이전 자습서 ' Spring RestTemplate 및 TestNG를 사용한 REST API 테스트 ’에서는 JSON 개념과 함께 REST API 테스트를 수동으로 수행하는 방법을 다뤘습니다.
BDD
BDD는 행동 기반 개발 접근 방식입니다. 이것은 테스트 주도 개발 즉 TDD 스타일에서 나온 소프트웨어 개발 기술 중 하나입니다.
BDD 테스트의 원칙은 테스트 케이스가 프로그래머가 아닌 사람도 쉽게 읽을 수있는 자연어로 작성된다는 것입니다.
오이
Cucumber는 행동 기반 개발을 지원하는 도구입니다.
오이는 어떻게 작동합니까?
오이가 어떻게 작동하는지 봅시다.
Cucumber는 기능 파일, 단계 정의 파일 및 러너 클래스로 구성됩니다.
기능 파일
기능 파일은 비즈니스 분석가 또는 스폰서가 작성합니다. 이들은 사양이 설명 된 자연어 형식으로 작성되며 사양에 따라 응용 프로그램의 기능을 검증합니다.
이러한 사양에는 여러 시나리오 또는 예제가 언급되어 있습니다. 각 시나리오는 Cucumber가 작업 할 특정 단계 목록입니다.
사용자가 시스템에 로그인하려는 시나리오를 고려해 보겠습니다.
이것이 사양에 따라 작동하는지 확인하려면이 시나리오를 설명해야합니다. 다음은 사양에 따라 원하는 결과와 함께 수행 할 단계입니다.
아이디어를 얻기 위해 샘플 시나리오는 다음과 같습니다.
Scenario: Login to the system Given User launches Login screen When User enters username, password and submit Then Login Successful message appears
보시다시피, 각 시나리오는 Cucumber가 작업 할 단계의 일종입니다. Cucumber가 시나리오를 이해하려면 다음과 같은 몇 가지 기본 구문 규칙을 따라야합니다. 작은 오이 .
단계 정의 파일
단계 정의 파일은 기능 파일에 언급 된 각 Gherkin 단계를 구현 코드에 매핑합니다. 이렇게하면 Cucumber가 단계에서 수행해야하는 작업을 실행할 수 있습니다.
Cucumber 프레임 워크는 Java, .net 및 Ruby와 같은 단계 정의를 작성하기 위해 많은 프로그래밍 언어를 지원합니다.
노트 : 기사‘ Spring RestTemplate 및 TestNG를 사용한 REST API 테스트 ’, 우리는 Spring 템플릿으로 TestNG 테스트 프로젝트를 개발했습니다.
이제 동일한 REST 서비스 및 RestTemplate을위한 테스트 프레임 워크를 개발할 것입니다. 그러나 동작 중심 개발 테스트 스타일에는 Cucumber를 사용합니다.
Cucumber로 자동화 테스트 프레임 워크 설정을 시작하겠습니다!
Windows에서 Cucumber 테스트 프레임 워크 설정
# 1) 설치
(나는) 단계 정의 개발을 위해 Java를 사용할 것입니다. 따라서 먼저 Windows 용 JDK 설치 프로그램을 신탁 컴퓨터에 Java를 설치하십시오.
(ii) IDE (통합 개발 환경) : Automation Test Suite 개발을위한 IDE로 Eclipse를 사용했습니다. 다음에서 다운로드 할 수 있습니다. 식
(iii) Cucumber 용 Eclipse 플러그인 다운로드 :
Eclipse에서 다음 단계를 따르십시오.
경험이 풍부한 maven 인터뷰 질문 및 답변
- 메뉴 옵션에서 도움말-> 새 소프트웨어 설치를 선택하십시오.
- 시작하다 ‘오이 이클립스’ 검색 텍스트 상자에서.
- 클릭 설치 단추.
Eclipse에서 Cucumber 플러그인 설치
- 다음 버튼을 계속 클릭하십시오. 라이선스 검토 화면.
마지막으로 확인란을 클릭하여 라이센스 계약에 동의하고 끝 단추. 이것으로 설치가 완료됩니다. 이제 Eclipse IDE를 다시 시작하십시오. 이는 플러그인 설치를 적용하는 데 필요합니다.
(iv) 봄 항아리 : 스프링 프레임 워크에 속하는 RestTemplate 클래스를 사용할 것이므로 스프링 프레임 워크 jar가 필요합니다. 봄 항아리는 스프링 프레임 워크 로컬 폴더에 저장합니다. 예를 들어, C : / projectJar
(v) JSON-Simple Jars : JSON 구문 분석을 수행해야합니다. 따라서 우리는 가볍고 간단한 JSON API를 사용할 것입니다. 따라서 JSON-simple-1.1.jar을 다운로드하고 C : / projectJar
(vi) 오이 항아리 :
Cucumber 프로젝트를 실행하려면 다음 Cucumber 병이 필요합니다.
- 오이 코어
- 오이 자바
- 오이 -JUnit
- 오이 -JVM- 딥
- 오이보고
- 작은 오이
- JUnit
- 모키 토 올
- 적용 범위
- cucumber-HTML (html 보고서 용)
pom.xml 파일을 사용하여 이러한 파일을 다운로드 할 수 있습니다. 그러나 가장 간단한 방법은 다음 위치에서 이러한 jar 파일을 다운로드하는 것입니다. 중앙 저장소 해당 jar 파일을 로컬 폴더에 저장합니다. 예를 들어, C : / projectJar
이제 이것으로 필요한 모든 설치를 완료했습니다. 이제 BDD 테스트 자동화 프로젝트를 만들어 보겠습니다.
# 2) 프로젝트 설정
- 파일 만들기-> 새로 만들기-> Java 프로젝트-> 이름을‘ CRUD_Cucumber '.
- 이제 새 Java 패키지를 만듭니다. 데모.
- 프로젝트의 BuildPath를 구성합니다.
- 이전 섹션에서 보셨 듯이 Cucumber 플러그인을 설치하고 스프링을 다운로드하고 JSON 간단한 jar를 다운로드했습니다. 따라서 프로젝트에 빌드 경로를 추가하여이를 사용할 때입니다. 이를 위해 lib 폴더 CRUD_Cucumber '폴더 이제 C : / projectJar의 모든 jar를 lib / Cucumber, lib / Spring 폴더.
- ‘ CRUD_Cucumber’ -> 빌드 경로-> 빌드 경로 구성.
- 클릭 도서관 탭.
- 클릭 병 추가 버튼-> 모든 병을 선택 lib / Cucumber 폴더 및 lib / Spring 폴더. 그러면 프로젝트 빌드 경로에 모든 오이 항아리, 스프링 항아리 및 JSON 간단한 항아리가 추가됩니다.
Eclipse 패키지 탐색기에 프로젝트 구조가 다음과 같이 표시됩니다.
테스트 프로젝트의 패키지 구조
# 3) 기능 파일
이제 기능 파일을 작성하겠습니다. DemoFeature.feature 직원 서비스에서 CRUD 작업 수행 기능이 있습니다.
이 예에서는 더미 http://dummy.restapiexample.com/api 샘플 REST 서비스 하나를 사용했습니다.
이 기능 파일은 CRUD 작업을 수행하는 시나리오, 즉 CRUD (Create-Read-Update-Delete)를 포함하는 시나리오를 설명합니다.
- 먼저 기능을 정의하겠습니다. 여기서는 다음과 같이 설명 할 수있는 CRUD 테스트 방법입니다.
Feature: Test CRUD methods in Sample Employee REST API testing
- 이제 직원 레코드 만들기, 업데이트, 읽기 및 삭제와 같은 다른 시나리오가 있습니다. 따라서 POST 시나리오를 살펴보십시오.
Scenario: Add Employee record
- 직원 서비스의 URL을 설정하는 테스트의 전제 조건을 설명하십시오.
Given I Set POST employee service api endpoint
- 게시 요청을 보내는 실제 테스트 단계를 지정합니다.
When I Set request HEADER And Send a POST HTTP request
- 이제 응답 본문의 검증을 설명하십시오.
Then I receive valid Response
따라서 기능 파일에서 시나리오는 다음과 같습니다.
Scenario: Add Employee record Given I Set POST employee service api endpoint When I Set request HEADER And Send a POST HTTP request Then I receive valid Response
마찬가지로 아래와 같이 나머지 시나리오를 작성할 수 있습니다.
DemoFeature.feature
# 4) 단계 정의 구현
위 시나리오에서 사용 된 기능 단계의 경우 프로그래밍 방식 구현을 작성해야합니다 (이 경우 Java).
단계 정의는 표현식이있는 Java로 작성된 메소드입니다. 방법을 하나 또는 여러 단계에 연결합니다. 따라서 Cucumber가 기능 파일의 시나리오에 설명 된 단계를 실행할 때 먼저 일치하는 항목을 찾습니다. 단계 정의 실행하다.
예를 들어, POST를 사용하여 직원 추가 단계 정의를 다음과 같이 작성할 수 있습니다.
주어진 단계의 경우 구현은 다음과 같이 작성됩니다.
@Given('^I Set POST employee service api endpoint$') public void setPostEndpoint(){ addURI = 'http://dummy.restapiexample.com/api/v1/create'; System.out.println('Add URL :'+addURI); }
마찬가지로 When 단계의 경우 정의 방법은 다음과 같습니다.
@When ('^Send a POST HTTP request$') public void sendPostRequest(){ doublename_id = Math.random(); emp_name = 'zozo_'+name_id;//Just to avoid Duplicate Name entry String jsonBody'{'name':''+emp_name+'','salary':'123','age':'23'}'; System.out.println('
' + jsonBody); HttpEntityentity = new HttpEntity(jsonBody, headers); //POST Method to Add New Employee restTemplate = newRestTemplate (); response = restTemplate.postForEntity(addURI, entity, String.class); }
이제 확인 단계 부분, 즉 Then 단계 구현은 다음과 같습니다.
@Then ('^I receive valid Response$') Public void verifyPostResponse(){ responseBodyPOST = response.getBody(); // Write response to file responseBody = response.getBody().toString(); System.out.println('responseBody --->' + responseBody); // Get ID from the Response object employeeId = getEmpIdFromResponse(responseBody); System.out.println('empId is :' + employeeId); // Check if the added Employee is present in the response body. Assert.hasText(responseBody,employeeId); // Check if the status code is 201 Assert.isTrue(response.getStatusCode()==HttpStatus.OK); System.out.println('Employee is Added successfully employeeId:'+employeeId); }
노트 : 여기에서는 요청을 보내기 위해 RestTemplate 메서드를 사용하고 있습니다. ‘ Spring RestTemplate 및 TestNG를 사용한 REST API 테스트 ' . Rest Template 방법에 대한 자세한 내용은 튜토리얼을 참조하십시오.
따라서 단계 정의는 다음과 같습니다.
StepDefinition.java
동일한 방식으로 나머지 시나리오 인 직원 업데이트, 읽기 및 삭제에 대한 단계 정의를 구현할 수 있습니다.
# 5) 테스트 실행
이제 시나리오 및 단계 스크립트 개발 작업을 완료 했으므로 테스트를 실행 해 보겠습니다. 이를 위해 JUnit 러너 클래스를 작성해야합니다.
publicclassRunner { }
여기에서 클래스 이름 위에 다음 주석을 추가해야합니다.
@RunWith (Cucumber.class) : Cucumber의 테스트 러너 클래스로 실행합니다.
@CucumberOptions : 여기에서 Cucumber 프레임 워크가 실행 중에 조사 할 기능 파일 위치와 단계 정의 파일 위치를 지정합니다.
features='' glue=''
플러그인: 출력으로 생성되는 보고서에 대해 다른 형식화 옵션을 지정하는 데 사용됩니다.
따라서 러너 클래스는 다음과 같습니다.
TestRunner.java
그냥 오른쪽 클릭 TestRunner.java ' JUnit 테스트로 실행 ' . 다음과 같이 테스트 실행 결과가 표시됩니다.
Junit 탭 출력
콘솔에 다음 메시지가 표시됩니다.
콘솔 출력
# 6) 보고서
콘솔에서 결과를 확인했습니다. 그러나 Cucumber는 이해 관계자와 공유 할 수있는보다보기 쉬운 HTML 형식으로 테스트 결과를 제공합니다.
열다 표적 -> 오이 보고서 브라우저에서.
노트 : Junit 러너 클래스 CucucmberOptions를 기억하십니까?
@CucumberOptions (features='Features',glue={'demo'},plugin={'pretty', 'html:target/cucumber-reports'})
여기 플러그인은 폴더와 함께 HTML 형식 보고서에 대해 지정하는 옵션입니다.
target/cucumber-reports
이제 target cucumber-reports index.html 페이지를 엽니 다. 보고서 페이지는 성공적으로 실행 된 시나리오와 함께 기능 이름을 볼 수있는 HTML 페이지입니다.
따라서 보고서는 다음과 같습니다.
Html 형식의 CucumberTest 결과
결론
이 튜토리얼을 마치기 위해 지금까지 배운 내용을 요약하겠습니다.
BDD Cucumber REST API 테스트 자동화 프레임 워크를 설정하는 모든 단계를 처음부터 보았습니다.
이 과정에서 우리는 다음을 배웠습니다.
- 테스트 자동화를 위해 프로그래밍 언어로 Java를 선택했습니다.
- 우리는 Behavior Driven Development 테스트 방식으로 테스트 스위트를 만들기위한 테스트 프레임 워크로 Cucumber를 선택했습니다.
- 실제 HTTP 요청을 서버로 보내기 위해 Spring 프레임 워크 RestTemplate 클래스를 사용했습니다.
- 이러한 API를 사용하기 위해 Cucumber 플러그인을 설치하고 Cucumber 종속성 jar 파일, Spring jar 및 JSON-simple jar for parser API를 다운로드했습니다.
- 일반 영어로 시나리오를 설명하는 기능 파일, 단계를 매핑하는 단계 정의 파일 및 기능 파일을 실행하는 JUnit Runner 클래스를 만들었습니다.
- 마지막으로 Test Runner 클래스를 실행하고 콘솔에서 더보기 쉽고 읽기 쉬운 HTML 형식으로 결과를 확인했습니다.
간단히 말해서이 기사에서는 Cucumber로 REST API 테스트 자동화를 시작하는 방법을 설명했습니다. 모든 필수 소프트웨어 설치, 프로젝트 설정, TestScript 개발에서 테스트 실행까지 테스트 자동화 프레임 워크를 설정하고 생성 된 보고서를 보는 방법을 다뤘습니다.
이는 자동화 QA가 테스트 자동화 프레임 워크를 시작하기에 충분합니다. 그러나 누군가 Cucumber가 내부적으로 어떻게 작동하는지, Gherkin 언어가 어떻게 작동하는지 자세히 이해하고 싶다면 다음에서 탐색 할 수 있습니다. 오이.
오이와 함께 BDD 스타일의 REST API 테스트를 시작할 준비가 되었기를 바랍니다 !!
추천 도서
- 2021 년 최고의 10 가지 API 테스트 도구 (SOAP 및 REST API 테스트 도구)
- 최고의 소프트웨어 테스트 도구 2021 (QA 테스트 자동화 도구)
- Spring RestTemplate 및 TestNG를 사용한 REST API 테스트
- 시험 입문서 eBook 다운로드
- 가장 중요한 20 가지 API 테스트 인터뷰 질문 및 답변
- SaaS 테스트 : 과제, 도구 및 테스트 접근 방식
- Katalon Studio로 간단한 API 테스트 만들기
- Cucumber Tool과 Selenium을 사용한 자동화 테스트 – Selenium Tutorial # 30