Gatling技术问题:CSS提取字符串验证及startsWith报错排查
在Gatling中验证CSS提取字符串的方法及解决
startsWith报错问题 一、解决你遇到的startsWith编译报错问题
你之所以会碰到startsWith is not a member of io.gatling.http.check.css.HttpCssCheckBuilder这类报错,是因为你直接调用了Java/String的原生方法,但Gatling的Check DSL有自己的验证语法规则,不能这么用。这里有两种简单可行的解决方式:
方式1:用validator自定义验证逻辑
通过validator方法传入一个自定义函数,直接判断提取到的字符串是否以指定子串开头,灵活度很高:
val scn: ScenarioBuilder = scenario("BasicSimulation") .exec(http("request_1") .get("/path/to/resource") .check( status.is(200), css("form#name", "action").ofType[String].validator(action => action.startsWith(BASE_URL)) .saveAs("next_url") ))
方式2:用正则匹配实现“开头匹配”
如果更习惯用Gatling内置的匹配器,可以用matches配合正则表达式来达到同样效果:
val scn: ScenarioBuilder = scenario("BasicSimulation") .exec(http("request_1") .get("/path/to/resource") .check( status.is(200), css("form#name", "action").ofType[String].matches(s"^${BASE_URL}.*") .saveAs("next_url") ))
这里的正则^${BASE_URL}.*就表示字符串必须以BASE_URL的值开头。
二、Gatling中验证CSS提取字符串的通用方法
除了上面的场景,还有这些常用的验证方式:
- 精确匹配:验证提取值和指定字符串完全一致
css("form#name", "action").ofType[String].is("/expected/action/path") - 包含子串:验证提取值包含某个特定子串
css("form#name", "action").ofType[String].contains("/api/") - 和会话变量对比:如果需要和会话中已保存的其他值做验证,可以传入会话对象取值
css("form#name", "action").ofType[String].is(session => session("expected_url").as[String]) - 非空验证:确保提取到的元素存在且值不为空
css("form#name", "action").ofType[String].notNull
内容的提问来源于stack exchange,提问作者izrik
相关产品推荐
相关产品推荐

