2016-05-31 2 views
0

Мой вопрос касается лучших практик с BDD (Specflow). В веб-приложении, которое я тестирую, я должен написать функцию создания контракта.Лучший способ использовать таблицу с 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 

Таким образом, в этом случае для каждой вкладки я должен иметь модель Exemple:

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

Вопрос: В этой функции я стараюсь для ввода только обязательных полей. Но в других функциях мне нужно вводить иногда больше полей, поэтому в Tab1 я буду вводить, например, 37 полей. Что я могу сделать в этом случае:

1- Создать другую модель ?: у меня будет слишком много моделей

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 Outline, а не сценарий пройти входные значения. См. Ниже пример:

# 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); 
     } 

Но с Сценарий Outline вы должны использовать Примеры иначе specflow выдаст ошибку ,

+0

Я думаю, вы не поняли мою проблему, потому что здесь я не пытаюсь проверить что-то с помощью нескольких примеров, но это только один пример, но веб-страница, которую я должен тестировать, содержит несколько полей.Но, о чем вы говорите, у меня есть только 2 имени пользователя и пароль, и я хочу протестировать только эти два поля с несколькими примерами. – user3446229

+0

То, что я предоставил, является лишь примером. Вы можете добавить столько полей тестовых данных, сколько захотите. Как и имя пользователя и пароль, вы можете добавить Field1, Field2, Field3 и т. Д. Я использовал 20+ полей для своих тестов. Если вы хотите, вы можете использовать разные наборы тестовых данных для одного и того же теста. Просто используйте один набор, если нет. –

+0

Также та же проблема, вот как вы будете реализовывать решение, этот шаг. В моем случае я не занимаюсь серфингом, чтобы использовать ** Примеры ** только одну строку, но проблема, с которой я столкнулся, после этого, когда я буду реализовывать это решение я обязан использовать список с 5 полями, моя проблема связана с количеством филей, а не с входами. – user3446229

Смежные вопросы