如何将创建的资源连接到列表中,以便稍后可以在清理过程中将其删除以进行清理?

问题描述 投票:0回答:1

我正在执行以下代码,以从执行gatling http请求并将其附加到列表中来获取响应字段,但作为响应,我看到列表中大多数显示相同的itemId。我想知道这是否是因为并发吗?我正在制作此列表,以便可以在每次创建操作调用之后捕获资源,并且在测试结束时可以迭代该列表以执行清理/删除项的操作,就像使用“加特林特”钩子一样。

在模拟课中:

var responseIdList = List[String]() 

val scenario1 = scenario(" TEST ")
        .exec(Create())
        .exec(session => {
            item = session("itemId").as[String].trim
            println("%%%%%%%%%%% item ID =====>>>>>>>>>> " + item)
            responseIdList = item :: responseIdList
            println("%%%%%%%%%%%  List =====>>>>>>>>>> " + responseIdList)
            session}
        )
 setUp(
    scenario1.inject(atOnceUsers(5))
)

加特林行动:

   def Create():HttpRequestBuilder= {

      http("CREATE API")
       .post(Host + "/items")
       .header("Authorization", "Bearer "+ token)
       .header("Content-Type", "application/json")
       .body(StringBody(
         """{ "name" : "Item1"
         |}""".stripMargin)).asJson
       .check(status.is(200))
       .check(jsonPath("$.itemId").saveAs("itemId"))

   }

这是执行以上代码后的响应:

    %%%%%%%%%%% item ID =====>>>>>>>>>> dc7e4024-c51e-46ce-93be-6ba1dad3679e
    %%%%%%%%%%% item ID =====>>>>>>>>>> 0bf84d48-ccea-4f10-93b3-ea464adcc952
    %%%%%%%%%%% item ID =====>>>>>>>>>> 072361b2-5c49-4641-a27c-c346c01dde99
    %%%%%%%%%%% item ID =====>>>>>>>>>> dc7e4024-c51e-46ce-93be-6ba1dad3679e
    %%%%%%%%%%% List =====>>>>>>>>>> List(0bf84d48-ccea-4f10-93b3-ea464adcc952, 072361b2-5c49-4641-a27c-c346c01dde99)
    %%%%%%%%%%% List =====>>>>>>>>>> List(0bf84d48-ccea-4f10-93b3-ea464adcc952, 0bf84d48-ccea-4f10-93b3-ea464adcc952, 072361b2-5c49-4641-a27c-c346c01dde99)

    %%%%%%%%%%% item ID =====>>>>>>>>>> dc7e4024-c51e-46ce-93be-6ba1dad3679e

    %%%%%%%%%%%  List =====>>>>>>>>>> List(0bf84d48-ccea-4f10-93b3-ea464adcc952, 0bf84d48-ccea-4f10-93b3-ea464adcc952, 0bf84d48-ccea-4f10-93b3-ea464adcc952, 0bf84d48-ccea-4f10-93b3-ea464adcc952, 072361b2-5c49-4641-a27c-c346c01dde99)

尽管模拟了场景,但创建了5个不同的项目ID,但清单以某种方式显示了相同的项目。是否有更好的数据结构或选项供我使用?谨此建议,因为我是加特林和斯卡拉的新手。

scala scala-collections gatling scala-gatling
1个回答
0
投票

使用列表和var全局引用是错误的策略,因为它不是线程安全的。

您应该使用val和java.util.concurrent.ConcurrentLinkedQueue



© www.soinside.com 2019 - 2024. All rights reserved.