Squeak.ru - шаблоны программирования

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

Мне нужно, чтобы переменные повторно использовались (совместно использовались) в сценариях в одном и том же файле функций. Пожалуйста, найдите ниже рабочий способ, который я использую в настоящее время.

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

Мне было интересно, могу ли я определить повторно используемые переменные как игнорируемый сценарий в том же файле функций, который я могу callonce из себя (тот же файл функций) следующим образом:

Файл my.feature:

Feature: My

Background:
* url myUrl
# call once explicitly the scenario tagged with '@init'
* def vars = callonce read('my.feature@init')

@ignore @init
Scenario: Return shared variables for all scenarios
    * def id = uuid()

# the non-ignored scenarios follow below this line...

Проблема. К сожалению, это приводит к бесконечному циклу с множеством ошибок. Похоже, что сам callonce (тот же файл, который вызывает callonce) снова запускает Background, включая callonce.

Возможна ли идея, показанная выше, и если да, то в чем моя ошибка?

Или вы могли бы callonce снова не обрабатывать Background? Что-то вроде добавления аргумента к callonce или использования karate.callSingle(file, dontProcessBackground=true)?

Большое спасибо.

--

Следующие работы (но громоздкие):

Файл my.feature:

Feature: My

Background:
* url myUrl
* def vars = callonce read('my.init.feature')

@one
Scenario: One
    * def payload = `{ "id" : "${vars.id}" }`
    * request payload
    * method post
    * status 200
    * match $.value == 'one'

@two
Scenario: Two
    * def payload = `{ "id" : "${vars.id}" }`
    * request payload
    * method post
    * status 200
    * match $.value == 'two'

Файл my.init.feature:

@ignore
Feature: Create variables to be used across mutliple scnearios

Scenario: Return shared variables for all scenarios
    * def id = uuid()

... где uuid() используется совместно с karate-config.js:

function fn() {
    var uuid = () => { return String(java.util.UUID.randomUUID().toString()) };
    // ...
    var config = { uuid: uuid }
    return config;
}
05.07.2021

Ответы:


1

Мне нужно передать общие переменные в другой файл функций

Нет ничего плохого в том, чтобы использовать второй файл для повторного использования. Так работают все языки программирования.

Если это такое неудобство, пожалуйста, добавьте код для каратэ, это проект с открытым исходным кодом.

06.07.2021
  • Вы правы, в общем-то нет ничего плохого в аутсорсинге кода. Это немного неудобно, если вам нужна всего одна общая переменная -› тогда это просто приводит к ухудшению читаемости. Мне было интересно, действительно ли это ошибка? Я не уверен, но не следует ли callonce кэшировать результат? Таким образом, даже если вы снова вызовете тот же файл функций, не должен ли он немедленно вернуть кешированный результат вместо повторной обработки callonce в Background? 06.07.2021
  • @droptix, поэтому я считаю, что это не ошибка. так что вы можете исправить код :) 06.07.2021
  • Что ж, с удовольствием. Я проверил код, и ошибка возникает между блокировкой и освобождением потока... Я думаю, что это происходит именно здесь: github.com/intuit/karate/blob/master/karate-core/src/main/java/ Может быть, я действительно что-то найду... дайте мне немного времени, чтобы исследовать 06.07.2021
  • Я открыл задачу и добавил свое предложение по коду здесь: github.com/intuit/karate/issues/1669 К сожалению, я не Java-программист, поэтому я сделал все, что мог... но был помечен как не исправленный, потому что это не является приоритетом. 06.07.2021
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...