specflow tutorial ultimate guide bdd tool
Specflow 및 BDD (Behavior Driven Development) 자습서에 대한 전체 가이드 :
Specflow 란 무엇입니까?
Specflow는 .NET 프레임 워크에서 BDD 사례를 지원하는 테스트 프레임 워크입니다. GitHub에서 호스팅되는 오픈 소스 프레임 워크입니다. .NET 응용 프로그램에 대한 ATDD (수락 테스트 드라이버 개발)를 사용하는 데 도움이됩니다. 이를 통해 누구나 명확하게 이해할 수있는 Gherkin 언어로 정의 된 일반 영어로 시나리오를 정의 할 수 있습니다.
Cucumber / JBehave for Java, Lettuce for Python, Jasmine for Javascript와 같은 BDD 접근 방식에서 테스트를 작성하기위한 다양한 도구가 있습니다. Specflow .NET 용.
BDD (행동 기반 개발)은 제품, 개발자 및 테스터와 같은 다양한 이해 관계자들 간의 커뮤니케이션 격차를 해소하는 것을 목표로하는 TDD (Test Driven Development)와 유사한 일련의 관행 또는 접근 방식입니다.
BDD 접근 방식의 최종 목표는 전체 팀이 이해할 수있는 비즈니스 요구 사항을 만들어 오해를 방지하고 개발중인 기능을 가장 수용 가능한 방식으로 제공하는 데 도움을주는 것입니다.
완전한 Specflow 튜토리얼 시리즈 :
읽기 완전한 Specflow 교육 시리즈 개념을 더 잘 이해하기 위해.
튜토리얼 # 1 : Specflow BDD 도구 소개 (이 튜토리얼)
튜토리얼 # 2 : Specflow 및 Selenium 예제
튜토리얼 # 3 : Specflow 바인딩 및 고급 개념
튜토리얼 # 4 : 단계 인수 변환 및 Specflow 테이블
튜토리얼 # 5 : 피클을 사용한 Specflow Living 문서
튜토리얼 # 6 : Specflow 보고서 생성기
튜토리얼 # 7 : Specflow 인터뷰 질문
Specflow 시리즈의 자습서에 대한 간략한 개요 :
튜토리얼 # | 기술 |
---|---|
7 | Specflow 인터뷰 질문 가장 인기있는 Specflow 인터뷰 질문 및 예제와 답변 목록이이 튜토리얼에 포함되어있어 첫 번째 시도에서 Specflow 인터뷰를 성공적으로 해결할 수 있습니다. |
1 | Specflow BDD 도구 소개 (이 튜토리얼) 이 입문 자습서에서는 Specflow에 대한 모든 것을 자세히 설명합니다. Specflow는 .NET 프레임 워크에서 BDD 사례를 지원하는 테스트 프레임 워크입니다. GitHub에서 호스팅되는 오픈 소스 프레임 워크입니다. .NET 응용 프로그램에 대한 ATDD (수락 테스트 드라이버 개발)를 사용하는 데 도움이됩니다. |
두 | Specflow 및 Selenium 예제 이 튜토리얼은 Youtube 애플리케이션에서 비디오 검색의 간단한 테스트 시나리오를 통해 Selenium과 Specflow 프레임 워크의 통합에 중점을 둡니다. 개인 클래스 필드를 통해 서로 다른 바인딩에서 데이터를 공유하는 방법도 확인합니다. |
삼 | Specflow 및 Selenium 예제 이 튜토리얼은 Youtube 애플리케이션에서 비디오 검색의 간단한 테스트 시나리오를 통해 Selenium과 Specflow 프레임 워크의 통합에 중점을 둡니다. 개인 클래스 필드를 통해 서로 다른 바인딩에서 데이터를 공유하는 방법도 확인합니다. |
4 | 단계 인수 변환 및 Specflow 테이블 이 유익한 Specflow 튜토리얼은 Specflow 인수에 대한 사용자 정의 유형 변환을 허용하는 Step Argument 변환에 대해 자세히 설명하여 상용구 코드를 방지하고 Specflow 테이블은 사용자 친화적 인 테이블 형식으로 한 단계로 많은 필드 / 데이터를 전달해야 할 때 유용합니다. 체재. |
5 | 피클을 사용한 Specflow Living 문서 이 Specflow 튜토리얼에서 기존 Specflow 파일을 사용하여 pickles라는 오픈 소스 프레임 워크를 통해 멋진 생생한 문서를 생성하는 방법을 알게 될 것입니다. |
6 | Specflow 보고서 생성기 이 Specflow보고 자습서에서는 Specflow 실행 파일을 통해 HTML 보고서를 생성하는 것과 함께 Specflow 기능 테스트를 실행하는 방법을 배웁니다. |
이 시리즈의 첫 번째 자습서부터 시작하겠습니다.
학습 내용 :
Specflow BDD 도구 소개
비디오 튜토리얼보기 :
Specflow 및 Behavior Driven Development에 대한 비디오 자습서는 다음과 같습니다.
BDD의 특징
BDD의 주요 기능은 다음과 같습니다.
#1) 예제 또는 시나리오를 통해 개발중인 시스템 또는 기능의 동작을 정의하려고합니다. 예를 들어 간단한 계산기 응용 프로그램을 구축하는 경우 다른 동작에는 더하기, 곱하기, 나누기 등이 포함됩니다.
따라서 BDD를 통해 모든 이해 관계자가 먼저 만나 Addition과 같은 응용 프로그램의 동작을 결정하고 아래와 같은 시나리오를 갖게됩니다.
Given, I have 2 numbers 30 and 50 as input When I add these 2 numbers Then I should get an output of 80
위의 표현을 보면 누구나 명확하게 이해할 수 있고 기능에 대한 요구 사항을 명확하게 설명하는 평이한 영어 시나리오입니다 (승인 기준에 따라). 따라서 첫 번째 단계는 이러한 요구 사항을 명확히하는 것입니다.
#두) 이제 이러한 시나리오 세트를 통해 QA는 이에 대한 테스트를 작성하며 기능이 아직 개발되지 않았으므로 처음에는 실패합니다.
#삼) 이제 개발자는 기능 코드를 작성하고 이러한 테스트를 다시 실행합니다.
# 4) 테스트는 통과하거나 실패 할 수 있습니다. 실패 할 경우 – 코드를 리팩터링하고 프로세스를 반복합니다.
# 5) 코드 리팩토링이 완료되면 모든 시나리오 / 테스트를 통과해야합니다.
따라서 본질적으로 BDD는 TDD 접근 방식을 사용하고 시나리오 형식으로 쉽게 이해할 수있는 공통 사양을 사용하여 다음 단계로 이동합니다. 또한 기능 문서 자체를 나타냅니다.
Cucumber / JBehave for Java, Lettuce for Java와 같은 BDD 접근 방식에서 테스트를 작성하기위한 다양한 도구가 있습니다. 파이썬 , 자바 스크립트 용 Jasmine, Specflow .NET 용.
CPU 및 GPU 온도를 모니터링하는 최고의 프로그램
이 튜토리얼에서는 Specflow에 초점을 맞출 것입니다.
또한 읽기 => 최고의 BDD 도구 및 테스트 프레임 워크
키워드 – 주어진시기,시기
단위 테스트 세계에서 우리 대부분은 Arrange, Act 및 Assert와 같은 3 개의 A에 익숙합니다. Now, Given, When, Then은 BDD 세계에서 이들을 대체합니다.
가져 가자 예 이들 각각을 이해하기 위해. 전제 조건으로 로그인해야하는 전자 상거래 응용 프로그램의 장바구니에 추가되는 제품의 유효성을 검사하는 시나리오를 나열한다고 가정합니다.
사양은 다음과 같이 작성할 수 있습니다.
Scenario: Products get added to cart for a logged in customer Given I have a logged-in customer on my application When I add 2 quantity of a product to my shopping cart Then the shopping cart should get updated and have the right product and quantity
주어진 :이것은 정의되는 시나리오의 사전 조건 세트를 설명하는 데 사용됩니다. 예를 들어이 예에서 시나리오의 전제 조건은 로그인 한 고객입니다. 따라서 가지런 히하다 단위 테스트에서 비유하면 단계 구현은 로그인 한 고객이 있는지 확인해야합니다.
언제 :이것은 조치 또는 실행 단계를 설명하는 데 사용됩니다. 이 예에서는 고객이 장바구니에 제품을 추가하려고한다는 것을 보여줍니다. 따라서이 단계의 단계 구현은 카트에 제품을 추가하는 시뮬레이션 코드를 처리합니다. 이것은 행위 단위 테스트의 단계.
그때 :이것은 시나리오의 결과와 본질적으로 유효성 검사가 배치되어야하는 위치를 설명하는 데 사용됩니다. 주장 단위 테스트 세계에 발을 들여 놓으십시오. 여기의 예에서 단계 구현은 제품이 실제로 추가되었는지 여부와 수량이 고객이 선택한 것과 동일한 지 여부를 주장합니다.
기능 파일
기능 파일은 기본적으로 개발 또는 테스트중인 응용 프로그램에 대한 여러 시나리오의 그룹입니다. 또한 응용 프로그램을 논리적으로 분리 할 수있는 응용 프로그램의 다른 모듈로 간주 할 수도 있습니다.
예를 들면 :
전자 상거래 응용 프로그램은 다음과 같은 다른 고급 기능 파일을 갖도록 결정할 수 있습니다.
- 로그인 / 로그 아웃 기능
- 쇼핑 카트
- 결제 등
Specflow 란 무엇입니까?
Specflow는 .NET 프레임 워크에서 BDD 방식을 지원하는 도구입니다. GitHub에서 호스팅되는 오픈 소스 프레임 워크입니다. .NET 응용 프로그램에 대한 ATDD (수락 테스트 드라이버 개발)를 사용하는 데 도움이됩니다.
예제 별 사양 (Specification By Example) 패러다임을 사용하여 애플리케이션에 대한 비즈니스 요구 사항을 바인딩하면 모든 이해 관계자가 애플리케이션 동작을 더 잘 이해할 수 있으므로 올바른 기대치로 제품을 배송 할 수 있습니다.
그것은 사용합니다 작은 오이 기능 및 시나리오를 만들기위한 구문. 또한 활발한 토론 / 개발자가 있습니다. 법정 .
Specflow – 시작하기
이 섹션에서는 Visual Studio IDE에 specflow를 설치하고 간단한 문자열 유틸리티 응용 프로그램을위한 기능 파일을 만드는 방법을 살펴 봅니다.
샘플 신청 정보
이 튜토리얼에서는 다음과 같은 다양한 작업을 제공하는 기능 / 인터페이스가있는 계산기 애플리케이션을 사용하여 Specflow 프레임 워크의 다양한 기능을 설명합니다.
- 2 개의 숫자를 더합니다.
- 2 개의 숫자를 뺍니다.
- 2 개의 숫자를 나누고 곱하기.
- 주어진 숫자의 제곱근 찾기.
Specflow 설치 안내서
Specflow 설치는 2 단계 프로세스입니다.
#1) Visual Studio IDE에 필요한 플러그인을 설치합니다.
- specflow 플러그인을 설치하려면 도구-> 확장 및 업데이트로 이동하십시오.
- 이제 왼쪽 패널에서 '온라인'을 클릭합니다.
- 이제 오른쪽 패널에서 specflow를 검색하십시오.
- 검색 결과에서 'Specflow for Visual Studio 2017'을 선택합니다.
#두) 기능 파일 및 단계 정의로 프로젝트 설정.
- Visual Studio에서 간단한 새 프로젝트를 만듭니다. 클래스 라이브러리 / 콘솔 애플리케이션 / 단위 테스트 프로젝트 등과 같은 모든 종류의 프로젝트를 만들 수 있습니다. 간단하게하기 위해 클래스 라이브러리 프로젝트를 사용합니다. 프로젝트 이름을 'SpecflowBasic'으로 지정합니다.
- 생성 할 Specflow 시나리오를 실행하려면 테스트 실행기가 필요합니다. Specflow는 Specflow + Runner (유료 버전이며 무료 버전은 지연이 발생 함)라는 기본 제공 러너를 제공합니다.
(이 시리즈의 추가 기사에서 보게 될 NUnit 및 MsTest 용 다른 러너도 사용할 수 있습니다.)
Specflow + Runner를 설치하려면 – 도구-> NuGet 패키지 관리자-> 패키지 관리자 콘솔로 이동합니다.
패키지 관리자 콘솔이 열리면 명령을 실행합니다.
Install-Package SpecRun.SpecFlow
- 또한 가치를 주장하려면 테스트 프레임 워크의 도움이 필요합니다. NUnit은 옵션 중 하나이고 다른 옵션에는 MsTest 등이 포함될 수 있습니다. NUnit 프레임 워크를 응용 프로그램에 설치하려면 패키지 관리자 콘솔을 열고 command를 입력합니다.
Install-Package NUnit
#삼) 테스트중인 응용 프로그램이 될 'CalculatorApplication'이라는 새 클래스를 만듭니다. 주어진 입력에 대해 덧셈 / 곱셈 / 나눗셈 / 제곱근 등을 수행하는 함수가있는 간단한 클래스입니다. 이것은 CalculatorApplication 클래스의 모습입니다.
# 4) 패키지가 설치되면 프로젝트에 2 개의 폴더를 만들고 기능 파일과 단계 바인딩을 각각 저장하기위한 기능 및 단계 정의로 이름을 지정합니다. 기능 및 단계 정의에 대한이 폴더 구성의 이유에 대해 자세히 설명합니다.
# 5) 이제 기능 폴더에서 새 기능 파일을 추가하고 이름을 CalculatorFeature로 지정합니다.
기본적으로 기능 파일에 기능 및 시나리오에 대한 설명이 있음을 알 수 있습니다.
우리가 테스트 할 것으로 바꾸십시오.
Feature: CalculatorFeature In order to test my application As a developer I want to validate different operations of the application Scenario: Add two numbers Given I have provided 70 and 20 as the inputs When I press add Then the result should be 90 Scenario: Substract two numbers Given I have provided 70 and 20 as the inputs When I press substract Then the result should be 50 Scenario: Multiply two numbers Given I have provided 70 and 20 as the inputs When I press multiply Then the result should be 1400 Scenario: Divide two numbers Given I have provided 70 and 20 as the inputs When I press divide Then the result should be 3.5 Scenario: SquareRoot of number Given I have provided 70 as input When I press squareroot Then the result should be 8.37
# 6) 단계 정의 생성 : Specflow는 기능 파일 시나리오의 여러 단계에 대한 바인딩 / 구현을 생성하는 자동화 된 방법을 제공합니다. 기능 파일을 마우스 오른쪽 버튼으로 클릭하고 '단계 정의 생성'을 클릭하면됩니다.
이 단계는 구현을 보장하지 않습니다. 모든 단계에 대해하지만 시나리오에서 공통 단계를 그룹화하고 가능한 많은 바인딩을 재사용하기 위해 최선을 다합니다. 그러나 시나리오 단계를 구현해야 할 때마다 상용구 코드를 피하는 작업을 수행합니다.
클릭 후 '단계 정의 생성' , 프로세서가 감지 한 식별 된 단계 구현을 나열하는 창이 표시됩니다. 요구 사항에 따라 선택하거나 선택 취소 할 수 있습니다.
이후 섹션에서는 위 스크린 샷에 표시된 스타일 드롭 다운에 대한 자세한 내용을 살펴 보겠습니다.
지금은 모두 기본 설정으로 선택된 상태로 유지하겠습니다. 미리보기를 클릭하면 구현 모습에 대한 스냅 샷이 표시됩니다.
단계 정의를 만든 후에도 구현되지 않은 단계가있는 경우 기능 파일에는 구현되지 않은 응용 프로그램을 시각적으로 식별하는 방법이 있습니다. 아직 구현되지 않은 (또는 모호한 단계 정의가있는) 몇 가지 단계가 있다는 것을 절대적으로 쉽게 알 수 있도록하여 이러한 단계를 다른 색상으로 표시합니다.
샘플 화면은 다음을 설명합니다.
노트 : 단계 정의도 수동으로 생성 할 수 있습니다. (Binding) 속성이있는 모든 .cs 파일은 단계 구현 클래스이며 Gherkin 구문은 주어진 시나리오 단계의 구현과 일치하는 것을 찾습니다.
실행
위 섹션에서 이미 Specflow + Runner를 추가 했으므로 시나리오 실행은 매우 간단합니다 (Specrun의 평가 버전이기 때문에 시나리오가 실행되기 전에 10-20 초의 가변 지연을 도입합니다., 등록 된 변형에는이 지연이 없습니다.) 및 NUnit 및 MsTest와 같은 Specrun 러너의 다른 맛).
모든 단계에 아니었다 구현되고 아직 보류 상태 인 바인딩이있는 경우. 그러면 출력이 보류 중으로 표시됩니다.
바인딩에 대한 구현이없고 시나리오가 모두 보류중인이 시점에서 이러한 테스트 / 시나리오를 실행 해 보겠습니다.
이제 테스트하려는 메서드 (예 : 더하기, 빼기, 곱하기, 나누기 및 sqrt)로 CalculatorApplication 클래스를 구현해 보겠습니다.
아래는 CalculatorApplication 클래스가 어떻게 보이는지에 대한 코드 샘플입니다.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SpecflowBasic { class CalculatorApplication { public int add(int input1, int input2) { return input1 + input2; } public int subsctract(int input1, int input2) { return input1 - input2; } public int multiply(int input1, int input2) { return input1 * input2; } public double divide(double input1, double input2) { return input2 != 0 ? Math.Round(input1 / input2, 2) : 0; } public double squareRoot(int input1) { return input1 != 0 ? Math.Round(Math.Sqrt(input1), 2) : 0; } } }
애플리케이션이 준비되면 각 시나리오 단계에 대한 바인딩을 구현하는 방법을 찾아 보겠습니다.
이를 구현하기위한 단계별 접근 방식을 살펴 보겠습니다.
- 먼저 테스트해야 할 응용 프로그램의 인스턴스가 있어야합니다. 단순화를 위해 단계 바인딩에서 AUT (Application Under Test 클래스)를 인스턴스화하고 인스턴스화 된 인스턴스를 사용하여 구현 된 단계에 따라 실제로 다른 메서드 / 함수를 호출 할 수 있습니다.
- 입력 및 출력을 캡처하기 위해 Application 인스턴스에서 함수를 호출하기 위해 이러한 값을 보유하는 변수를 선언합니다.
추가 기능의 유효성을 검사하는 데 관련된 모든 바인딩에 대한 종단 간 구현을 살펴 보겠습니다 (나머지 시나리오에서는 단순히이를 확장 함).
추가 시나리오는 다음과 같습니다.
Scenario: Add two numbers Given I have provided 70 and 20 as the inputs When I press add Then the result should
이러한 개별 단계 각각에 대한 단계 구현을 살펴 보겠습니다. 모든 단계 구현을 사용하기 위해 아래에 표시된대로 입력 및 출력 변수를 보유 할 변수뿐만 아니라 테스트중인 애플리케이션의 인스턴스를 선언합니다.
// instantiating application instance CalculatorApplication app = new CalculatorApplication(); // variables to hold input values and the intermeditate result int input1, input2; double output;
시나리오 단계의 구현을 하나씩 살펴 보겠습니다.
1 단계: 70과 20을 제공했음을 감안할 때 같이 입력.
(Given(@'I have provided (.*) and (.*) as the inputs')) public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1) { input1 = p0; input2 = p1; }
여기에서는 시나리오 단계에서 전달 된 값으로 입력 변수를 초기화했습니다. p0 및 p1은 시나리오 단계에서 전달 된 값이며 각각 70 및 20으로 초기화됩니다.
2 단계: 추가를 누르면.
(When(@'I press add')) public void WhenIPressAdd() { output = app.add(input1, input2); }
테스트중인 애플리케이션에서 실제 메서드가 호출되는 실행 (또는 작동) 단계입니다. 입력 변수 input1 및 input2에는 이미 Step1에서 전달 된 값이 포함되어 있으므로 응용 프로그램 인스턴스는 이러한 변수를 사용하여 메서드를 호출 할 수 있습니다.
3 단계 : – 결과는 90이어야합니다.
(Then(@'the result should be (.*)')) public void ThenTheResultShouldBe(double p0) { Assert.AreEqual(p0, output); }
이는 메서드 호출에 의해 출력이 생성되고 예상 출력에 대해 Application 인스턴스의 유효성이 검사되는 유효성 검사 (또는 어설 션) 단계입니다.
유의하십시오. 주장 사용 된 키워드는 NUnit Framework에서 가져온 것으로, 설정된 유효성 검사 / 기대에 따라 true 또는 false를 반환합니다. false를 반환하는 경우 단계 구현이 실패하고 시나리오 결과가 실패로 표시됩니다.
애자일 스크럼 방법론 인터뷰 질문 답변
또한 출력 변수는 응용 프로그램 인스턴스에서 실제 메서드가 호출 된 이전 단계에서 값을 가져옵니다.
위와 유사하게 나머지 시나리오 단계에 대한 단계 구현은 동일한 방식으로 수행됩니다. 차이점은 응용 프로그램 인스턴스에서 다른 메서드를 호출하고 다른 출력 값을 어설 션하는 것입니다.
모든 시나리오 단계가 구현되면 테스트를 실행할 수 있습니다.
결과 출력은 다음과 같습니다.
개별 단계의 출력을 나열하는 개별 시나리오의 출력도 볼 수 있습니다.
결론
이 기사를 통해 BDD가 무엇이며 Specflow를 다룬 .NET 용 BDD를 지원하는 도구가 무엇인지에 대한 기본적인 이해를 얻었기를 바랍니다.
또한 샘플 애플리케이션을 사용하여 Specflow 기능 파일을 설치하고 실행하는 방법에 대해서도 논의했습니다.
코드 파일
애플리케이션에서 사용되는 코드 파일은 다음과 같습니다.
CalculatorFeatureSteps.cs
using System; using TechTalk.SpecFlow; using NUnit; using NUnit.Framework; namespace SpecflowBasic.StepDefinitions { (Binding) public class CalculatorFeatureSteps { // instantiating application instance CalculatorApplication app = new CalculatorApplication(); // variables to hold input values and the intermeditate result int input1, input2; double output; (Given(@'I have provided (.*) and (.*) as the inputs')) public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1) { input1 = p0; input2 = p1; } (Given(@'I have provided (.*) as input')) public void GivenIHaveProvidedAsInput(int p0) { input1 = p0; } (When(@'I press add')) public void WhenIPressAdd() { output = app.add(input1, input2); } (When(@'I press substract')) public void WhenIPressSubstract() { output = app.subsctract(input1, input2); } (When(@'I press multiply')) public void WhenIPressMultiply() { output = app.multiply(input1, input2); } (When(@'I press divide')) public void WhenIPressDivide() { output = app.divide(input1, input2); } (When(@'I press squareroot')) public void WhenIPressSquareroot() { output = app.squareRoot(input1); } (Then(@'the result should be (.*)')) public void ThenTheResultShouldBe(double p0) { Assert.AreEqual(p0, output); } } }
CalculatorApplication.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SpecflowBasic { class CalculatorApplication { public int add(int input1, int input2) { return input1 + input2; } public int subsctract(int input1, int input2) { return input1 - input2; } public int multiply(int input1, int input2) { return input1 * input2; } public double divide(double input1, double input2) { return input2 != 0 ? Math.Round(input1 / input2, 2) : 0; } public double squareRoot(int input1) { return input1 != 0 ? Math.Round(Math.Sqrt(input1), 2) : 0; } } }
packages.config
다가오는 튜토리얼에서는 Specflow 및 Selenium Webdriver를 사용하는 End to End 예제에 대해 간략히 설명합니다!