Jmeter正则表达式可变行数

时间:2013-01-04 21:25:59

标签: regex xpath jmeter

我的问题是,如何编写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>

我知道必须为正确的行数设置模板,我不相信这是问题的原因。

2 个答案:

答案 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