簡體   English   中英

使用 JMeter/Java 上下文的 Scala JSR223 腳本

[英]Scala JSR223 script using JMeter/Java context

自 2.11 起支持 Scala JSR223 腳本

e.eval("""s"a is $a, s is $s"""")

我添加了 Scala 2.13 jars 並嘗試執行腳本,它可以顯示常量作為響應

但我無法將 JMeter 的綁定變量添加為log ,我嘗試過:

log.info(a);
$log.info(a);

或者不能打印值來記錄,也試過

var a:Int =  10
println(a)

JMeter 的綁定代碼:

 Bindings bindings = engine.createBindings(); final Logger logger = LoggerFactory.getLogger(JSR223_INIT_FILE); bindings.put("log", logger); // $NON-NLS-1$ (this name is fixed) engine.eval(reader, bindings);

也嘗試使用綁定,但它不在上下文中

bindings.get("log").info("aa");

例外

ERROR o.a.j.p.j.s.JSR223Sampler: Problem in JSR223 script JSR223 Sampler, message: javax.script.ScriptException: not found: value bindings

如何使用 JMeter/Java 綁定變量提交 Scala JSR223 腳本?

編輯

Open Scala 問題JSR223 - 引擎忽略綁定參數

問題的核心是 Scala 腳本引擎將注入的綁定視為具有Any類型。 要使用注入的綁定,您必須在每次使用時將它們轉換為適當的類型,或者您需要將它們作為“陰影綁定”注入,然后使用適當的類型在引擎中重新綁定。

這是我的Main.scala ,我在其中演示了后一種方法:

import javax.script.ScriptEngineManager

import org.slf4j.Logger
import org.slf4j.LoggerFactory

object Main extends App {

  val logger: Logger = LoggerFactory.getLogger("main")

  val e = new ScriptEngineManager().getEngineByName("scala")
  e.put("a", 1)
  e.put("s", "String")

  // Since the variable will have a type of Object, inject under a different name, and then bind to the
  // "correct" name using eval.
  e.put("logInjected", logger)

  println(e.eval(""" s"a is $a, s is $s" """))
  println(e.eval(""" logInjected.toString """))

  e.eval(""" val log = logInjected.asInstanceOf[org.slf4j.Logger] """)
  e.eval(""" log.info("hello from injected logger") """)

  e.eval(
    """ // Or can you do this
      | import org.slf4j.Logger
      | import org.slf4j.LoggerFactory
      |
      | val l = LoggerFactory.getLogger("script")
      |
      | l.error("hello from script")
      |
      |""".stripMargin)
}

而我的build.sbt我曾經:

name := "s213"

version := "1.0"

scalaVersion in ThisBuild := "2.13.0"

libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value
libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaVersion.value
libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.3.0-alpha4"
libraryDependencies += "org.slf4j" % "slf4j-api" % "2.0.0-alpha0"

運行Main的輸出將是:

a is 1, s is String
Logger[main]
[main] INFO  main - hello from injected logger 
[main] ERROR script - hello from script 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM