Java 字符串“matches”在JSR223断言中似乎不起作用
我有以下断言代码Java 字符串“matches”在JSR223断言中似乎不起作用,java,jmeter,Java,Jmeter,我有以下断言代码 Boolean result = prev.getResponseDataAsString().matches(".*Close.*") System.out.println(result) if(!result){ BufferedWriter writer = null; try{ writer = new BufferedWriter( new FileWriter("I:\\failedpayload.txt")) w
Boolean result = prev.getResponseDataAsString().matches(".*Close.*")
System.out.println(result)
if(!result){
BufferedWriter writer = null;
try{
writer = new BufferedWriter( new FileWriter("I:\\failedpayload.txt"))
writer.write(prev.getResponseDataAsString())
}
catch(Exception ex){
System.out.println(ex.getMessage())
}
finally{
writer.close()
}
// System.out.println("Response:"+prev.getResponseDataAsString());
}
AssertionResult.setFailure(!result);
测试失败,结果是错误的。但是,当我查看创建的文件时,我看到了搜索字符串
为什么在创建布尔值时在创建的文件中关闭而不是在创建布尔值时关闭
import java.util.regex.*
...
Pattern aPattern = Pattern.compile(".*Close.*",Pattern.MULTILINE);
Matcher aMatcher = aPattern.matcher(prev.getResponseDataAsString());
Boolean result = aMatcher.find();
基本上,正如注释所建议的,匹配对多行不起作用。这确实起作用了
import java.util.regex.*
...
Pattern aPattern = Pattern.compile(".*Close.*",Pattern.MULTILINE);
Matcher aMatcher = aPattern.matcher(prev.getResponseDataAsString());
Boolean result = aMatcher.find();
基本上,因为注释建议的匹配不适用于多行。如果需要Groovy,您可以使用: 如果需要多行-可以使用
(?m)
运算符,在Groovy中,它将输入视为多行:
更多信息:
(?m)
运算符,在Groovy中,它将输入视为多行:
更多信息:
无法匹配行分隔符,这会阻止匹配
工作,因为它会检查regex是否匹配整个字符串。但是无论如何,匹配项(“.*Close.”)
应该重写为contains(“Close”)
。contains有时也会失败。我从未调试过为什么,但这就是为什么我切换到匹配。添加了一些关于我为什么不使用contains的更多信息。在这种情况下,如果匹配项
有效,则包含项
也有效,因此使用匹配项
并没有任何改进。看看它在什么情况下失败,然后我们就可以开始帮助你了。否则,我们只能依靠猜测,这不是解决问题的非常有效的方法。就像我说的,它随机失败,但控制台中的输出显示了它在contains中使用的值。请参阅更新文件的有效内容是什么?我猜您的字符串包含多行,但是默认情况下,正则表达式中的
无法匹配行分隔符,这会阻止匹配
工作,因为它会检查正则表达式是否匹配整个字符串。但是无论如何,匹配项(“.*Close.”)
应该重写为contains(“Close”)
。contains有时也会失败。我从未调试过为什么,但这就是为什么我切换到匹配。添加了一些关于我为什么不使用contains的更多信息。在这种情况下,如果匹配项
有效,则包含项
也有效,因此使用匹配项
并没有任何改进。看看它在什么情况下失败,然后我们就可以开始帮助你了。否则,我们只能依靠猜测,这不是解决问题的非常有效的方法。就像我说的,它随机失败,但控制台中的输出显示了它在contains中使用的值。请参阅您正在使用的更新aMatcher.find()代码>不需要在模式中使用*
部件,这意味着您也不需要模式。多行
标志。无论如何,我很难相信匹配
在包含
失败的情况下会起作用。您的代码中肯定隐藏着另一个问题,但要解决它,我们需要看到(也称为a)。不幸的是,考虑到环境是多么复杂,我不确定我是否能够创建其中一个。我可以发布我的代码及其对事物的影响,但我不能真正发布一个简单的示例。@Pshemo可能是JSR223断言不是线程安全的吗?@Pshemo我已经删除了我添加的额外内容,我将创建另一个JIRA。保持警惕!因为您使用的是aMatcher.find()代码>不需要在模式中使用*
部件,这意味着您也不需要模式。多行
标志。无论如何,我很难相信匹配
在包含
失败的情况下会起作用。您的代码中肯定隐藏着另一个问题,但要解决它,我们需要看到(也称为a)。不幸的是,考虑到环境是多么复杂,我不确定我是否能够创建其中一个。我可以发布我的代码及其对事物的影响,但我不能真正发布一个简单的示例。@Pshemo可能是JSR223断言不是线程安全的吗?@Pshemo我已经删除了我添加的额外内容,我将创建另一个JIRA。保持警惕!我仍然无法理解当我在请求断言中包含XML时它为什么找不到它(这就是我使用JSR的原因),我知道XML由于某些原因无法通过验证;s但我不明白这为什么会影响文本响应。我仍然不明白当我在请求断言中包含内容时它为什么找不到它(这就是我使用JSR的原因)。我知道XML由于某些原因无法通过验证;s但我不明白为什么这会影响文本响应。