首页 > 解决方案 > Gatling - 如何将会话捕获的字符串转换为双精度然后执行比较

问题描述

我需要能够从响应中捕获一个字符串,将其转换为双精度,然后检查该值是否在一个范围内。如果它超出范围,我想使模拟失败。

我正在从 Prometheus 计算 CPU% 时间,并且能够从响应中提取值。我想要做的是确保它是 < 一个值,如果是则失败。以下是我到目前为止所做的。我暂时放入了一个 println 语句,以便我可以查看逻辑是否有效 - 但到目前为止还没有。

CPU 收集正常,但即使超出范围,也不会触发 println 语句。我是新手,所以单音节的话将不胜感激:-)。

def getCalculatedCpuPercent(namespace: String, container: String) = scenario("get calculated prometheus CPU percent")
  .exec(http("get calculated prometheus CPU percent")
    .get(s"/api/v1/query")
    .queryParam("query", s"((sum by (pod_name)(container_cpu_usage_seconds_total{namespace=~'$namespace',container_name=~'$container',pod_name=~'.*'} - container_cpu_usage_seconds_total{namespace=~'$namespace',container_name=~'$container',pod_name=~'.*'} offset 30s)) / 30) * 100")
    .header("Content-Type", "application/json")
    .header("Accept", "application/json")
    .check(status.is(HttpStatus.SC_OK))
    .check(bodyString
      .saveAs("sBodyString"))
    .check(jsonPath("$..value[1]")
      .saveAs("metricValue"))
  )
  .exec(session => {
    val sCpuValue = ( session( "metricValue" ).as[String] )
    val cpuValue: Double = sCpuValue.toDouble
    doIf(cpuValue > 0) {
      exec { session =>
        println(session("sBodyString").as[String])
        session
      }
  }
  session})
  .exec { session =>
    println( session( "metricValue" ).as[String] )
    session}

标签: scalagatling

解决方案


您必须将其与 0.0 进行比较,因为它是双精度值:

doIf(cpuValue > 0.0) {

推荐阅读