2016-05-31 40 views
0

我的问题是关于BDD(Specflow)的最佳实践。 在我测试的web应用程序中,我必须编写一个关于创建合同的功能。使用Specflow的最佳方式

要创建合同,用户必须通过8个选项卡,并且对于每个选项卡用户将输入超过15个值(最小值4,最大值40)。

我的命题是

Given Go to the screen "Contrats" 
    And Click on the button "New contract" 
    When Enter in Tab1 
    | Field1  | Field2  | Field3 | 
    | -----------| ------------| ----------| 
    And Click on the Next button 
    And Enter in Tab2 
    | Field1   | Field2  | 
    | --------------- | -----------| 
    And Click on the Next button 
    And Enter in Tab3 
    | Field1 | Field2 | Field 3| Field4 | Field5 | Field6 |Field7   | 
    | -------| -------| ------ | -------- | --------- | -------| ----------------| 
    And Click on the Next button 
    And Enter in Tab4 
    | Field1 | Field2 | Field 3| Field4 | Field5 | Field6 |Field7   | Field8| 
    | -------| -------| ------ | -------- | --------- | -------| ----------------| ------| 
    And Click on the Next button 
    And Enter in Tab5 
    | Field1 | Field2 | Field 3| Field4 | Field5 | Field6 
    | -------| -------| ------ | -------- | --------- | -------| 
    And Click on the Next button 
    And Enter in Tab6 
    | Field1  | Field2  | Field3 | 
    | -----------| ------------| ----------| 

    And Click on the Next button 
    And Click on the Next button 
    And Cliquer sur Oui 
    And Enter in Tab7 
    | Field1  | Field2  | 
    | -----------| ------------| 
    And Click on confirm enregistration 
    And Save the contract reference and close the popup 
    And Click on button No 
    Then Redirecting the Summary tab 

所以在这种情况下为每个标签我必须对模型为例:

public class Tab1{ 
    public string Field1 { get; set; } 
    public string Field2 { get; set; } 
    public string Field3 { get; set; } 
    } 

问题: 在这个功能我是尝试只输入必填字段。 但是在其他功能中,我必须输入更多的字段,所以在Tab1中,我将输入例如37个字段。 我可以在这种情况下,这样做:

创建另一种模式?:我有太多的车型

2- 创建领域的最高只是一个模型,并为第一种情况我会为其他战队设置一个空值(Field4-> Field37):模型的属性太多。

3-为TAB1的每一个集团,我们创建类,如:

public Class Tab1{ 

    public Bloc1 Field1 { get; set; } 
    public Bloc2 Field2 { get; set; } 
    public Bloc3 Field3 { get; set; } 


    public class Bloc1{ 
    public string Field1 { get; set; } 
    public string Field2 { get; set; } 
    public string Field3 { get; set; } 
    } 

    public Class Bloc2{ 
    public string Field1 { get; set; } 
    public string Field2 { get; set; } 
    public string Field3 { get; set; } 
    } 
    . 
    . 
    . 
} 

但是这种解决方案我怎么能写我的功能?

回答

0

即使我面临与我的测试数据相同的问题。我需要为每个测试传递20到30个字段,因为它包含端到端工作流程。如果你使用的表,因为你需要创建的表类为每组输入值(在你的情况TAB1,TAB2等)

您可以使用Scenatio外形而不是方案通过这将是非常困难的输入值。请参阅下面的示例:

# Basic Login check 
# Verifies whether user is able to login or not 
Scenario Outline: REG - Login Check 
Given I have logged in using "<username>" and "<password>" 
When I should see my username after login 
Then I will logout of Echo 
Examples: 
| username   | password   |Field1|Field2|Field3|Field4|Field5| 
| lee kirby-walker | LKirby-Walker10* |input1|input2|input3|input4|input5| 
| sample 1   | pwd1    |input6|input7|input8|input9|input10| 

您可以将任意数量的测试数据行传递给测试。但是它在VS中创建了很多测试用例。这些测试数据值将作为参数传递给步骤定义方法。

请参见下面的步骤定义为一步鉴于我在使用“用户名”和“密码”

 [Given(@"I have logged in using ""(.*)"" and ""(.*)""")] 
     public void LogInUsingUsernameAndPassword(string userName, string password) 
     { 
      ScenarioContext.Current["userName"] = userName; 
      UserHomePage = LoginPage.Login(userName, password); 
      Reporter.ReportNote(string.Format("User {0} logged in successfully", userName), Status.Pass); 
     } 

但随着方案大纲必须使用例子已经登录否则specflow会抛出一个错误。

+0

我想你不明白我的问题,因为在这里我没有试图用多个例子来测试一些东西,但这只是一个例子,但我必须测试的网页包含多个字段。但你说的是我只有2个字段的用户名和密码,我想用多个例子来测试这两个字段。 – user3446229

+0

我提供的仅仅是一个例子。您可以根据需要添加尽可能多的测试数据字段。像用户名和密码一样,你可以添加Field1,Field2,Field3等。我已经使用了20多个字段来测试。如果你想要,你可以使用不同组的测试数据进行相同的测试。如果没有,只需使用一套。 –

+0

也是同样的问题,在这里你将如何实现解决方案,这一步。在我的情况下,我不是seraching使用**示例**只是一行,但我面临的问题是在那之后,当我将实现此解决方案我有义务使用一个有5个字段的列表,我的问题是关于数字而不是输入。 – user3446229