• 转:详解JMeter正则表达式(1)


    1.概览

    JMeter中包含范本匹配软件Apache Jakarta ORO 。在Jakarta网站上有一些关于它的文档,例如a summary of the pattern matching characters :

    http://jakarta.apache.org/oro/api/org/apache/oro/text/regex/package-summary.html

    另外,还有关于该软件老版本的文档OROMatcher User's guide ,也许会有一些帮助。URL地址:http://www.savarese.org/oro/docs/OROMatcher/index.html

    JMeter的范本匹配与Perl语言的范本匹配类似。一个安装完整的Perl会包含很多关于正则表达式的文档(搜寻perlrequick、perlretut、perlre、perlreref)。

    我们有必要分清楚包含(Contains)和匹配(Matches)的差异,它们用于响应断言测试元件:

    包含(Contains)意味着正则表达式至少部分匹配目标,例如,'alphabet' 包含 'ph.b.',因为正则表达式匹配其子字符串'phabe'。

    匹配(Matches)意味着正则表达式完全匹配目标。例如,'alphabet'匹配'al.*t'。

    在这一情况下,它等同于使用^ 和$封装正则表达式,即'^al.*t$'。但是事情并不总是这样。例如,正则表达式'alp|.lp.*'包含于'alphabet',但并不匹配'alphabet'。

    原因在于当范本匹配器在'alphabet'中找到序列'alp'后,就会停止尝试其他组合,而且'alp'不同于'alphabet',它不包含'habet'。

    不同于Perl,没必要将正则表达式用//封装。

    2.实例

    1)提取单个字符串

    假设测试人员期望匹配Web页面的如下部分:name="file" value="readme.txt">并提取readme.txt。

    一个符合要求的正则表达式:

    1. name="file" value="(.+?)"> 。 

    上面用到的特殊字符包括如下几个。

    ( 和 ):封装了待返回的匹配字符串。

    .:匹配任何字符。

    +:一次或多次。

    ?:不要太贪婪,在找到第一个匹配项后停止。

    如果没有?,在找到第一个">后,会继续寻找,直到最后一个">,这么做很可能不是测试人员期望的。

    尽管上面的表达式可以达到目的,但是使用如下表达式更有效率:name="file" value="([^"]+)">,其中[^"]-意味着匹配任何东西(除了")。在这种情况下,匹配引擎在找到第一个右侧"后,就会停止搜索。而上面例子中的匹配引擎会去寻找">。

    2)提取多个字符串

    假设测试人员期望匹配Web页面的如下部分:name="file" value="readme.txt">,并提取file.name和readme.txt。

    一个符合要求的正则表达式:

    1. name="([^"]+)" value="([^"]+)" 

    这会创建两个组合,并可用于JMeter正则表达式模板,形如$1$ 和$2$。

    JMeter正则表达式提取器会将组合的值放在指定变量中,如图11-2所示。

     
    (点击查看大图)图11-2  JMeter正则表达式提取器
  • 相关阅读:
    Redis学习之(一)
    SpringMVC之学习(0)
    Node.js之Express三
    Node.js之Express二
    Node.js之Express一
    Node.js进程管理之进程集群
    Node.js进程管理之子进程
    Node.js其他模块
    Node.js进程管理之Process模块
    Node.js HTTP Server对象及GET、POST请求
  • 原文地址:https://www.cnblogs.com/lci05/p/4957298.html
Copyright © 2020-2023  润新知