首页 > 解决方案 > Gatling - 动态设置请求名称

问题描述

我可以动态定义请求名称吗?我试过了,http(s"/product${prID}"但出现错误(未找到变量 prID):

    val searchByProductIdTask = exec(http(s"/product${prID}")
        .post(appURL + "/api/product/search")
        .headers(jsonHeader)
        .body(StringBody(my_string_body)).asJSON
        .check(status.is(200), responseTimeInMillis.lessThan("${expectedResponseTime}"))
    ).pause(5)

更新:

这里是整个代码:

import scala.concurrent.duration._
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.jdbc.Predef._

import java.time.Instant

class Product_Szenario extends Simulation {

val scenarioName = "Test_Product"

val baseURL="My_Base_URL"

val appURL="My_URL"

val httpProtocol = http
    .baseURL(baseURL)
    .acceptEncodingHeader("gzip, deflate")
    .acceptLanguageHeader("de,en-US;q=0.7,en;q=0.3")
    .userAgentHeader("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0")       
    .connectionHeader("keep-alive")
    .disableWarmUp
    .disableCaching

val jsonHeader = Map(
    "Accept" -> "*/*",
    "Content-Type" -> "application/json",
    "X-Requested-With" -> "XMLHttpRequest")

object Product {

    val searchByProductIdTask = exec(http(s"/product${prID}")
            .post(appURL + "/api/product/search")
            .headers(jsonHeader)
            .body(StringBody("""{"prID":"${prID}"}""")).asJSON
            .check(status.is(200), responseTimeInMillis.lessThan("${expectedResponseTime}"))
        )
}

object Szenario{

    val products = csv("product.csv").records
    val filialFeeder = csv("filial.csv").circular //50%

    val start= exec(repeat(products.size, "n"){
        feed(products.queue)
        .feed(filialFeeder)
        .exec(Product.searchByProductIdTask)
        .pause(5)
    })
}

val scnProduct = scenario(scenarioName)
    .exec(
        session =>{ 
            session.set("appUrl",baseURL + appURL + "/")
            .set("expectedResponseTime", 20000) // set to time you want check fails - find long time responses
        }
    ).exec(
        Szenario.start
    )

setUp(
    scnProduct.inject(atOnceUsers(1))//, First Scenario
).protocols(httpProtocol)

}

标签: scalagatling

解决方案


使用字符串插值,你错过了s"${expectedResponseTime}"倒数第二行!

val searchByProductIdTask = exec(http(s"/product${prID}")
        .post(appURL + "/api/product/search")
        .headers(jsonHeader)
        .body(StringBody(my_string_body)).asJSON
        .check(status.is(200), responseTimeInMillis.lessThan(s"${expectedResponseTime}"))
    ).pause(5)

推荐阅读