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

  • 相关阅读:
    对话系统综述
    3.738. 单调递增的数字
    3.765-情侣牵手
    2.135-分发糖果
    1.312-戳气球
    4.BN推导
    3.CNN-卷积神经网络推导
    2.DNN-神经网络推导
    联系人
    DS博客作业05--查找
  • 原文地址:https://www.cnblogs.com/istart/p/11195561.html
Copyright © 2011-2022 走看看