2017-04-07 4 views
1

Specflowで長いシナリオがあり、3人のユーザーを追加する必要があります。すべての手順は同じです。どのようにして、フローのステップのカップルだけを繰り返すことができますか?specflowのリピート手順

シナリオの概要:複数のユーザー

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 | 

停止を繰り返す必要があり、これらの手順で登録した後、3ユーザー必要がありますリストに入れる

+0

全くわからないで、私のため

すると登録、複数のユーザーの3 'イベントのクリックには細かい作業と思われるでしょう繰り返したいと思うすべてのステップを繰り返します。あなたが与えた例は、あなたのために働かないのですか? 1つのシナリオで多くのステップを実行できるように見えると思いますが、自分のフィーチャステップクラスでステップクラスを継承すると、実際には1ステップ内から他のステップを実行することができます – Sirk

+0

私はこのコードの結果として3つの異なるテストを受けていますが、1つのテストしか必要とせず、同じステップを書き直すのではなく、長いフローでちょうど繰り返す必要があります。 –

+0

1回の実行で私は3人のユーザーを作成する必要があります。ユーザー作成が1ステップであれば簡単ですが、1ユーザーを作成するための5ステップがあります。これらの5ステップをもう一度繰り返す必要があります。そして、通常の方法で実行を続けるよりも。 –

答えて

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 

以下のような何かを1つのステップに単一のユーザーを作成するために、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私はそれがうまくいくと思いますが、私たちはヘルパー関数のほとんどの機能を持っていますが、同じ関数を同じ順序で複数のステップで呼び出すことで繰り返しコードを減らしたいのですが、埋め込まれたステップのアプローチがうまく機能することを確認私はdownvoteが上記の合法的な解決策であるので少し不公平だと思う。 – Sirk

+0

回答に感謝します。そして、@タグについてはどうでしょうか、@tagを呼び出すことによってシナリオを再利用することは可能でしょうか?タグを使ってシナリオを公開しない方法を明確にすることはできません –