如何使用 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" 有未转义的符号。但是有些网站有它们并且浏览器可以处理它。有些网站甚至在同一属性中同时包含 &
和 &
。但是从版本 2.1.7 开始,Gatling 的 CSS 选择器无法处理普通(未转义的)&符号。
如果其他人有同样的问题,这里有一个肮脏的 hack:
regex("""href="([^"]+)".* title="Choice 1">""")
.transform(raw => raw.replace("&", "&"))
当然,您永远不应该在 HTML(或 XML)上使用正则表达式。在这种情况下,绝不意味着 "until it works with CSS selectors".
这是一个Jodd (the html parser + css selector implementation we use) issue。
它已经在源中修复,应该很快就会发布。
然后,在 Gatling 中强制依赖版本。
当我需要在 Gatling 压力测试中关注页面上的 link 时,如果 URL 包含符号,则会出现问题。大概是因为加特林将其解释为一个实体。如何解决这个问题?
示例:
假设您首先收到一个包含
的网页<a href="go?to=foobar&index=null" title="Choice 1">
现在,如果我尝试使用
遵循此 linkexec(
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" 有未转义的符号。但是有些网站有它们并且浏览器可以处理它。有些网站甚至在同一属性中同时包含 &
和 &
。但是从版本 2.1.7 开始,Gatling 的 CSS 选择器无法处理普通(未转义的)&符号。
如果其他人有同样的问题,这里有一个肮脏的 hack:
regex("""href="([^"]+)".* title="Choice 1">""")
.transform(raw => raw.replace("&", "&"))
当然,您永远不应该在 HTML(或 XML)上使用正则表达式。在这种情况下,绝不意味着 "until it works with CSS selectors".
这是一个Jodd (the html parser + css selector implementation we use) issue。
它已经在源中修复,应该很快就会发布。 然后,在 Gatling 中强制依赖版本。