如何使用 Gatling 提取带符号的 href?

How to extract href with ampersand using Gatling?

当我需要在 Gatling 压力测试中关注页面上的 link 时,如果 URL 包含符号,则会出现问题。大概是因为加特林将其解释为一个实体。如何解决这个问题?

示例:

假设您首先收到一个包含

的网页
<a href="go?to=foobar&index=null" title="Choice 1">

现在,如果我尝试使用

遵循此 link
exec(
  http("page with link")
  .get("/page1")
  .check(css("""a[title='Choice 1']""", "href").saveAs("url"))
)
.exec(
  http("follow link")
  .get("${url}")
)

那么用于第二个请求的 URL 是 go?to=foobar%E2%88%88dex=null

我不确定在 HTML 属性中是否 "correct" 有未转义的符号。但是有些网站有它们并且浏览器可以处理它。有些网站甚至在同一属性中同时包含 &&amp;。但是从版本 2.1.7 开始,Gatling 的 CSS 选择器无法处理普通(未转义的)&符号。

如果其他人有同样的问题,这里有一个肮脏的 hack:

regex("""href="([^"]+)".* title="Choice 1">""")
.transform(raw => raw.replace("&amp;", "&"))

当然,您永远不应该在 HTML(或 XML)上使用正则表达式。在这种情况下,绝不意味着 "until it works with CSS selectors".

这是一个Jodd (the html parser + css selector implementation we use) issue

它已经在源中修复,应该很快就会发布。 然后,在 Gatling 中强制依赖版本。