我有一个场景,其中包含4个不同的API调用,它们始终保持不变。 我正在尝试创建一个并行压力测试,在此情况下,我希望首先以10%,然后是20%,30%...等最大用户数运行同一场景。
我遇到了一个问题,即我无法多次设置相同的方案。
但是我还需要动态设置,具体取决于脚本中的可配置变量 这就是造成问题的原因,我希望能够轻松配置它以运行例如10%,50%和100%。
这就是我到目前为止(缩短了,atOnceUser和nothingFor从通过 bla(i)迭代的配置中动态获取输入)
def scnList() = {
var scnList = new ArraySeq[PopulationBuilder](someArray.length)
var i = 0
for (i <- 0 until someArray.length) {
var scen = myscenario
.inject(atOnceUsers((bla(i)), nothingFor(blabla(i) minutes))
scnList(i) = scen
}
scnList
}
setUp(scnList: _*).protocols(httpConf)
.assertions(global.successfulRequests.percent.gt(99),
forAll.responseTime.max.lt(5000)
)
答案 0 :(得分:0)
setUp
每次模拟只能调用一次,如果您将场景列表作为参数传递给它,而不是并行运行它们,则在您的情况下是没有意义的。应该起作用的是使用注入配置文件运行单个方案,该方案将以很少的不同级别的负载依次运行您的方案。每次迭代的用户数都可以通过一些配置功能加载。
val steps = Seq(5, 10, 15, 25, 40) // Contains users/s in each step, can be read from config
//Build list of injections based on sequence above
val injectionProfile = steps.flatMap(
load => Seq(
constantUsersPerSec(load).during(30 seconds),
nothingFor(10 seconds)
)
)
val httpConf = http.baseURL("http://google.com")
val myscenario = scenario("My scenario")
.exec(
http("Get example")
.get("/")
.check(status.is(200))
)
setUp(
myscenario.inject(injectionProfile).protocols(httpConf)
)
如果您希望将每个迭代都包含在单独的报告中,最好的方法是创建抽象模拟类,并创建几个其他类,这些类使用不同的构造函数参数进行扩展,但是很难获得可变数量的步骤,因此如果与其他方法相比,您可以选择具有恒定数量的变体。