groovy - 字符串比较不匹配,但“包含”匹配
问题描述
我在使用 groovy 时遇到了一个奇怪的问题,我找到了一种解决方法,但我很不满意,所以也许有人可以帮助我:
我使用 ReadyAPI 2.8。在我的测试用例中,我有一些常规步骤。在其中一个中,我从上一个测试步骤中恢复了一个字符串,如果它与字符串“TJA470”匹配,我想做一个特定的处理。前面的测试步骤给出了一个字符串,它是 ssh 命令的输出。
这是常规步骤代码:
def hbox_ref = context.expand( '${get current HBox reference#hbox_ref}' )
// this returns me the data as a String
log.info hbox_ref
log.info "\"$hbox_ref\"" // to check if there is no spurious blank
log.info hbox_ref.class
log.info (hbox_ref == "TJA470") => returns false
log.info (hbox_ref.equals("TJA470")) => returns false
log.info (hbox_ref.contains("TJA470")) => returns true
这是控制台结果:
Fri Sep 20 16:13:17 CEST 2019: INFO: TJA470
Fri Sep 20 16:13:17 CEST 2019: INFO: "TJA470
"
Fri Sep 20 16:13:17 CEST 2019: INFO: class java.lang.String
Fri Sep 20 16:13:17 CEST 2019: INFO: false
Fri Sep 20 16:13:17 CEST 2019: INFO: false
Fri Sep 20 16:13:17 CEST 2019: INFO: true
尽管存在差异,但直截了当的测试是 == 或等于,我在所有其他相同类型的比较中使用它们并且它有效。
正如您在此处看到的,大多数逻辑案例都返回 false,我真的不知道为什么。
如果我在“groovy playground”之类的工具中执行相同的脚本,它会按预期工作!:(
我根本不是 groovy 方面的专家,一定有一些我错过的东西,但我觉得这很棘手!
如果有人可以提供帮助...谢谢
解决方案
多亏了所以我发现了问题:在问题中复制/粘贴控制台返回时,它表明文本末尾有一个特殊字符。这在 SOAPUI 日志输出中不可见...我在脚本中添加了以下处理:
def hbox_ref = context.expand( '${get current HBox reference#hbox_ref}' )
hbox_ref = hbox_ref.replaceAll("[^a-zA-Z0-9]+","")
或者
hbox_ref = hbox_ref.replaceAll("[^\\w]+","")
这给了
log.info (hbox_ref == "TJA470") => returns true (at last !)
更优雅的解决方案(感谢 SiKing):
(hbox_ref.trim() == "TJA470")
而不是使用 replaceAll
推荐阅读
- java - Eclipse 表达式不允许公共方法访问
- javascript - 如何用逗号数字元素分隔并在javascript中删除空字符串
- python - 子进程监听同一个端口
- wordpress - 如何简单地将片段代码添加到博客文章中(在 wordpress.com、免费计划、经典编辑器上)
- python - 集群重启后重新连接到 ray 集群
- sql - SQL将3个值向下移动相同的值
- python - Python:如何独立调整窗口大小和缓冲区大小?
- pivot-table - 如何在雪花中转置表格?我已经使用了 pivot 和 partition by 但仍然没有得到预期的输出
- html - 通过使菜单项刷新来改进 Bootstrap 平行四边形导航栏菜单
- c# - 在 AuthenticationParameters 和 AcquireToken 上出现错误