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

Как я могу создать в robotframework ключевое слово с циклом for, которое применяет аргументы к своим итерациям?

Я работаю с Robot Framework и могу создать цикл, который проверяет определенные страницы моего сайта. В этом цикле я могу сделать несколько проверок. Пример:

*** Test Cases ***
Check all cat pages
  Get all cats
  :FOR  ${cat}  IN  ${cats}
  /  Go to catpage  ${cat}
  /  Check if page has  ${cat}
  /  Check if page is fluffy
  /  Check if page haz burger

*** Keywords ***
Get all cats
  [some irrelevant magic that gives me all cats]

Go to catpage
  [Arguments]  ${cat}
  Go to  ${SERVER}/catpages/${cat}.html

Check if page has
  [Arguments]  ${cat}
  [do some irrelevant magic with the variable ${cat}]

Check if page is fluffy
  [do some irrelevant magic]

Check if page haz burger
  [do some irrelevant magic]

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

*** Test Cases ***
Check if the cats are fluffy
  Check all cat pages
    [Check if page is fluffy]

Check what the cats have
  Check all cat pages
    [Check if page has  ${cat}]
    [Check if page haz burger]

*** Keywords ***
Check all cat pages
  Get all cats
  :FOR  ${cat}  IN  ${cats}
  /  Go to catpage  ${cat}
  /  [the keywords applied here]

  [...]

Итак, во втором примере цикл for будет применен дважды. Сначала он будет перебирать все страницы-каталоги и проверять для каждой страницы-каталога, насколько она пушистая. Во втором цикле он будет снова перебирать все страницы-каталоги и проверять, есть ли на каждой странице-кошке ${cat} и есть ли на ней бургер. Конечно, я мог бы написать для обоих тестовых случаев новый цикл for, но чтобы все было читабельно, я бы предпочел вызвать ключевое слово с помощью цикла и применить к нему несколько ключевых слов. Тогда я смогу легко добавлять новые ключевые слова (например, если я создам новое ключевое слово, такое как «Проверить, есть ли на странице фото», я могу добавить его в тест «Проверить, что есть у кошек», и тогда все страницы будут проверил, есть ли фото.

Как я могу добиться такой настройки?


  • Вы спрашиваете, как создать список ключевых слов (например, ["check if the cats are fluffy", "check what the cats have"], а затем запустить каждое из этих ключевых слов для каждой страницы? 22.04.2016
  • Хм, может быть, это было в пятницу днем, но я не подумал создать список различных ключевых слов, а затем использовать этот список в качестве переменной для ключевого слова, содержащего цикл for для использования на каждой странице. Позвольте мне попробовать это. Как это работает, когда для ключевого слова в списке требуется переменная сама по себе, например [проверить, есть ли на странице ${cat}]? 23.04.2016
  • Вы можете сделать так, чтобы все ваши пользовательские ключевые слова ожидали все возможные переменные (но используйте только те, которые вам нужны). В этом случае вы можете просто просмотреть список ключевых слов и выполнить Run Keyword ${kw} ${cat} ${cat_size} ${cat_color} 23.04.2016
  • Дайте нам знать, если это работает для вас 24.04.2016

Ответы:


1

Извините за задержку: помешали выходные, другие дела на работе и национальный праздник. Спасибо Брайану Окли и Джиму: вы наставили меня на правильный путь. Я также использовал это, чтобы найти правильный ответ.

Я использую несколько шагов. Сначала я создаю новое ключевое слово для ключевого слова, которое хочу использовать:

*** Keywords ***
Check if page has
[Arguments]  ${cat}
[do some irrelevant magic with the variable ${cat}]

Use check if page has
${Task1} =  convert to string  Check if page has
${Task2} =  convert to string  ${cat}
${TasksCombined} =  create list  ${Task1}  ${Task2}
set suite variable  ${CatTask}  ${TasksCombined}

Теперь я могу использовать предложение «Использовать проверку, есть ли страница», чтобы получить список с именем этого ключевого слова и переменной.

Далее я создаю две петли:

*** Keywords ***
Loop over all pages
  [Arguments]  ${TasksToPerform}
  Get all cats
  :FOR  ${kitten}  IN  ${cats}
  \  set suite variable  ${cat}  ${kitten}
  \  Go to catpage  ${cat}
  \  Loop over tasks  ${TasksToPerform}

Loop over tasks
  [Arguments]  ${TasksToPerform}
  ${AmountTasks} =  get length  ${TasksToPerform}
  :FOR  ${index}  IN RANGE  0  ${AmountTasks}
  \  ${Task} =  get from list  ${TasksToPerform}  ${index}
  \  ${TaskLength} =  get length  ${Task}
  \  run keyword if  '${TaskLength}' == '1'  ${Task[0]}
  \  ...  ELSE IF  '${TaskLength}' == '2'  ${Task[0]}  ${Task[1]}
  \  ...  ELSE IF  '${TaskLength}' == '3'  ${Task[0]}  ${Task[1]}  ${Task[2]}

В первом цикле я получаю всех разных кошек, перехожу на соответствующую страницу с кошками и запускаю второй цикл. Этот второй цикл сначала определяет, сколько задач необходимо выполнить. Затем он зацикливается на всех них. Для каждой задачи он проверяет, сколько аргументов имеет задача, и запускает задачу (первым элементом массива всегда должно быть ключевое слово) вместе с двумя ключевыми словами (вы можете сделать больше: есть ли способ сделать это динамически? ). Ой, и, установив переменную ${cat} в качестве переменной набора, я могу заменить в самих ключевых словах локальную переменную 'cat' на ${cat}, сгенерированную в первом цикле. Эти ключевые слова позволяют мне создавать эти тесты:

*** Test Cases ***
Check if the cats are fluffy
  Use check if page is fluffy
  @{TasksToPerform} =  create list  ${FluffyTask}
  Loop over tasks  ${TasksToPerform}

Check what the cats have
  Use check if page has
  Use check if page haz burger
  @{TasksToPerform} =  create list  ${CatTask}  ${BurgerTask}
  Loop over tasks  ${TasksToPerform}

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

Еще раз спасибо за подсказки, ребята!

28.04.2016
Новые материалы

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

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

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

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

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

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

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