2016-01-27 25 views
0

我是新来的斯卡拉。基于Webservice响应的加特林请求

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

我可以做一个向WS发出请求的Gatling测试,我在会话变量中保存了JSON响应。响应是一个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 ['找到了

虽然我veryfied我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元素,并为每个元素再次调用其他webservice。

谢谢你的帮助。

回答

0

我终于解析与应对:

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

我现在的问题是,我不能让通过jsonPath解析每一个环节一个HTTP请求。

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

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

谢谢。