Nano Hash - криптовалюты, майнинг, программирование

Передовая практика для многих шагов в одном сценарии

Итак, у меня есть страница, на которой много кнопок/ползунков/входов и т. д. Мне нужна почти каждая из этих кнопок/ползунков... для создания формы в конце страницы. Как я могу справиться с этой ситуацией в BDD, когда мне нужно сделать несколько шагов, чтобы закончить дело? Также, в конце концов, я делаю утверждения для каждого шага, это правильный подход? Кроме того, я хочу изменить значения в таблице Examples: только для проверки различных условий/состояний.

Это небольшая часть моего кода:

    And as a deeplink url input "<deeplink_url_on_news_feed_banner>"
    And enter "<display_priority_on_news_feed>" as a display priority number
    And click cta on news feed banner
    And input cta text into cta news banner "<cta_text_news_banner>"
    And from the news_feed banner choose art file button
    And select available banner second
    And click create button
    Then announcement form has been created with valid announcement_name
    Then compare platform selection to announcement not the archive table    
    Then compare segment string "<segment_string>" to text in announcement 
    Then compare display priority number "<display_priority_number>" to text 
    Then compare deep link url "<deeplink_url>" to deep link url in 
    Then compare amount of cool down "<minutes>" to minutes in announcement ta

Это выше выглядит некрасиво, может быть, есть что-то, что я мог бы сделать лучше?

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

30.08.2019

  • Трудно ответить на ваш вопрос, потому что я не уверен, что именно вы тестируете. Можете ли вы дать немного больше информации о тестируемой системе? Я знаю, что вы не можете разглашать секреты компании, но, по крайней мере, небольшая общая информация не помешала бы. 06.09.2019

Ответы:


1

Вот где полезно использовать таблицу Gherkin. Глядя на ваш сценарий, некоторые из входных данных параметризованы. Другие по существу «жестко запрограммированы» или постоянны между сценариями. Есть две основные стратегии, которые дают вам баланс между лаконичностью и композицией шагов.

Когда я вижу такой шаг, как And select available banner second, я сразу же думаю: «В этом сценарии требуется любой баннер, и мне все равно, какой баннер выбран, если выбран баннер a. "

Формулировка вашего шага с помощью таблицы позволяет вам указать значения в вашем сценарии, предоставляя значения по умолчанию для других необходимых значений, которые вам не нужны:

When I create the following foo
    | Field                   | Value                              |
    | Deep link URL           | <deeplink_url_on_news_feed_banner> |
    | Display priority number | <display_priority_on_news_feed>    |
    | CTA news banner         | <cta_text_news_banner>             |

Определение шага будет иметь объект Table в качестве последнего аргумента, и вы можете получить доступ к значениям одно за другим. Для обязательных полей, которые не важны для вашего сценария, у вас будет пустая или нулевая строка. Если вы столкнулись с пустым значением, например, для «доступного баннера», то ваше определение шага может просто выбрать интеллектуальное значение по умолчанию (например, второй доступный баннер).

Преимущество заключается в том, что вы можете выбрать интеллектуальные значения по умолчанию для полей, которые не важны для вашего текущего сценария, и сократить сценарий. Недостатком является то, что за кулисами происходит некоторая «магия», когда в обязательные поля задаются фиктивные данные.

Другая стратегия состоит в том, чтобы дать общие шаги для других обязательных полей в сочетании с новым шагом выше. Тогда никакого «волшебства» не происходит:

When I create the following foo
    | Field                   | Value                              |
    | Deep link URL           | <deeplink_url_on_news_feed_banner> |
    | Display priority number | <display_priority_on_news_feed>    |
    | CTA news banner         | <cta_text_news_banner>             |
And I choose a news feed banner

Шаг I choose a news banner заменит 4 процедурных шага выбора баннера:

And click cta on news feed banner
And input cta text into cta news banner "<cta_text_news_banner>"
And from the news_feed banner choose art file button
And select available banner second

Шаг When I choose a news feed banner реализует сложные детали навигации по пользовательскому интерфейсу для выбора баннера новостной ленты.

Ваше утверждение тоже можно немного подчистить:

Then the following announcement should exist:
    | Field                | Value                     |
    | Segment              | <segment_string>          |
    | Display priority     | <display_priority_number> |
    | Deep link URL        | <deeplink_url>            |
    | Cool down in minutes | <minutes>                 |

Как и в шаге When выше, вы можете использовать объект таблицы Gherkin для сравнения.

Остальные Then шагов максимально лаконичны. Вы можете зайти так далеко, чтобы очистить свои шаги. Иногда сценарий просто длинный. Вы можете разбить его на отдельные сценарии и иметь только одно утверждение. Это может сделать каждый сценарий короче, но в итоге вы получите больше сценариев. Это уравновешивание.

09.09.2019
  • Спасибо за объяснение! это очень полезно, но я решил оставить множество шагов в этом сценарии, теперь я добавил около 10 таблиц примеров и «играю» с различными наборами переменных, а для следующего сценария я буду использовать таблицу 10.09.2019

  • 2

    Вы по-прежнему можете выбрать каждую кнопку, независимо от того, как вы сгруппируете шаги.

    Например, вы можете упростить эту часть

    And as a deeplink url input "<deeplink_url_on_news_feed_banner>"
    And enter "<display_priority_on_news_feed>" as a display priority number
    And click cta on news feed banner
    And input cta text into cta news banner "<cta_text_news_banner>"
    And from the news_feed banner choose art file button
    And select available banner second
    And click create button
    

    к чему-то вроде

    And fill the necessary form data
    And click create button
    

    И тогда ваш склеенный код будет делать те же шаги, вы просто поместите все в один метод вместо 5 или 6 методов.

    30.08.2019
  • может быть, это неплохая идея, но я удвою свои методы 30.08.2019
  • например, я мог бы использовать эту форму def step_impl(context): context.execute_steps(f step to be paste), но тогда у меня будет много двойных шагов 30.08.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..