Каратэ-Гатлинг: Как исключить установку / создание из времени реакции симуляции? - PullRequest
1 голос
/ 28 марта 2019

Я пытаюсь установить / обеспечить выполнение соглашений об уровне обслуживания на конечных точках для службы.В некоторых тестах есть шаг создания, при котором учетная запись создается с помощью вызова API.Шаг создания может занять секунду или две.Я пытаюсь измерить / установить утверждения о производительности GET (~ 50 мс), не включая время для создания (1-2 сек).

Использование файлов статических фидеров с жестко закодированными идентификаторами не является идеальным, поскольку мы хотели бы иметь возможность запускать тест в переходных средах, и мы хотели бы избежать предположения о хрупкости: 1) aконкретная учетная запись существует 2) ни один другой процесс не вмешивался в нее

Подход, который я рассматриваю, - настроить фидер, который создает учетную запись и затем вызывает файл функции.Фидер может использовать API Java для вызова файла объекта для создания учетной записи, но я не уверен, как передать идентификатор созданной учетной записи в метод GET.Могу ли я использовать сессию Гатлинга для этого?(В этой части мне больше всего нужна помощь)

Вопросы, на которые я могу ответить экспериментально после того, как смогу передать идентификатор учетной записи:

Я также не уверен, что задержка ответа на созданиехорошо играет с питателями Гатлинга - приведет ли это к провалу симуляции?Неужели время для фидера создать учетную запись исключено из моделирования?.

Как я в данный момент выполняю симуляции (пока не с фидерами)

class FooSimulation extends AbstractSim {
  override def urlPattern: String = "api/foo"

  override def karateFeaturePath: String = "classpath:foo.feature"
}

import com.intuit.karate.gatling.PreDef.{pauseFor, _}
import io.gatling.core.Predef.{global, _}

import scala.concurrent.duration._

abstract class AbstractSim extends Simulation {

  def secondMillis = 1000

  def urlPattern: String

  def karateFeaturePath: String

  def successThreshold = 99
  def simulationUsers = 20
  def simulationDurationSeconds = 20


  def percentiles: (Int, Int, Int, Int) =  {  ( 2 * secondMillis,   3 * secondMillis,  4 * secondMillis,  5 * secondMillis) }



  val protocol = karateProtocol(
    urlPattern -> Nil,
    urlPattern -> pauseFor("get" -> 0, "post" -> 0)
  )

  protocol.nameResolver = (req, ctx) => req.getHeader("karate-name")

  val theScenario = scenario(this.getClass.getName).exec(karateFeature(karateFeaturePath))

  val (p1, p2, p3, p4) = percentiles
  setUp(
    theScenario.inject(rampUsers(simulationUsers) over (simulationDurationSeconds seconds)).protocols(protocol),
  ).assertions(
    List(
      global.successfulRequests.percent.gte(successThreshold)
      , global.responseTime.mean.lte(p1)
      , global.responseTime.percentile1.lte(p1) //50th %
      , global.responseTime.percentile2.lte(p2) //75th %
      , global.responseTime.percentile3.lte(p3) //95th % //first request may require a cache rebuild which can take 2+ secs
      , global.responseTime.percentile4.lte(p4) //99th % //first request may require a cache rebuild which can take 2+ secs
    )
  )
}

1 Ответ

0 голосов
/ 28 марта 2019

В последнем примере karate-gatling-demo приведен пример использования подпрограммы «setup» - в данном случае сам файл объектов каратэ (который теоретически может использовать karate-config.js для переключения среды). А программа установки управляет устройством подачи, которое передает данные во все основные функции.

Возможно, вы уже видели это, но в самой последней версии 0.9.2 добавлена ​​документация по фидерам: https://github.com/intuit/karate/tree/master/karate-gatling#feeders

Обратите внимание, что существует открытый запрос функции, чтобы иметь возможность пометить некоторые файлы функций как "тихие", чтобы они не влияли на итоговый отчет / пропускную способность: https://github.com/intuit/karate/issues/707

...