zoukankan      html  css  js  c++  java
  • Jmeter关联之正则表达式

    如果有这样的情况:一个完整的操作流程,需要先完成某个操作,获得某个值或数据信息,然后才能进行下一步的操作(也就是常说的关联/将上一个请求的响应结果作为下一个请求的参数);

    在Jmeter中,可以利用正则表达式提取器来帮助我们完成这一动作。
     

    一、正则表达式

    下面是常用的正则表达式操作符:

    字符 作用
    $ 匹配输入字符串的结尾位置。
    () 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。
    * 匹配前面的子表达式零次或多次。
    + 配前面的子表达式一次或多次。
    . 匹配除换行符 之外的任何单字符。
    ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。
    将下一个字符标记为或特殊字符、或原义字符。
    ^ 匹配输入字符串的开始位置。
    w 匹配字母、数字、下划线或汉字
    {n} n 是一个非负整数。匹配确定的 n 次。
    {n,} n 是一个非负整数。至少匹配n 次。
    {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。

     
    贪婪匹配和非贪婪匹配
    *、+限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。

    例如,您可能搜索 HTML 文档,以查找括在 H1 标记内的章节标题。该文本在您的文档中如下:

    <H1>Chapter 1 - 介绍正则表达式</H1>
    

    贪婪:下面的表达式匹配从开始小于符号 (<) 到关闭 H1 标记的大于符号 (>) 之间的所有内容。

    <.*?>
    

    非贪婪:如果您只需要匹配开始和结束 H1 标签,下面的非贪婪表达式只匹配<H1>。

    <.*?>
    

    如果只想匹配开始的 H1 标签,表达式则是:

    <w+?>
    

    通过在 *+? 限定符之后放置 ?,该表达式从"贪心"表达式转换为"非贪心"表达式或者最小匹配。

     

    二、正则表达式提取器

    右键添加后置处理器→正则表达式提取器,正则表达式提取器界面如下:

    说明

    后置处理器:在请求结束或者返回响应结果时发挥作用

    正则表达式提取器:允许用户从服务器的响应中通过使用perl的正则表达式提取值。该元素会作用在指定范围取样器,用正则表达式提取所需值,生成模板字符串,并将结果存储到给定的变量名中。

    APPly to:作用范围(返回内容的断言范围)

    • Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器
    • Main sample only:仅作用于父节点的取样器
    • Sub-samples only:仅作用于子节点的取样器
      -JMeter Variable:作用于jmeter变量(输入框内可输入jmeter的变量名称)
      要检查的响应字段:需要检查的响应报文的范围
    • 主体:响应报文的主体
    • Body(unescaped):主体,响应的主体内容且替换了所有的html转义符,注意html转义符处理时不考虑上下文,因此可能有不正确的转换,不太建议使用
    • Body as a Document:从不同类型的文件中提取文本,注意这个选项比较影响性能
    • Response Headers:响应信息头
    • Request Headers:请求信息头
    • URL:统一资源定位符,即Internet上用来描述信息资源的字符串
    • Response Code:响应状态码,比如200、404等
    • Response Message:响应信息

    引用名称(Reference Name):Jmeter变量的名称,存储提取的结果;即下个请求需要引用的值、字段、变量名

    引用方法:引用方法:${引用名称}

    正则表达式(Regular Expression):使用正则表达式解析响应结果,“()”表示提取字符串中的部分值,请不要使用“||”,除非你本身需要匹配这个字符。

    模板(Template):从匹配的结果中创建一个字符串,这是通过正则表达式匹配出来的一组值,意为使用提取到的第几个值(可能有多个值匹配,因此使用模板);从1开始匹配,以此类推.

    参数可以在取值模板组合使用,例如:“1-2”作为模板得到的值是使用“-”连接的第一个待匹配内容与第二个待匹配内容组合而成的字符串。
    提取单个字符串:
    假设我们想要匹配Web页面的如下部分:name = "file" value = "readme.txt">并要提取readme.txt。一个合适的正则表达式是:name = "file" value = "(.+?)">。我们可以这么写:
    引用名称:file
    正则表达式:name = "file" value = "(.+?)">
    模板:$1$
    readme.txt在需要引用的地方可以通过:${file}进行使用。
     
    提取多个字符串:
    假设我们想要匹配Web页面的如下部分:name = "file.name" value = "readme.txt">并要提取file.name和readme.txt。一个合适的正则表达式是:name = "(.+?)" value = "(.+?)"。这样就会创建2个组,分别用于$1$和$2$。我们可以这么写:
    引用名称:file
    正则表达式:name = "(.+?)" value = "(.+?)"
    模板:$1$$2$
    如下变量的值将会被设定为:
    file : file.namereadme.txt
    file_g0 : name = "file.name" value = "readme.txt"
    file_g1 : file.name
    file_g2 : readme.txt
    在需要引用的地方可以通过:${file}, ${file_g0},{file_g1},{file_g2}进行使用。
     

    匹配数字(Match No):正则表达式匹配数据的结果可以看做一个数组,表示如何取值:0代表随机取值,正数n则表示取第n个值(比如1代表取第一个值),负数则表示提取所有符合条件的值。

    缺省值:匹配失败时候的默认值;通常用于后续的逻辑判断,一般通常为特定含义的英文大写组合,比如:ERROR

  • 相关阅读:
    eclipse下c/cpp " undefined reference to " or "launch failed binary not found"问题
    blockdev 设置文件预读大小
    宝宝语录
    CentOS修改主机名(hostname)
    subprocess报No such file or directory
    用ldap方式访问AD域的的错误解释
    英特尔的VTd技术是什么?
    This virtual machine requires the VMware keyboard support driver which is not installed
    Linux内核的文件预读详细详解
    UNP总结 Chapter 26~29 线程、IP选项、原始套接字、数据链路访问
  • 原文地址:https://www.cnblogs.com/istart/p/11195561.html
Copyright © 2011-2022 走看看