我正在尝试在服务的端点上设置/强制执行性能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
)
)
}
答案 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