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

基于Webservice响应的Gatling请求

公良运锋
2023-03-14

我是Scala的新手。

我在用加特林做压力测试。

我能够进行一个Gatling测试,向WS发出请求,我将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解析响应,因为我总是得到错误:

无法找到匹配的字符串[$\up}

尽管我已经验证了我的jsonpath表达式

https://jsonpath.curiousconcept.com/

具有

 import io.gatling.core.json.Jackson

我能够解析响应,问题是当尝试执行第二个请求时(http(“r3”)。get(lnk)),请求没有被发出,因为我在后端记录发出的请求,当发出第一个请求时,后端记录请求,当发出第二个请求时,请求没有被记录在后端。

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

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

请求已提出。

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

谢谢你的帮助。

共有1个答案

黄德明
2023-03-14

我终于用以下语句解析了响应:

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

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

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

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

非常感谢。

 类似资料:
  • 我已经开发了一个Java web应用程序,我想实现SAML。我认为这些是实现SAML的正确步骤。 服务提供商(SP,在本例中是我的应用程序)向IdP发送SAML身份验证请求 然后,IdP对其进行验证,创建SAML响应断言,并将其与证书一起签名,然后发送回SP。 然后,SP使用密钥库中证书的公钥对其进行验证,并在此基础上进一步进行 我有一个示例代码,可以创建SAML请求 我可以对其进行编码并发送给I

  • 我想在java中对API的HTTP响应实现重试框架。 如果回答是: 400:将json中的参数设为null,然后重试 202:返回成功 429:请等待2分钟,然后重试 5XX:等待5分钟,然后重试 如果重试次数超过,则抛出异常。是否有任何可用的库支持重试响应类型并允许编辑请求对象?如果没有,我怎么能设计一个?有没有围绕它的教程?

  • 问题内容: 我在这里原来的问题被标记为该问题的重复。我没有实现它的运气,并且怀疑我的问题被误解了,所以在我的问题结束时,我从一个更具体的问题开始着手。 我正在尝试基于中间代理中响应代理的响应标头设置cookie,该请求被反向代理。 这是工作流程: 用户请求http://example.com/foo/bar Go应用使用ReverseProxy将请求转发到http://baz.com baz.co

  • 我寻找一种最佳实践方法,如何根据Symfony的ACL发送不同的用户和不同的响应。 我使用FoS RestBundle。他们提供了我使用的JMSSeriazerBundle。到目前为止,我已经创建了模型和序列化程序yml文件,非常好。一切看起来都很棒,很管用。 现在我有不同的用户访问这个RESTAPI。他们中的一些人拥有扩展权限,因此可以查看更多信息。处理这些问题的最佳做法是什么? 每个人的URL

  • 我想处理的情况下401,403,500等只是状态代码应该返回而不是视图。

  • 本文向大家介绍ASP.NET中基于soaphead的webservice安全机制,包括了ASP.NET中基于soaphead的webservice安全机制的使用技巧和注意事项,需要的朋友参考一下 使用soaphead方法可以在webservice的请求中增加头部信息,当有人调用我们的webservice时,可以通过查询这个请求的头部信息并验证来防止该软件以外的程序调用webservice 一、服务