Рубрики
Без рубрики

BDD Web Automation 05: Создание сценариев автоматизации привода данных с помощью строки DOC и таблице данных

В этом посте мы говорили о двух специальных параметрах в формате файлов Gherkin, строки DOC и таблице данных.

Автор оригинала: CukeTest.

Содержание

  • DOC String
  • Таблицы данных

Это 5-й пост в серии, Тест на автоматизацию BDD для веб-пользовательского интерфейса Отказ В основном он говорит о том, как написать сценарий тестирования веб-автоматизации с помощью CuCumber.js, BDD-тестовой структуры. Вы будете использовать Node.js в качестве языка программирования. Первый пост Содержит ссылки на остальные сообщения.

Мы объяснили, что в файле функции сценарий может описать тестовый случай со списком шагов, каждый шаг имеет одно предложение. В тексте шага вы можете использовать цифры или цитируемые текст в качестве параметров, которые могут быть переданы на функцию определения шага во время выполнения. Иногда параметры, встроенные в текст шага, недостаточно. Нам может понадобиться блок длинного текста или таблица данных в качестве параметра. В этой статье мы представим Строка дока и Таблица данных в ногу.

DOC String

При написании шага, если некоторая информация, которую вы предоставляете, не могут быть размещены на одной строке, вы можете поместить их в строку DOC, которая является многострочным текстовым блоком. В Джеркин Формат, DOC String – это блок текста, начался с трех параллельных двойных кавычек «« « . Обратите внимание, что персонаж двойной цитаты на английском языке, не полная ширина двойных кавычек появляется в паре (например,”) на азиатских языках. Предположим, у нас есть сценарий о том, как опубликовать новый вопрос на сайте Stackoverflow Содержание почтового тела может быть помещено в строку дока:

5.png.

Ниже приведен текст этого сценария:

 Scenario: Ask a new question on StackOverflow
    Given click [Ask Question] button
    When input question Title as "How to use Cucumber DocString"
    And input question Body as
      """
      I am kind of newbie to Cucumber, when I learn Cucumber, 
      I don't know how to use it in the code, 
      can anyone give an example?
      """
    And I click [Post Your Question] button
    Then the question should be posted

В коде JavaScript String автоматически передается на функцию в качестве строкой переменной, как следующее:

When(/^input question Body as$/, async function (docString) {
    console.log(docString);
});

Проверьте этот сценарий в Cuketest Просто нажав кнопку «Запустить» кнопку со стрелкой в заголовке сценариев, вы можете увидеть вывод как следующее:

6.png.

В реальной реализации вы должны использовать WebDriver, чтобы фактически вставить строку DOC в элемент тела на веб-странице, и мы поговорим об этом в более поздних статьях.

Не только один текст может быть введен в строку DOC, если вам нужен объект данных, вы также можете поставить json String внутри строки DOC, а в коде, просто используйте Json.parse Заявление для анализа строки к объекту, а затем использовать его.

Таблицы данных

Иногда шаг требует массива данных, в этом случае вы можете использовать таблицу данных.

Вот сценарий отправки электронных писем, которые используют таблицу данных на первом шаге и строке DOC на втором шаге.

7.png.

Соответствующая текстовая версия:

  Scenario: Send emails
    Given the following people exist:
      | name  | email           |
      | Jason | jason@email.com |
      | Joe   | joe@email.com   |
      | Zark  | zark@email.org  |
    Then send email with title "Thank you for your contributions" to each of them
      """
      Dear ,
      
      Thank you a lot for your contributions to Cucumber community, 
      blah blah blah...
      """

В Cuketest вы можете просто щелкнуть правой кнопкой мыши шаг и нажмите кнопку «Добавить таблицу» на панели инструментов STEP, чтобы добавить эту таблицу. Тогда вы можете выполнить последовательность операций на столе.

В коде огурец обеспечивает 4 метода анализа для данных таблицы:

  1. с заголовками столбцов
  • хэши : Возвращает массив объектов, где каждая строка преобразуется в объект (заголовок столбца является ключом)
  • Ряды : возвращает таблицу в качестве 2-D массива, без первой строки
  1. без заголовков колонны
  • сырой : возвращает таблицу в виде 2-D массива
  • Rowshash : Возвращает объект, в котором каждая строка соответствует записи (первый столбец – это ключ, второй столбец – это значение). Rowshash может быть вызван только на таблице данных, где все строки имеют ровно два столбца.

Чтобы лучше понять эти четыре метода, мы можем распечатать данные для сравнения. Мы используем следующую реализацию JavaScript для этого сценария.

const { Given, When, Then } = require('cucumber')

Given(/^the following people exist:$/, async function (table) {
    this.addresses = table.hashes(); //store the address from the world
    //print out 4 different format to see differences
    console.log('rows', table.rows());
    console.log('hashes', table.hashes());
    console.log('raw', table.raw());
    console.log('rowsHash', table.rowsHash());
});

Then(/^send email with title "([^"]*)" to each of them$/, async function (title, docString) {
    this.addresses.map(({name, email}) => {
        mail = {
            TITLE: title,
            TO: name,
            BODY: docString.replace("", name)
        };
        //simulate sending mail
        console.log(mail);
    })
});

Вы можете запустить этот сценарий в Cuketest, приведен ниже вывод Partial Printec, который показывает эти 4 разные форматы таблицы:

hashes [ { name: 'Jason', email: 'jason@email.com' },
  { name: 'Joe', email: 'joe@email.com' },
  { name: 'Zark', email: 'zark@email.org' } ]
rows [ [ 'Jason', 'jason@email.com' ],
  [ 'Joe', 'joe@email.com' ],
  [ 'Zark', 'zark@email.org' ] ]
raw [ [ 'name', 'email' ],
  [ 'Jason', 'jason@email.com' ],
  [ 'Joe', 'joe@email.com' ],
  [ 'Zark', 'zark@email.org' ] ]
rowsHash { name: 'email',
  Jason: 'jason@email.com',
  Joe: 'joe@email.com',
  Zark: 'zark@email.org' }

Среди них хэши () Чаще всего использовать для стола с заголовками, а RAW () Чаще всего используется для стола без заголовков.

В этой реализации первое определение шагов назначает таблицу данных миру объекта. Мир Это концепция в огурце, которая представляет собой объектные данные, связанные с сценарием, связанные с данными, обычно для хранения переменных, которые используются среди шагов в одном и том же сценарии. В BDD и CUCURE каждый шаг может иметь только таблицу данных, либо строку DOC, не оба. Если вы хотите использовать их в вашем сценарии, вы должны поместить их на два разных шага. И в коде, кэшируйте данные в мире, пока все данные не будут доступны, а затем выполните операцию. В приведенном выше примере мы храним данные таблицы в мире и используем его во втором определении шага для отправки почты.

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

Вы можете дважды щелкнуть по нему, чтобы редактировать таблицу или щелкнуть правой кнопкой мыши, чтобы получить контекстное меню таблицы, которое может выполнять дополнительные операции на столе.

8.png.

Резюме

В этом посте мы говорили о двух специальных параметрах в формате файлов Gherkin, строки DOC и таблице данных. В следующем посте мы расскажем о том, как сгенерировать и обновлять функции определения шага в Cuketest.

Предыдущий пост: 05. Создание сценариев автоматизации привода данных с помощью DOC String & Data Table Следующий пост: 07. Используйте Chrome Browser для автоматизации Первый пост: 01. Создать и запустить первый образец