【问题标题】:Summing the values of multiple Vectors in the session对会话中多个向量的值求和
【发布时间】:2019-08-20 10:15:06
【问题描述】:

在我的加特林场景中,我需要检查会话中是否有一些将是数字向量的条目。如果存在向量,我可以获取向量,但是当我尝试使用 .sum 添加它们时,我得到一个 ClassCastException 说明 java.lang.String 无法转换为 java.lang.Integer

我已经通过打印从会话中检索到的值 (Vector(100,200,300)) 进行了调试,甚至确认了各个元素是 Ints。但是,当我尝试添加它们中的任何一个时,无论是使用 values.sum 还是 values(0)+values(1) 我都会得到类转换异常

我在会话中设置值,例如

.check(jsonPath("$..payments..paymentAmount").findAll.optional.saveAs("payments"))
.check(jsonPath("$..receipts..receiptAmount").findAll.optional.saveAs("receipts"))

在我的应用程序中,如果路径存在,这些总是会产生 Vector(100, 200, 300) 之类的东西

然后我想对这些列表中的所有值求和,这样我就有了行动

.exec(session => {
   def addAmounts(listNames: Array[String]): Int = {
          listNames.foldLeft(0)((acc, listName) => {
            session(listName).validate[Seq[Int]] match {
              case Success(ints) =>  ints.sum + acc
              case Failure(error) => acc
          }})
   }

   val transactionsTotal = addAmounts(Array("payments", "receipts"))
   session.set("total",transactionsTotal) 
}

如前所述,这在 listName.sum + acc 语句中失败 - 因为它们都是 Ints 我希望不需要从字符串转换 从检查中没有存储任何内容的失败案例工作正常

【问题讨论】:

  • 我发现如果我将会话变量作为 Vector[String] 然后根据需要手动转换为 Int ,我可以让它工作。但我仍然认为原始版本应该可以工作 - 会话属性是 String -> Any 的映射。当我检索为 Vector[Int] 并使用 getClass 之类的调用进行调试时,所有内容都被列为 Int,但尝试添加会导致 classCastException
  • 我认为该类型在模式匹配时会丢失,所以如果您将大小写更改为:case Success(ints: Seq[Int]) => ints.sum + acc 它也应该可以工作

标签: gatling gatling-plugin


【解决方案1】:

我认为这是一个 scala 类型推断问题 - 我通过在添加之前手动转换为 Int 来使其工作

【讨论】:

    猜你喜欢
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 2018-08-30
    相关资源
    最近更新 更多