当前位置: 首页 > 知识库问答 >
问题:

使用Gatling构建动态json请求

柳向明
2023-03-14

我试图使用csv文件中的数据构建随机json请求。我已经定义了我的目标。场景功能如下

但是当我将日志级别设置为跟踪时,我看到所有请求都具有相同的值。我错过了什么吗?

def getScenario () = {
         scenario("Create API Promotions")
        .exec(
            http("Create Request")
            .post(createApiURL)
            .headers(headers_1)
            .body(StringBody(getCreateRequest))
            .check(status.is(200))
            )
    }


    def getCreateRequest: String = {
         val data = s"""
          {
            "Specification":{  

                "Item":${getItems()}
            }
          }
          """.stripMargin
          data   
    }

def getItems (): String = {
        val record: Map[String, Any] = getItemsFromCSV()
        val code: String = record("Code").toString
        val clientDataType: String = record("Type").toString

        val clientData =    (
                                ("Code" -> code) ~
                                ("Type" -> clientDataType)                                 
                            )
        val targetJson = List(clientData);
        return compact(render(targetJson))
    }

    def getItemsFromCSV() : Map[String, Any] = {

            val items: Seq[Map[String, Any]] = csv("../resources/create/items.csv").readRecords
            return promoTarget(getRandomNumber(0, items.length-1)) 
    }

共有1个答案

孔安福
2023-03-14

Gatling EL提供了一个内置函数(jsonStringify()),可以将对象正确格式化为JSON值(用双引号包装Strings,处理null等)

此外,我认为您可以使用进纸器来获取csv值。

val items = csv("../resources/create/items.csv").random

scenario("Create API Promotions")
  .feed(items)
  .exec(buildPostData)
  .exec(http("Create Request")
    .post(createApiURL)
    .headers(headers_1)
    .body(StringBody("${postData.jsonStringify()}"))
    .check(status.is(200))
  )

def buildPostData: Expression[Session] = session => {
  val postData: Map[String, Any] =
      Map(
        "Code" -> session("Code").as[String],
        "Type" -> session("Type").as[String]
      )
  session.set("postData", postData)
}

官方文档链接:

  • 表达式和EL
  • 馈线
 类似资料:
  • 问题内容: 我是Python的新手,并且正在使用JSON数据。我想通过向现有JSON对象添加一些键值来动态构建JSON对象。 我尝试了以下方法,但得到了: 问题答案: 您在将对象编码为JSON字符串 之前先 对其进行构建: JSON是 序列化 格式,文本数据 表示 结构。它本身不是那个结构。

  • 我将Gatling与JDBC feeder一起使用,并希望根据之前请求的响应动态地向JDBC feeder的where子句添加一个参数。这里是我的例子,我试图做一个帖子,创建一个用户,然后让提要使用create user请求返回的userId获取用户生成的UUID,然后用UUID发布一些数据。 我已经核实了以下内容: 1)用户数据确实在表单帖子上正确插入数据库2)用户ID从表单帖子返回3)用户ID

  • 我是JavaFx新手,尝试用三个StackPane构建下面的屏幕,可以根据窗口大小动态地增加和缩小宽度和高度。我尝试了不同的方法,但没能做到这一点。我还尝试使用锚烷约束。这是我试图实现的图像和相应的FXML。以下是我在这些窗格之间寻找的约束条件 左窗格具有最大宽度(300px)和最小150 左右之间的距离(2)堆栈窗格应保持不变 右顶部和底部堆栈窗格之间的距离应保持不变 左顶部堆栈窗格的最大高度为

  • 问题内容: 给定一个像这样的json: 和两个常规的html输入: 我需要建立一个包含所有可能变化形式的表,例如: 这意味着,如果用户继续通过输入添加值,则将出现建立新变体的新行,例如: 我还需要有可用的id来处理它,并且当我使用输入(例如“Peter”“Black”)添加新值时,我需要像自动递增那样动态地自动填充id(颜色id)mysql,结果如下: 那可能吗?我可以使用哪些选项进行角度操作?我

  • 我有多个动态json模板如下 JSON 1 JSON 2 JSON 3 我想在运行时将它们隐藏到JAVA对象中,即在编译时不创建POJO。这可能吗?如果是,如何做到这一点? 我尝试使用Jackson lib将json转换为对象(对象类),但如何创建通用POJO,或者如何使用setter-getter动态创建POJO?

  • 我有一个文件,其中包含Json请求体。我想使用constantUsersPerSec(...)对每秒发送恒定数量请求的Web进行基准测试。 但是,每次发送请求时,我都希望从请求列表中获取请求(随机或循环,我不在乎)。 我不知道该怎么对付加特林。使用以下代码,请求被随机选择一次,同一请求被反复发送。这不是我想要的 我的代码: