Groovy脚本正则中使用变量失效:SoapUI文件检测脚本无法匹配文件
解决SoapUI Groovy脚本无法找到XML文件的问题
我来帮你排查下这个问题,你的脚本找不到根目录下的5KB XML文件,核心问题出在正则表达式的变量引用写法上,咱们一步步来修复:
问题根源
你脚本里的正则匹配部分 file.name =~/\.$\{ext\}/ 是错误的——Groovy中在正则表达式的斜杠字符串里,直接写${ext}会被当成字面量(也就是会去匹配文件名里的${ext}后缀),而不是替换成你从Properties里取到的ext变量值,这就导致你的XML文件(后缀是.xml)根本不会被匹配到。
具体修复方案
1. 修正正则表达式
把正则改成以下两种写法之一都可以:
- 直接在正则里引用变量:
file.name =~ /\.$ext/ - 用双引号字符串解析变量(注意点号要转义):
file.name =~ "\\.$ext"
2. 检查ext变量的取值
确认Properties#D_file_ext里的值是xml(不带前面的点),因为你的正则里已经加了\.来匹配点号,如果变量本身是.xml,正则就会变成匹配..xml,同样找不到文件。
3. 验证根目录路径
确保dir变量正确指向你的目标根目录,比如你需要用new File("你的根目录绝对路径")来初始化它,比如def dir = new File("C:/test_root")(Windows)或者def dir = new File("/home/test_root")(Linux)。
修复后的完整脚本示例
def ext = context.expand('${Properties#D_file_ext}') def dir = new File("替换成你的根目录路径") // 这里一定要替换成实际路径 def list = [] dir.eachFileRecurse (FileType.FILES) { file -> // 修复后的正则匹配 if(file.length() > 0 && file.name =~ /\.$ext/){ list << file } } // 打印结果方便验证 log.info "找到的符合条件的文件:${list}"
额外优化建议
- 如果你的XML文件扩展名可能是大写(比如
.XML),可以改成不区分大小写的匹配:file.name =~ /\.$ext/i - 可以加个日志打印
ext的值,确认变量是否正确获取:log.info "当前匹配的扩展名:${ext}"
内容的提问来源于stack exchange,提问作者plaidshirt
相关产品推荐
相关产品推荐

