run test cases parallel generate reports using karate tool
이 자습서에서는 API에서 몇 가지 기본 작업을 수행하고, 테스트 사례를 병렬로 실행하고, Karate Framework로 보고서를 생성하는 방법을 설명합니다.
이전 튜토리얼에서 기본 테스트 스크립트를 만드는 방법을 배웠습니다. 이제 API 및 Karate 프레임 워크를 사용하는 동안 수행 할 수있는 몇 가지 기본 작업을 학습 할 수 있습니다. 이러한 작업이 많이 있으며이 자습서에서는 일반적으로 사용되는 몇 가지 작업에 대해 설명합니다.
또한 단계별 접근 방식을 따라 테스트 케이스를 병렬로 실행하는 프로세스를 조사 할 것입니다. 또한 자동으로 생성되는 현재 보고서에 대해 논의하고 플러그인을 통합하여 생성 할 수있는 Cucumber 보고서와 비교합니다.
학습 내용 :
API 및 가라테 테스트 도구 작업
이전 자습서에서 설명한대로 .특색 우리가 만든 파일에 대해 다른 키워드를 사용하여 API에서 다른 작업을 수행 할 수 있습니다. 카라테 프레임 워크는 다양한 작업을 수행하는 데 사용할 수있는 여러 키워드를 제공합니다.
=> 추천 자료 : Karate 프레임 워크를 사용한 API 테스트
다양한 작업 수행
# 1) 콘솔에서 응답 인쇄
인쇄 콘솔 또는 파일에 결과를 인쇄하기 위해 Karate Framework에서 제공하는 키워드입니다. 가장 일반적인 용도 중 하나는 API의 응답을 인쇄하는 것입니다. 이것은 사용자에게 매우 유용 할 수 있습니다.
다음 코드 줄을 사용하여이를 수행 할 수 있습니다.
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #We are printing the Response of the API using the print keyword# Then print response
위의 코드 줄은 다음과 같은 출력을 제공합니다.
18:15:44.495 (main) INFO com.intuit.karate - (print) { 'ad': { 'company': 'StatusCode Weekly', 'text': 'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.', 'url': 'http://statuscode.org/' }, 'data': { 'last_name': 'Weaver', 'id': 2, 'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg', 'first_name': 'Janet', 'email': 'janet.weaver@reqres.in' } }
이것은 디버깅시 사용할 수있는 읽기 목적으로 콘솔에서 API의 응답을 인쇄하는 방법입니다.
# 2) 변수 선언
키워드를 사용하여 변수를 선언 할 수 있습니다. 데프 Karate 프레임 워크에서 필요한 경우 코드에서 선언 된 변수를 사용합니다.
아래 예제에서는 기존에 몇 줄의 코드를 추가했습니다. userDetails.feature 스크립트에서 변수를 선언하는 데 도움이되는 파일입니다.
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #We are printing the Response of the API using the print keyword Then print response # Declaring and assigning a string value: Given def varName = 'value' # using a variable Then print varName
# 3) 예상 응답에 대한 실제 응답 주장
Karate Framework는 다음을 사용하여 Assertion 관련 작업을 수행하는 데 도움이됩니다. 시합 예어. 그만큼 시합 공백은 중요하지 않고 키의 순서도 중요하지 않기 때문에 스마트합니다.
사용을 위해 일치 키워드, 비교를 나타내는 이중 등호 '=='를 사용해야합니다.
이제 우리는 몇 가지 용도에 대해 자세히 설명하겠습니다. 시합 예어.
a) 전체 예상 응답이 .feature 파일 자체에 언급 된 경우.
특정 시간에 파일 자체에서 즉시 유효성을 검사하려는 일부 데이터가 있습니다. 일반적으로 이러한 종류의 데이터는 코드를 디버깅하는 동안 언급됩니다.
아래와 같이 .feature 파일 자체에서 동일한 작업을 수행 할 수 있습니다.
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #Asserting the reponse #response variable is holding the Actual response from API #Right hand side value is holding the expected Response And match response == {'ad':{'company':'StatusCode Weekly','text':'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.','url':'http://statuscode.org/'},'data':{'last_name':'Weaver','id':2,'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg','first_name':'Janet', 'email':'janet.weaver@reqres.in'}}
URL로 요청을 보내는 경우 ‘https://reqres.in/api/users/2’ 브라우저에서 다음과 같은 응답을 받게됩니다.
{ 'ad': { 'company': 'StatusCode Weekly', 'text': 'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.', 'url': 'http://statuscode.org/' }, 'data': { 'last_name': 'Weaver', 'id': 2, 'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg', 'first_name': 'Janet', 'email': 'janet.weaver@reqres.in' } }
* .feature 파일을 사용하여 위에서 언급 한 응답의 유효성을 검사하려고합니다.
우리는 시합 Karate Framework에서 제공하는 키워드입니다. 어설 션 API 응답에서.
노트 : 위 단계를 수행하려면 API 응답을 한 줄로 변환해야합니다. 사용 가능한 도구를 사용할 수 있습니다. 온라인.
b) 예상 출력이 외부 JSON 파일에 보관되는 경우.
위의 예에서는 제한된 데이터와 처리하기 쉬운 동일한 응답이있는 시나리오를 논의했지만 실제 시나리오에서는 평가해야 할 수있는 거대한 JSON 응답 세트가 있습니다.
따라서 이러한 경우 응답을 외부 파일에 보관 한 다음 동일하게 확인하는 것이 좋습니다.
아래 예에서 동일한 내용에 대해 자세히 설명합니다.
- 만들 필요가 ExpectedOutput.json 아래 이미지와 같이 Project 폴더의 파일.
새 패키지 리소스 만들기-> 새 파일 만들기 ExpectedOutput.json
그리고이 파일에 JSON 응답을 저장하고 저장합니다.
다음 코드를 작성해야합니다. userDetails.feature 파일:
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #Verifying the JSON response by providing same in feature file And match response == {'ad':{'company':'StatusCode Weekly','text':'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.','url':'http://statuscode.org/'},'data':{'last_name':'Weaver','id':2,'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg','first_name': 'Janet','email':'janet.weaver@reqres.in'}} #Reading the file ExpectedOutput.json and storing same response in variable expectedResult Given expectedResult=read('./resources/ExpectedOutput.json') #Asserting the Actual Response with the Expected Response And match response == expectedResult
위의 예에서는 먼저 파일을 읽습니다. ExpectedOutput.json 응답을 변수에 저장 예상 결과 사용 다음 코드 줄 :
Given expectedResult=read('./resources/ExpectedOutput.json')
그런 다음 다음 코드 줄을 사용하여 Assertion을 입력합니다. 실제 반응 이랑 예상 결과 ' == ' 운영자.
And match response == expectedResult
c) 응답에서 특정 값 일치 / 확인
지금까지 API의 전체 응답을 확인했지만 매번 전체 응답을 확인하고 싶지는 않을 것입니다. 때로는 응답의 일부만 평가하고 싶을 때가 있습니다. 일반적으로 API 테스트를 위해 다른 도구를 사용하거나 프레임 워크를 만들 때 동일한 작업을 수행합니다.
더 자세히 이해하기 위해 다음 JSON 응답을 예로 들어 보겠습니다.
{ 'ad': { 'company': 'StatusCode Weekly' } }
매개 변수가 회사 다음과 같은 값을 가져야합니다. StatusCode Weekly, 그런 다음 JSON 경로를 만들어야합니다. 이는 JSON 파일을 탐색하고 '.'를 사용하여 수행 할 수 있습니다. (점 연산자)
위 응답의 JSON 경로는 다음과 같습니다.
ad.company ==“StatusCode Weekly”
다음은 특정 매개 변수의 값을 평가하는 데 도움이되는 코드 스 니펫입니다. 이 코드는 .특색 파일.
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #Verifying the JSON response by providing same in feature file And match response == {'ad':{'company':'StatusCode Weekly', 'text':'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.', 'url':'http://statuscode.org/'},'data':{'last_name':'Weaver','id':2,'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg', 'first_name':'Janet','email':'janet.weaver@reqres.in'}} #Reading the file ExpectedOutput.json and storing same response in variable expectedResult Given expectedResult=read('./resources/ExpectedOutput.json') #Asserting the Actual Response with the Expected Response And match response == expectedResult ##Creating JSON path to verify the values of particular parameters## And match response.ad.url == 'http://statuscode.org/' And match response.data.first_name == 'Janet'
아래는 파라 메트릭 어설 션을 수행하는 코드 줄입니다.
And match response.ad.url == 'http://statuscode.org/' And match response.data.first_name == 'Janet'
JSON 경로를 사용하여 매개 변수 값을 평가합니다.
사후 작업 수행
지금까지 우리는 방법이 ''일 때 API를 테스트하는 기본 시나리오를 다루었습니다. 가져 오기'. 하지만 실제 환경에서 작업 할 때는 서버에 많은 정보를 보내야하므로이 경우 ' 게시하다' 방법 .
이 섹션에서는 기본 POST 요청 작업에 대한 통찰력을 제공합니다.
POST 요청을 보내는 데 필요한 매개 변수에 대한 몇 가지 간단한 아이디어를 살펴 보겠습니다.
# 1) * .feature 파일에 JSON 본문이 언급 된 경우 POST 요청 생성
- 이전 자습서에서 언급 한 유사한 단계를 사용하여 userDetailsPost.feature를 만듭니다.
- 다음 코드 줄을 작성합니다.
Feature: Posting User Details Scenario: testing the POST call for User Creation Given url 'https://reqres.in/api/users' And request '{'name': 'morpheus','job': 'leader'}' When method POST Then status 201
특정 응답을 위해 서버로 보내야하는 본문이 항상 함께 제공되어야하는 POST 요청이므로 다음 구성 요소에서이를 언급했습니다.
의뢰: POST 메서드에 필요한 요청으로 JSON 본문을 사용합니다.
# 2) 외부 파일에 JSON 본문이 언급 된 경우 POST 요청 생성
일반적으로 우리는 거대한 요청 본문을 갖게 될 것입니다. *.특색 파일. 따라서 외부 파일에 보관하는 것이 좋습니다.
- 아래와 같이 Project 폴더에 PostBody.json 파일을 생성해야합니다. 새 패키지 리소스 만들기-> 새 파일 PostBody.json을 만들고이 파일에 JSON 본문을 저장하고 저장합니다.
노트 : 위의 JSON 파일에서 POST 메서드의 본문을 언급했습니다.
- userDetailsPost에 다음 코드를 작성해야합니다. .특색 파일:
Feature: Posting User Details Scenario: testing the POST call for User Creation using External File Given url 'https://reqres.in/api/users' Given postBody=read('./resources/PostBody.json') And request postBody When method POST Then status 201
다음 코드 줄을 사용하여 PostBody.json에서 JSON 본문을 읽고 있습니다.
Given postBody=read('./resources/PostBody.json')
노트 : 모든 userDeatils.feature 지금까지 생성 한 파일에는 기본 TestRunner.java 아래에 표시된대로 기본 테스트 스크립트 자습서에서 만든 파일을 실행합니다.
import org.junit.runner.RunWith; import com.intuit.karate.junit4.Karate; @RunWith(Karate.class) public class TestRunner { }
병렬로 테스트 케이스 실행
이제 기본 테스트 스크립트를 만드는 단계를 배우고 API에 대한 몇 가지 기본 작업을 수행 했으므로 이제 실제 환경에서 작업을 시작할 때입니다.
일반적으로 실행 속도를 높이려면 테스트 케이스를 병렬로 실행해야합니다. 기본적으로 아이디어는 짧은 시간에 더 많은 출력을 얻는 것입니다.
이것은 프레임 워크의 핵심 기능이며 JUnit, Maven 또는 Grade에 의존하지 않습니다. 이를 통해 다음을 수행 할 수 있습니다.
- 기능과 태그를 쉽게 선택하여 간단한 방식으로 테스트 스위트를 실행할 수 있습니다.
- surefire-plugin 폴더에서 병렬 결과를 봅니다.
- 더 나은 UI를 위해 Cucumber JSON 보고서를 통합 할 수도 있습니다 (곧 논의 될 예정).
Karate Framework에서는 테스트 케이스의 병렬 실행을 시작하기 위해 많은 단계를 수행 할 필요가 없습니다. 다음 단계 만 거치면됩니다.
1) 이제 우리는 TestRunner.java 지금까지 사용하고있는 파일입니다. 병렬 실행을위한 코드는 위 파일에 작성되어야합니다.
병렬로 코드를 실행하는 동안 다음 줄에 유의하십시오.
크롬에서 셀레늄에 대한 xpath를 찾는 방법
** 병렬 환경에서 작업하려고 할 때 @RunWith (Karate.class) 주석을 사용할 수 없습니다.
원본 열기 TestRunner.java 파일을 작성하고 지금 다음 코드를 사용하십시오.
import com.intuit.karate.Results; import com.intuit.karate.Runner; import org.junit.Test; // important: do not use @RunWith(Karate.class) ! public class TestRunner { @Test public void testParallel() { Results results = Runner.parallel(getClass(),5); } }
** 다음 코드는 JUnit 4 Maven 종속성
위의 코드 스 니펫에는 아래 코드 줄이 포함되어 있습니다.
결과 결과 = Runner.parallel (getClass (), 5);
이 줄은 런타임에서 클래스를 동적으로 가져와 병렬로 테스트 케이스의 인스턴스를 실행하도록 지시합니다.
두) 복제본 만들기 userDetails.feature 아래에 언급 된 파일 src / 테스트 / 자바 폴더.
이제 우리는 모두 병렬 실행을 위해 설정되었습니다. 두 . 풍모 파일.
삼) 이동 TestRunner.java 위 단계에서 만든 파일 및 JUnit 테스트로 실행하십시오. 이를 통해 테스트 케이스를 병렬 형식으로 실행합니다.
가독성을 높이기 위해 테스트 실행이 완료 될 때마다 Karate Framework가 콘솔에 일부 정보를 표시합니다.
결과는 다음과 같습니다.
병렬 실행을 사용하면 모든 기능이 병렬로 실행되고 시나리오도 병렬 형식으로 실행됩니다.
위의 단계에 따라 Karate Framework를 사용하여 API 테스트의 매우 기본적인 병렬 실행을 시작할 수 있습니다.
** 페이지의 다양한 필터를 통해 병렬 테스트에 대해 공부할 수 있습니다. 병렬 실행
보고를 위해 Cucumber 플러그인 통합
우리가 사용하고 있기 때문에 JUnit 러너 다른 곳에서 언급 된 다른 시나리오의 실행을 위해 *.특색 파일, 경로에 저장된 각 기능 파일에 대한 보고서를 자동으로 생성합니다. target / surefire-reports.
그것은 기본 UI 형식 보고서 실행 된 테스트 케이스를 표시합니다.
그러나 생성되는 보고서는 UI 측면에서 그다지 만족스럽지 않으며 이해 관계자와 보고서를 공유하려면보다 사용자 친화적이고 이해하기 쉬운 것이 필요합니다.
이러한보고 형식을 달성하기 위해 Karate Framework는 통합 옵션을 제공합니다. 오이보고 플러그인 그래픽 형식의 보고서를 생성하는 데 도움이 될 것입니다.
다음은 동일하게 통합하는 단계입니다.
#1) 다음을 추가하십시오. 오이보고 POM.xml에 대한 종속성
net.masterthought cucumber-reporting 3.8.0 test
#두) 하나만있는 경우 TestRunner.java 파일을 편집하십시오. *.특색 프로젝트의 파일.
Cucumber 플러그인에 대한 다음 generateReport () 메서드를 사용하여 TestRunner.java 파일을 업데이트해야합니다.
public class TestRunner { @Test public void testParallel() { generateReport(results.getReportDir()); assertTrue(results.getErrorMessages(), results.getFailCount() == 0); } public static void generateReport(String karateOutputPath) { Collection jsonFiles = FileUtils.listFiles(new File(karateOutputPath), new String() {'json'}, true); final List jsonPaths = new ArrayList(jsonFiles.size()); jsonFiles.forEach(file -> jsonPaths.add(file.getAbsolutePath())); Configuration config = new Configuration(new File('target'), 'demo'); ReportBuilder reportBuilder = new ReportBuilder(jsonPaths, config); reportBuilder.generateReports(); } }
위에서 언급 한 코드에서 우리는 다음 작업을 수행합니다.
- File의 새 인스턴스 만들기
- 대상 폴더 아래에 파일을 저장할 경로 제공
- 새로운 Cucumber 보고서를 생성 할 ReportBuilder 객체 생성
노트 : 위의 코드는 우리가 싱글을 가질 때 잘 작동합니다. *. 특색 우리 프로젝트의 파일.
#삼) 다음이있는 경우 TestRunner.java 파일을 편집하십시오. 여러 * .feature 프로젝트의 파일.
보고서 생성을 위해 시나리오가 실행되는 동안 병렬 실행이 처리되도록하기 위해 코드 줄 (아래 굵게 강조 표시됨)을 추가해야합니다.
public class TestRunner { @Test public void testParallel() { System.setProperty('karate.env', 'demo'); // ensure reset if other tests (e.g. mock) had set env in CI Results results = Runner.parallel(getClass(),5); generateReport(results.getReportDir()); assertTrue(results.getErrorMessages(), results.getFailCount() == 0); } public static void generateReport(String karateOutputPath) { Collection jsonFiles = FileUtils.listFiles(new File(karateOutputPath), new String() {'json'}, true); final List jsonPaths = new ArrayList(jsonFiles.size()); jsonFiles.forEach(file -> jsonPaths.add(file.getAbsolutePath())); Configuration config = new Configuration(new File('target'), 'demo'); ReportBuilder reportBuilder = new ReportBuilder(jsonPaths, config); reportBuilder.generateReports(); } }
위에서 언급 한 단계를 수행하면 다음을 사용하여 잘 표현 된 그래픽 UI 보고서를 성공적으로 만들 수 있습니다. 오이 –보고 플러그인.
아래 이미지와 같이 프로젝트의 다음 경로에서 보고서를 찾을 수 있습니다.
이 Karate Framework Tutorial에서 지금까지 수행 한 모든 작업에 대해 프로젝트에 대해 다음 보고서가 생성되었습니다.
결론
요약하면,이 튜토리얼에서 우리는 작업하는 동안 일상적으로 유용한 기본 작업에 대해 논의했습니다. 가라테 프레임 워크 및 실행 방법 여러 * .feature 파일 병행하여. 또한 다음을 사용하여 사용자를위한 그래픽 보고서를 만드는 방법을 배웠습니다. 오이보고 플러그인.
먼저 API에서 수행 할 수있는 기본 작업에 대해 설명했습니다. * .feature 파일 자체에서 본문을 언급하거나 (일반적으로 권장되지 않음) 외부 파일을 사용하여 (권장 사례, 깨끗한 코드를 유지하십시오).
둘째, 몇 가지 기본 단계를 수행 한 후 두 가지 테스트 결과를 성공적으로 실행할 수 있습니다. *.특색 몇 줄의 코드를 추가하여 병렬로 실행 된 파일 TestRunner.java 병렬 실행의 시작을 가능하게하는 파일.
더 나아가서 우리는 네이티브 JUnit 테스트 보고서를 Cucumber 보고서로 변환하는 방법을 배웠습니다. 오이보고 플러그인. 플러그인을 사용하면 더 나은 UI가 있고 사용자가 훨씬 더 이해하기 쉬운 보고서를 생성 할 수 있으므로 이러한 보고서를 공유하는 이해 관계자에게 더 나은 사용자 경험을 제공 할 수 있습니다.
이제 몇 가지 기본 작업을 수행하고 테스트 사례를 병렬로 실행하며 사용자를 위해 읽기 쉬운 보고서를 생성 할 수 있어야합니다.
추천 도서
- Karate 프레임 워크 자습서 : Karate를 사용한 자동화 된 API 테스트
- 2021 년 최고의 10 가지 API 테스트 도구 (SOAP 및 REST API 테스트 도구)
- Jenkins로 오이를 실행하는 방법 : 예제가 포함 된 자습서
- Selenium WebDriver에서 익스텐트 보고서 생성 가이드
- Specflow보고 : 테스트 보고서를 생성하고 선택적 테스트를 실행하는 방법
- TestLink를 사용하여 요구 사항을 관리하고, 테스트 케이스를 실행하고, 보고서를 생성하는 방법 – 자습서 # 2
- Eclipse 용 Appium Studio를 사용하여 Appium 테스트를 병렬로 실행
- Appium 테스트의 대규모 실행을 병렬로 실행하는 방법