我是Scala的新手,我正在努力提取我的加特林测试的常见部分。
exec(
http("Open Page")
.get("/page")
).exec(
http("GET from REST")
.get("/")
.disableFollowRedirect
.resources(
http("x").get("/rest/x/").check(jsonPath("$.x").exists),
http("y").get("/rest/y/").check(jsonPath("$.y").exists)
)
)
我怎样才能做到这一点:
exec(
http("Open Page")
.get("/page")
).exec(
http("GET from REST")
.get("/")
.disableFollowRedirect
.resources(
resources
)
)
val resources = ...???
.resources签名看起来像这样
def resources(res: HttpRequestBuilder*):
还有一个...... 由于我要统一传递的一些资源值,因此通常需要添加一些额外的东西,应该使用什么语法来使代码正确无误。
exec(
http("Open Page")
.get("/page")
).exec(
http("GET from REST")
.get("/")
.disableFollowRedirect
.resources(
common: _*,
http("z").get("/rest/z/").check(jsonPath("$.z").exists)
)
)
val common: Seq[HttpRequestBuilder] = Seq(
http("x").get("/rest/x/").check(jsonPath("$.x").exists),
http("y").get("/rest/y/").check(jsonPath("$.y").exists)
)
我想出了这个
exec(
http("Open Page")
.get("/page")
).exec(
http("GET from REST")
.get("/")
.disableFollowRedirect
.resources(
common:+
http("z").get("/rest/z/").check(jsonPath("$.z").exists): _*
)
)
但也许有一个"正确的"这样做的方法。
答案 0 :(得分:1)
val resources: Seq[HttpRequestBuilder] = ??? // Or subtype
...
// Type ascription, but functionally equivalent to other languages' "splat" operators
.resources(resources: _*)
类型归属是expr: Type
形式的表达式。这种表达式的类型是Type
,编译器必须以某种方式使expr
符合该类型。在这里使用varargs的理由是resources
的参数是HttpRequestBuilder*
(即使没有这样的类型),所以你可以使用类型ascription让编译器解释一个对象键入Seq[HttpRequestBuilder]
作为HttpRequestBuilder*
,即使这样的类型确实不存在。它使用通配符_
,因此您不必输入整个类型名称。
编辑:是的,如果你想将资源列表与其他东西合并,然后将其作为varargs传递,你应该这样做
.resources(somethingelse +: resources: _*)
(使用前置+:
,因为根据resources
的实施情况,这可能会更有效。)