我正在开发一个加特林测试框架,可以通过外部配置对象进行参数化。我的一个用例是,可能有零个或多个 CSS 选择器检查需要保存到变量中。在我的配置对象中,我将其实现为 a Map[String,(String, String)],其中键是变量名称,值是由 2 部分组成的 css 选择器。
我正在努力解决如何动态组装支票的问题。这是我到目前为止得到的:
val captureMap: Map[String, (String, String)] = config.capture
httpRequestBuilder.check(
captureMap.map((mapping) => {
val varName = mapping._1
val cssSel = mapping._2
css(cssSel._1, cssSel._2).saveAs(varName)
}).toArray: _* // compilation error here
)
Run Code Online (Sandbox Code Playgroud)
我收到的错误是:
Error:(41, 10) type mismatch;
found : Array[io.gatling.core.check.CheckBuilder[io.gatling.core.check.css.CssCheckType,jodd.lagarto.dom.NodeSelector,String]]
required: Array[_ <: io.gatling.http.check.HttpCheck]
}).toArray: _*
Run Code Online (Sandbox Code Playgroud)
显然,我需要将 myCheckBuilder变成 a HttpCheck,那么我该怎么做呢?
更新:
我设法通过引入 HttpCheck 类型的变量并在下一行中返回它来使其工作:
httpRequestBuilder.check(
captureMap.map((mapping) => {
val varName = mapping._1
val cssSel = mapping._2
val check:HttpCheck= css(cssSel._1, cssSel._2).saveAs(varName)
check
}).toArray: _*
)
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但它很难看。这可以改进吗?
小智 5
我遇到过同样的问题。
我有以下进口:
import io.gatling.core.Predef._
import io.gatling.http.Predef.http
Run Code Online (Sandbox Code Playgroud)
我将这些导入更改为:
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.http.request.builder.HttpRequestBuilder.toActionBuilder
Run Code Online (Sandbox Code Playgroud)
这使它发挥作用。
| 归档时间: |
|
| 查看次数: |
719 次 |
| 最近记录: |