【问题标题】:Gatling request based on Webservice response基于 Webservice 响应的 Gatling 请求
【发布时间】:2016-01-27 08:48:43
【问题描述】:

我是 Scala 新手。

我正在使用 Gatling 进行压力测试。

我能够进行向 WS 发出请求的 Gatling 测试,我将 JSON 响应保存在 session 变量中。响应是一个 JSON 数组,其中包含多个指向我的后端提供的图像的链接。

具体来说,第一个请求检索地图中的点,每个点都分配了一个图像,必须通过访问第一个 WS 响应提供的链接来获取每个图像。

我有以下代码:

   class BasicSimulation extends Simulation 
   {

    object Points
    {
       val jsonFileFeeder = jsonFile("input.json").circular
       val points=exec(http("r1").get("/"))
                  .feed(jsonFileFeeder)
                  .exec(http("r2")
                        .post("/ws/getPoints")
                        .check(bodyString.saveAs("points"))
                       )
    }

    object Images
    {
     val images=exec(session=>{
                               val respMap = session("points").as[String]
                               val mapper = new ObjectMapper()
                               val rA = mapper.readTree(respMap)
                               for( a <- 0 until (rA.size()-1))
                               {
                                val lnk=rA.get(a).get("image").toString()
                                exec(http("r3").get(lnk))
                               }
                               session
                              }
                     )
     }

   val httpConf = http
            .baseURL("http://localhost:8000/")
            .userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8;  rv:16.0) Gecko/20100101 Firefox/16.0")

   val scn = scenario("Test1").exec(Points.points,Images.images)
   setUp(scn.inject(atOnceUsers(2)).protocols(httpConf))
}

第一个 WS 的 JSON 响应示例:

[
 {
  "bid": 1375,
  "image": "http://localhost:8000/ws/image/1375",
  "position": [2.326609,48.872678]
 },
 {
  "bid": 1375,
  "image": "http://localhost:8000/ws/image/1375",
  "position": [2.352725,48.87323]
 }
]

第一个请求工作正常,我不使用 jsonPath 解析响应,因为我总是得到错误:

无法提取:字符串匹配正则表达式[$_\p{L}][$_\-\d\p{L}]*' expected but['找到

虽然我已经用 jsonpath 表达式验证了

https://jsonpath.curiousconcept.com/

 import io.gatling.core.json.Jackson

我能够解析响应,问题是在尝试制作时 第二个请求 exec(http("r3").get(lnk)),请求没有发出,因为 我正在记录发出的请求的后端大小,发出第一个请求时,后端记录请求,发出第二个请求时,该请求未记录在后端。

如果我根据场景直接提出请求:

scenario("Test1").exec(http("r").get("http://localhost:8000/ws/image/1375"))

请求已发出。

我想向 WS 发出请求,解析响应,迭代响应的 JSON 元素,并为每个元素再次调用其他 Web 服务。

感谢您的帮助。

【问题讨论】:

    标签: json loops gatling


    【解决方案1】:

    我终于解析了响应:

    jsonPath("$[*].image").ofType[String].findAll.saveAs("images")
    

    我现在的问题是我无法为每个由 jsonPath 解析的链接发出 http 请求。

    val render=foreach("${images}","image"){
                                             exec{
                                                  session=>
                                                  exec(http("Myreques").get("${image}"))
                                                  session 
                                                 }
                                           }
    

    请求没有完成,因为在后端我没有得到任何日志。

    谢谢。

    【讨论】:

      猜你喜欢
      • 2012-02-28
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      相关资源
      最近更新 更多