我想编写一个格式化Vaadin消息的函数。这些消息的格式为
108|0ff1255e-e2be-4e7b-ac5c-1ff2709ce886[["0_11_12_13_login_username","v","v",["text",["s","Agent00232"]]]]
第一个数字是长度,然后是某种会话ID(后来称为vaadin_security_key),后跟有效负载。 (在这个例子中,我将值" Agent00232"设置为带有连接器ID" 0_11_12_13_login_username"的文本字段;)我写了一个这样的函数:
def sendMessage(name: String, vaadinCommand: String) = {
def createMessage(session: Session) = {
val message = session("vaadin_security_key").as[String] + "\u001d" + vaadinCommand
val message2 = ELCompiler.compile(message)(classTag[String])(session).toString
val message3 = message2.substring(8, message2.length - 2)
val len = message3.length
val completeMessage = len.toString() + "|" + message3
completeMessage
}
exec(
ws(name)
.sendText(createMessage)
.check(wsAwait
.within(Vaadin.defaultTimeout)
.until(1)
.regex("""(.+)""")
.saveAs("lastResult")))
.exec { session =>
println(session("lastResult").as[String])
session
}
}
我想像这样使用这个方法,并在字符串中使用EL表达式:
exec(Vaadin.sendMessage("setting Name", "[[\"0_11_12_13_login_username\",\"v\",\"v\",[\"text\",[\"s\",\"${username}\"]]]]"))
因此我必须在计算长度之前评估字符串。方法ELCompiler.compile()...返回Expression [String]。问题是我需要这个字符串并用计算出的长度连接它。当我做message2.toString时它返回
Success(0ff1255e-e2be-4e7b-ac5c-1ff2709ce886[["0_11_12_13_login_username","v","v",["text",["s","Agent00232"]]]])
因此我必须使用substring(8,message2.length - 2)来获取评估的有效负载(使用安全密钥)来计算它的长度。
是否有更好(更优雅)的方式从表达式中提取String然后使用substring(...)
?
答案 0 :(得分:4)
您的代码的第一部分将如下所示:
import io.gatling.core.session._
import io.gatling.core.session.el._
def sendMessage(name: String, vaadinCommand: String) = {
val message = ("${vaadin_security_key}\u001d" + vaadinCommand).el[String]
def createMessage = message.map { resolvedMessage =>
resolvedMessage.length + "|" + resolvedMessage
}
exec(
ws(name)
.sendText(createMessage)
.check(wsAwait
.within(Vaadin.defaultTimeout)
.until(1)
.regex("""(.+)""")
.saveAs("lastResult")))
.exec { session =>
println(session("lastResult").validate[String])
session
}
}
然后你打电话给:
exec(Vaadin.sendMessage("setting Name", """[["0_11_12_13_login_username","v","v",["text",["s","${username}"]]]]"""))