我的问题是,如何编写Jmeter正则表达式,以便解析文本中有多少行无关紧要?例如,正则表达式:
<FMSFlightPlan>\n(.*)\n(.*)\n(.*)\n(.*)\n(.*)\n(.*)\n(.*)</FMSFlightPlan>
将匹配下面显示的7行字符串,并返回两个标记之间的所有内容
<FMSFlightPlan>
8725
AN NTEST/GL
- FPN/FN/RP:DA:GCRR:AA:LEMD:F:KORAL,N29439W012347.UG5.
SONSO,N30007W012061.UN871.VJF,N36144W005585.UN10.
HIJ,N38305W005060.Z230.SOTUK,N39116W004448
</FMSFlightPlan>
但是,相同的正则表达式将为以下6行字符串返回NA:
<FMSFlightPlan>
C90D
AN N9696T/GL
- FPN/FN/RP:DA:KDEN:AA:KSFO:F:DBL,N39264W106537.J80.
ILC,N38150W114237..RUMPS,N38072W117163..OAL,N38002W117462
</FMSFlightPlan>
我知道必须为正确的行数设置模板,我不相信这是问题的原因。
答案 0 :(得分:2)
事实证明我需要建立dotall模式,它基本上告诉正则表达式提取器解析新行,就好像它们是空格一样。通过将标记(?s)添加到正则表达式的最开头来建立dotall模式,如下所示:
(?s)<FMSFlightPlan>(.*?)</FMSFlightPlan>
然而......我仍然无法打印匹配的文字。由于某种原因,我正在使用的Beanshell断言无法将正则表达式引用名称识别为变量并给出错误消息:
断言错误:是的 断言失败:错误 断言失败消息:org.apache.jorphan.util.JMeterException:调用bsh方法时出错:eval源文件:内联评估:``import java.io. *; //将数据结果写出到文件outfile =“/ Users / Dani ...”'令牌解析错误:第12行第380行的词汇错误。遇到:“\ n”(10),之后:“\” 3811 \ tYes \ tAAR \ tSTN \ t835 \ t \ t $ B738 \ tfp,nradps,art,CCAAN,EXCD,wp00,p00 \ t37919 \ ta0 \ ti \ t10 \ t0 \ t3 \ t0 \ t \ t14 \ t 25 / M \ t0000ADF \ t140785 \ t133806 \ t006979 \ t01:15:00 \ t0484 \ t360 \ t0379 \ t360 \ t0112 \ t 000932 \ tP00 \ t007115 \ t2013-02-13T21:23:00Z \ t2013-02-14T08: 35:00 + 00:00 \ t000837 \ T00:10:00 \ t000000 \ T00:00:00 \ t000837 \ T00:10:00 \ t000000 \ t000000 \ t000000 \ T00:00:00 \ t000000 \ T00:00: 00 \ t“的
我目前正在尝试使用用户定义变量来确保Beanshell断言能够识别正则表达式。
感谢大家的回复!
答案 1 :(得分:-1)
请勿使用Regex Extractor解析XML。
在这种情况下,您至少有以下更好的选择:
1。 XPath Extractor
将它作为孩子添加到您的请求采样器中
配置详情如下:
Use Tidy (tolerant parser): No
Reference Name: flightPlan
XPath Query: /FMSFlightPlan/text()
Default Value: notFound
这会将FMSFlightPlan
的值提取到jmeter变量flightPlan
中,您可以将其引用为${flightPlan}
。
2。 Beanshell PostProcessor使用beanshell / java代码从xml-response中提取所需的值并将其存储在jmeter变量中:https://stackoverflow.com/a/10092854/993246。