Karate Gatling выдает исключения при использовании функции газа Gatling, и отчеты не создаются

При выполнении POC я столкнулся с проблемой. Каратэ Гатлинг хорошо работает, делая инъекции для моделирования с использованием Гатлинга. Однако, когда я попытался использовать функцию дросселирования Gatlings, она выдала несколько исключений. Выполнение завершено, говоря - Simulation com.perffeatures.ExecuteThrottle завершено за 150 секунд. После этого создается исключение. Отчет не сформирован

Это сценарий, который я пробовал

class ExecuteThrottle extends Simulation {
  before {
    println("Execution of load test started for throttle test")
  }
  val protocol = karateProtocol("/api/users?delay=3" -> pauseFor("post" -> 10))
  val perfscenario3 = scenario("Feature_1").exec(karateFeature("classpath:com/perffeatures/perfscenario3.feature"))

  setUp(
    perfscenario3.inject(
      constantUsersPerSec(1) during (10 minutes)
    ).protocols(protocol)
  ).throttle(
    reachRps(10) in (30 seconds),
    holdFor(1 minute),
    jumpToRps(25),
    holdFor(1 minute)
  ).assertions(
    global.responseTime.max.between(100, 5000),
    global.failedRequests.percent.is(0)
  ).maxDuration(20 minutes)

  after {
    println("Done with the load test execution for throttle test")
  }
}

Я получаю подобные исключения после завершения выполнения

    Simulation com.perffeatures.ExecuteThrottle completed in 150 seconds
    Done with the load test execution for throttle test
23:48:53.229 [GatlingSystem-akka.actor.default-dispatcher-12] ERROR c.intuit.karate.gatling.KarateAction - 'classpath:com/perffeatures/perfscenario3.feature' crashed on session Session(Feature_1,152,Map(),1536085133199,0,OK,List(),io.gatling.core.protocol.ProtocolComponentsRegistry$$Lambda$316/1455695758@1a06a693), forwarding to the next one
java.lang.IllegalStateException: cannot create children while terminating or terminated
    at akka.actor.dungeon.Children.makeChild(Children.scala:270)
    at akka.actor.dungeon.Children.attachChild(Children.scala:48)
    at akka.actor.dungeon.Children.attachChild$(Children.scala:47)
    at akka.actor.ActorCell.attachChild(ActorCell.scala:370)
    at akka.actor.ActorSystemImpl.actorOf(ActorSystem.scala:717)
    at com.intuit.karate.gatling.KarateAction.getActor(KarateAction.scala:30)
    at com.intuit.karate.gatling.KarateAction.$anonfun$execute$1(KarateAction.scala:99)
    at com.intuit.karate.cucumber.AsyncFeature.submit(AsyncFeature.java:52)
    at com.intuit.karate.cucumber.CucumberUtils.callAsync(CucumberUtils.java:160)
    at com.intuit.karate.cucumber.CucumberUtils.callAsync(CucumberUtils.java:154)
    at com.intuit.karate.gatling.KarateAction.execute(KarateAction.scala:103)
    at io.gatling.core.action.Action.$bang(Action.scala:35)
    at io.gatling.core.action.Action.$bang$(Action.scala:35)
    at com.intuit.karate.gatling.KarateAction.io$gatling$core$action$ChainableAction$$super$$bang(KarateAction.scala:26)
    at io.gatling.core.action.ChainableAction.$bang(Action.scala:60)
    at io.gatling.core.action.ChainableAction.$bang$(Action.scala:58)
    at com.intuit.karate.gatling.KarateAction.io$gatling$core$action$ExitableAction$$super$$bang(KarateAction.scala:26)
    at io.gatling.core.action.ExitableAction.$bang(BlockExit.scala:137)
    at io.gatling.core.action.ExitableAction.$bang$(BlockExit.scala:135)
    at com.intuit.karate.gatling.KarateAction.$bang(KarateAction.scala:26)
    at io.gatling.core.controller.inject.Injector.startUser(Injector.scala:130)
    at io.gatling.core.controller.inject.Injector.$anonfun$injectUser$1(Injector.scala:142)
    at akka.actor.Scheduler$$anon$4.run(Scheduler.scala:140)
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40)
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:43)
    at akka.dispatch.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at akka.dispatch.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
    at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
    java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at io.gatling.mojo.MainWithArgsInFile.runMain(MainWithArgsInFile.java:50)
        at io.gatling.mojo.MainWithArgsInFile.main(MainWithArgsInFile.java:33)
    Caused by: java.util.concurrent.TimeoutException: Futures timed out after [2 seconds]
        at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:255)
        at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:259)
        at scala.concurrent.Await$.$anonfun$result$1(package.scala:215)
        at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:53)
        at scala.concurrent.Await$.result(package.scala:142)
        at io.gatling.app.Gatling$.start(Gatling.scala:66)
        at io.gatling.app.Gatling$.fromArgs(Gatling.scala:45)
        at io.gatling.app.Gatling$.main(Gatling.scala:37)
        at io.gatling.app.Gatling.main(Gatling.scala)
        ... 6 more
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
716
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Да, это (единственное?) Известное разрешение интеграции Каратэ-Гатлинг на данный момент и четко упомянуто в документации: https://github.com/intuit/karate/tree/master/karate-gatling#limitations

Это технически возможно (но требует некоторой доработки) и будет доступно в следующем выпуске.

И я ищу кого-то, кто сможет внести свой вклад раньше.

Для нулевого времени паузы вы можете использовать Nil

val protocol = karateProtocol(
  "/cats/{id}" -> Nil,
  "/cats" -> pauseFor("get" -> 15, "post" -> 25)
)

О, я прочитал весь этот документ Каратэ Гатлинга, прежде чем начал. Но тогда я ничего не знал о Гатлинге. Но позже, когда я изучал Gatling, я забыл, что вы уже упомянули об этом ограничении. Мисс с моей стороны. Простите за это. Без самого дросселя большинство наших потребностей в выполнении нагрузочного теста для микросервисов было выполнено с помощью Karate Gatling. Мы также начали использовать Karate Gatling для нашего нагрузочного теста. Уже какое-то время мы используем Каратэ для функциональной стороны.

Sree 05.09.2018 06:33

@Sree - спасибо! это дает мне больше уверенности в том, что интеграция Gatling хорошо работает в реальных условиях. позже пингуем вас, чтобы узнать, что мы можем сделать для тестирования пользовательского интерфейса: P

Peter Thomas 05.09.2018 11:51

Другие вопросы по теме