是否可以使用 scala 在 gatling 中访问两个模拟文件之间的会话变量?

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

有没有办法从一个模拟文件访问会话变量到另一个模拟文件。我可以在同一个模拟文件中访问场景内的会话变量,如下所示,它工作正常。由于 OrderId 在我的用例中应该只创建一个,我无法在第二个模拟文件中重新创建订单,因此我需要在第二个模拟文件中重用前一个模拟文件中的 OrderId 和 OrderUri。 一旦使用 session => session.setAll() 设置会话,是否可以在模拟之间访问该会话?你能建议一下吗?

 SimulationFile_1
    
              var OrderId = ""
              var OrderUri = ""
            
                private val order: ScenarioBuilder =
                    scenario("order creation")
                      .exec(createorders)
                      .exec(submitOrders)
                      .exec(session => {
                        OrderId = session("OrderId").as[String].trim
                        OrderUri = session("OrderUri").as[String].trim
                        println(session)
                        session
                      })
                
                  private val openRound: ScenarioBuilder =
                    scenario("Open Bidding")
                      .exec(session => session.setAll(Map("OrderId" -> OrderId, "OrderUri" -> OrderUri)))
                      .exec(placeOrder)
                      .exec(addOrder)
            
    
    **SimulationFile_1** setup looks like below.
       
    

 setUp(
        order.inject(
          nothingFor(1),
          atOnceUsers(1),
        ).andThen(openRound.inject(nothingFor(1),
          atOnceUsers(1)).
          andThen(order_round1.inject(nothingFor(1),
            atOnceUsers(1),
            rampUsers(1).during(50))).
          andThen(closeRound.inject(nothingFor(1),
            atOnceUsers(1))))
    

    I should not be calling order api again, should reuse the same order id from the previous rest call.(previous simulation file)
       
    
     **SimulationFile_2**
                                                                                    
setUp(                                                                         
       openRound.inject(                                                       
         nothingFor(1),                                                        
         atOnceUsers(1),                                                       
       ).andThen(order_round2.inject(nothingFor(1),                            
           atOnceUsers(1),                                                     
           rampUsers(1).during(50)).                                           
         andThen(closeRound2.inject(nothingFor(1),                             
           atOnceUsers(1)))))                                                     

编辑:

 .exec(session => {                                                                                                                                
     val writer = new PrintWriter(new FileOutputStream(new File("src/gatling/resources/myFile.csv"), true))                                        
     writer.write(session("orderId").as[String] + "," + session("OrderUri").as[String] + "," + session("OrderYear").as[String])        
     writer.write("\n")                                                                                                                            
     writer.close()                                                                                                                                
     session                                                                                                                                       
 })  

                                                                                                                                          
simulation gatling
1个回答
0
投票

不同的 Gatling 模拟存在于不同的 JVM 实例中,因此您需要一些外部持久存储:文件、Redis 等。

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