空手道加特林:如何从仿真响应时间中排除设置/创建?

时间:2019-03-28 16:58:52

标签: karate gatling

我正在尝试在服务的端点上设置/强制执行性能SLA。一些测试具有创建步骤,该步骤将使用API​​调用来创建帐户。创建步骤可能需要一两秒钟。我试图在不包括创建时间(1-2秒)的情况下测量/设置有关GET性能的声明(〜50ms)。

使用带有硬编码ID的静态供稿器文件并不理想,因为我们希望能够在瞬态环境中运行测试,并且我们希望避免由于以下原因而导致的脆弱性: 1)存在一个特定帐户 2)没有其他进程对其进行篡改

我正在考虑的一种方法:设置一个供稿器,该供稿器创建帐户,然后调用功能文件。 Feeder可以使用Java API调用功能文件来创建帐户,但是我不确定如何将创建的帐户ID传递到GET方法中。我可以使用加特林会话吗? (这是我最需要帮助的部分)

在我可以通过帐户ID后可以通过实验回答的问题:

我也不确定创建响应的延迟是否与加特林馈线配合得很好-是否会导致模拟失败?馈送者创建帐户的时间是否从模拟中排除了?。

我当前如何运行模拟(尚未使用馈线)

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 :(得分:0)

最新的karate-gatling-demo示例包含一个使用“设置”例程的示例-在这种情况下,一个空手道特征文件本身(理论上可以使用karate-config.js进行环境切换)。设置例程会驱动一个供料器,该供料器会将数据传递到所有主要功能中。

也许您已经看过它,但是最新的0.9.2版本在供料器上添加了一些文档:https://github.com/intuit/karate/tree/master/karate-gatling#feeders

请注意,有一个开放的功能请求,可以将某些功能文件标记为“静默”,这样它们就不会对最终报告/吞吐量有所帮助:https://github.com/intuit/karate/issues/707