2017-04-07 2 views
1

Specflow를 사용하는 시나리오가 오래 걸리고 3 명의 사용자를 추가해야합니다. 모든 단계는 동일합니다. 어떻게하면 흐름의 몇 단계 만 반복 할 수 있습니까?specflow의 반복 단계

시나리오 개요 : 여러 사용자와 그런 다음 3 사용자가해야 계속 버튼을

때 클릭에

Given Go to page 
#Login 
And Click on sign in button 
When Enter email '[email protected]' 
And Enter password '123456' 
And Click on Submit button 
And click on Events list button 
And Open Event 
And Go to new opened page  
And Click on Register to event button 

이 나는 ​​

When Click on Person title '<title>'  
And Select ticket package 
And Select ticket quantity '15' 
And Click on submit registration button 
And Enter mail <email> to register to event 
And Enter first name <first name> to register to event 
And Enter last name <last name> to register to event 
And Click on submit registration button 
And Click on submit registration button 
Examples: 
| title | email   | first name | last name | 
| Person 1 | [email protected] | Person1 | Person1 | 
| Person 2 | [email protected] | Person2 | Person2 | 
| Person 3 | [email protected] | Person3 | Person3 | 

정지가 반복 반복해야 할 단계 마무리 시나리오를 등록 목록에 있으십시오

+0

되지 않음에 대한 것입니다 반복하고 싶은 모든 단계를 반복하십시오. 당신이 준 예제는 당신을 위해 작동하지 않습니까? 하나의 시나리오에서 여러 단계를 수행 할 수있는 것처럼 보일 것입니다. 자신의 기능 단계 클래스에서 "단계"클래스를 상속 받으면 실제로 한 단계에서 다른 단계를 실행할 수 있습니다. – Sirk

+0

이 코드의 결과로 3 가지 테스트를받는 반면 단 하나의 테스트가 필요하고 동일한 단계를 다시 작성하지 않고 긴 흐름에서 반복해야합니다. –

+0

한 번의 실행으로 3 명의 사용자를 생성해야합니다. 사용자 생성이 1 단계라면 쉽지만 1 단계 사용자가 만드는 5 단계가 있습니다.이 5 단계를 다시 반복해야합니다. 그리고 정상적인 방법으로 실행을 계속하는 것보다. –

답변

3

내가 그랬어 나를 위해 잘 작동 보이는

때 등록 여러 사용자가 '3'이벤트 클릭에 '사람'이 시나리오의 개요를 사용하여,해야 할 일을 완전히 확인

[When(@"Register multiple users '(.*)' to event click on '(.*)'")] 
     public void WhenRegisterMultipleUsersToEventClickOn(int userQty, string title) 
     { 
      for (int i = 1; i <= userQty; i++) 
      { 
       WhenClickOnPersonTitle(title + " " + i); 
       WhenSelectTicketPackage(); 
       WhenSelectTicketQuantity(10); 
       WhenClickOnSubmitRegistrationButton(); 
       WhenEnterMailToRegisterToEvent("mail" + i + "@mai.com"); 
       WhenEnterFirstNameToRegisterToEvent("Name" + i); 
       WhenEnterLastNameToRegisterToEvent("Lastname" + i); 
       WhenClickOnSubmitRegistrationButton(); 
       WhenClickOnSubmitRegistrationButton();    
      } 
     } 
0

전화 수 있습니다. 다른 단계에서 단계. 귀하의 스텝 클래스 내에서 TechTalk.SpecFlow.Steps 클래스를 상속하십시오.

public sealed class RegisterMultipleUsersSteps : Steps 
{ 
    ... 
} 

그렇다면 왜 이것이 도움이됩니까? 물론 당신은 지금 너무

Scenario Outline: Register With Multiple Users 
Given Go to page 
... 
When i create user 'Person1' 'Last name 1' with email '[email protected]' 
When i create user 'Person2' 'Last name 2' with email '[email protected]' 
When i create user 'Person3' 'Last name 1' with email '[email protected]' 
... 
Then Some condition 

난 당신이 이미 나와 있기 때문에 이미 생성 된 각각의 자격 증명을 사용하여 사용자를 생성하는 단계를 가정합니다 아래처럼 뭔가를 한 번에 하나의 사용자를 생성하기 위해 5 단계를 호출 할 수 있습니다 당신 질문에. 당신에

이전에 사양 흐름 단계 클래스를 상속이 기능에 대한 클래스 단계는이보다 쉽게 ​​너무 많은 당신의 시나리오를 어지럽히 지 않고 사용자를 생성 할 수 있도록 다음과 같은

[When(@"I create user (.*) (.*) with email (.*)")] 
public void WhenICreateUserTitleNameSurnameWithEmailAddress(var firstName, var lastName, var emailAdd) 
{ 
    // Now because you inherited the specflow steps class 
    // you can call other steps that you already have  
    When(string.Format("Enter mail {0} to register to event", emailAdd)); 
    When(string.Format("Enter first name {0} to register to event", firstName)); 
    When(string.Format("last name {0} to register to event", lastName)); 
    When("Click on submit registration button"); 
} 

처럼 뭔가. 당신은 아마도 당신의 단계를 더 병합 할 수 있습니다.

gerkhin 언어로 작성하는 데 일반적으로 받아 들여지는 표준은 가능한 한 단순한 기능을 5 단계 이상으로 유지하는 것입니다. 이는 specflows 웹 사이트의 어딘가에 기록되어 있으며 많은 다른 장소에 문서화되어 있습니다. 당신이 그것보다 더 많은 것을 필요로한다면 당신은 당신의 테스트를 나눠야하거나 어떤 기능이 병합 될 수 있어야한다는 생각입니다.

나는 위의 도움이되기를 바랍니다.

+0

가능한 경우에도 다른 단계에서 단계를 호출하지 않습니다.내가 원하는 것은 공통된 도우미에 원하는 기능을 추출하고 그 도우미를 대신 사용하는 것입니다. 단계별로 단계를 호출하면 혼란스러운 혼란을 겪을 수 있으며 개인적으로는 비용을 들이지 않고 피할 수 있습니다. –

+1

@ThomasSundberg 충분히 좋지만, 우리가 잘 작동한다는 것을 알았습니다. 우리는 헬퍼 함수에서 대부분의 기능을 보유하고 있지만 동일한 순서로 같은 함수를 여러 단계에서 호출하지만 반복되는 코드를 줄이기 위해 1 개의 사소한 변경 만 있었으면합니다. 임베디드 스텝 접근법이 우리에게 잘 작동하는지 확인하십시오. 나는 downvote가 위의 합법적 인 해결책이기 때문에 조금 불공평하다고 생각합니다. – Sirk

+0

답변을 주셔서 감사합니다. 그리고 @tags는 어떨까요? 아마 @tag를 호출하여 시나리오를 재사용 할 수 있습니까? 태그를 사용하여 시나리오를 통합 할 수없는 방법에 대한 명확한 설명을 찾을 수 없습니다. –

관련 문제