加特林高管与会议

时间:2019-04-29 16:40:56

标签: scala gatling

我需要在Gatling中进行请求,在其中我可以访问会话项(无需使用表达语言)。我需要这样做,因为我想将数据注入来自csv馈送器的ByteArrayBody请求中。为了演示我的问题,我有一个小例子(没有会议的实际需要)。

以下情况运行良好:

val scnBase: ScenarioBuilder = scenario("Test scneario").repeat(1){
  exec(http("Http Test test").get("http://google.de/"))
}

但是那个没有(我得到了异常There were no requests sent during the simulation, reports won't be generated):

val scnBase: ScenarioBuilder = scenario("Test scneario").repeat(1){
  exec(session => {
    http("Http Test test").get("http://google.de/")
    session
  })
}

我在IntelliJ(到目前为止效果很好)和以下(此处最小化)的仿真文件中运行了仿真:

package test.scala

import java.text.SimpleDateFormat
import java.util.Date

import io.gatling.core.Predef._
import io.gatling.core.body.ByteArrayBody
import io.gatling.core.structure.ScenarioBuilder
import io.gatling.http.Predef._
import io.gatling.http.protocol.HttpProtocolBuilder
import org.slf4j.LoggerFactory
import test.scala.TerminalTesterRequest.url
import test.scala.requests._
import test.scala.util.CharsetConverter

import scala.concurrent.duration._
import scala.language.postfixOps

class MySimulation extends Simulation {

  //base URL (actually this URL is different, but it's not important)
  val ecmsServerUri = "http://0.0.0.0"

  //base Protocol
  val httpProtocol: HttpProtocolBuilder = http
    .baseUrl(ecmsServerUri)
    .inferHtmlResources(BlackList(""".*\.js""", """.*\.css""", """.*\.gif""", """.*\.jpeg""", """.*\.jpg""", """.*\.ico""", """.*\.woff""", """.*\.(t|o)tf""", """.*\.png"""), WhiteList())
    .acceptHeader("*/*")
    .acceptEncodingHeader("gzip, deflate")
    .acceptLanguageHeader("en,en-US;q=0.7,de-DE;q=0.3")
    .userAgentHeader("Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.8762)")

  val scnBase: ScenarioBuilder = scenario("Test scneario").repeat(1){
    exec(session => {
      http("Http Test test").get("http://google.de/")
      session
    })
  }

  setUp(
    scnBase.inject(constantUsersPerSec(1) during(1 seconds)).protocols(httpProtocol)
  ).maxDuration(5 minutes)
}

如何使用会话信息(或至少来自Feeder的数据)运行exec请求?我正在使用加特林3.1.1

1 个答案:

答案 0 :(得分:1)

构建函数中所需的任何内容并将结果放入会话中,然后在实际请求中引用该值

val feeder = csv("foo.csv")

scenario("Test scenario")
  .feed(feeder)
  .exec(buildPostData)
  .exec(http("Http Test test")
    .post(createApiURL)  
    .body(ByteArrayBody("${postData}"))
    .check(status.is(200))
  )

def buildPostData: Expression[Session] = session => {
  val postData: Array[Byte] = 
    ... // getting values from csv record: session("csvHeader").as[String]
  session.set("postData", postData)
}