精华内容
下载资源
问答
  • 主要介绍了jmeter设置全局变量与正则表达式提取器过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 主要介绍了Jmeter正则表达式提取器实现过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • JMeter关联:JMeter正则表达式提取器与JSON提取器

    万次阅读 多人点赞 2019-06-21 17:22:31
    JMeter关联的实现1、关联的释义与简单示例2、常用正则表达式详解3、正则表达式提取器2、JSON值提取 前言:下文中会多次使用到【BeanShell Sampler】和【Debug Sampler】,前者的作用是模拟一个请求,返回自定义的...

    前言

    本文主要内容是:使用使用正则表达式提取器和JSON提取器实现关联。

    下文中会多次使用到BeanShell SamplerDebug Sampler,前者其实是起到一个mock server的作用,返回自定义的响应结果,后者能够输出JMeter的变量情况。

    关于JMeter的使用,花费大量精力写了JMeter的一系列文章,有图有案例,一方面总结起来作为备忘,一方面希望能给初学者一些帮助。觉得有所帮助的朋友,请点个赞,对于疏漏之处也欢迎指教。

    1 关联的释义与示例

    关联在接口测试中是一个非常重要的概念,它的意思是在两个或多个接口间建立逻辑上的依赖与联系。

    关联的使用场景往往要满足以下条件:

    1. A接口响应结果中的数据被后续的接口所引用
    2. A接口响应结果中被后续接口引用的数据是动态变化且无法提前预知的

    例如,登录接口-下订单接口这样2个接口组成的流程,就是非常典型的关联案例。

    首先,登录接口返回包含用户身份认证信息的token,后续的下订单接口需要附带上这个token才能被服务器识别身份。

    Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

    要想实现这个场景,我们需要这么做:

    1. 在登录接口响应结果中将token提取出来并保存在变量中,这里可以使用【正则表达式提取器】和【JSON提取器】。
    2. 在后续接口中引用已经保存好的token,一般通过【HTTP信息头管理器】

    形成的脚本如下。

    1、登录接口的响应结果:

    {
    	"code" : 200,
    	"msg" : "SUCCESS",
    	"data" : {
    		"accessToken" : "PJqx4566Ggf10qJv6firYAFS408p0us",
    		"info" : {
    			"id" : 10000,
    			"level" : 0,
    			"twiceGoogleAuth" : false,
    			"twiceMobileAuth" : true,
    			"twiceEmailAuth" : false,
    			"tradePwdAlways" : false,
    			"tradePwdHours" : false,
    			"lastLoginDate" : null,
    			"lastLoginAddress" : null,
    			"depositFlag" : true,
    			"loginCount" : 0,
    			"emailRegister" : false,
    			"nation" : 211,
    			"webLoginCount" : 0
    		}
    	}
    }
    

    2、从登录接口响应结果中提取token的值,并保存到名称为myToken的变量中:
    在这里插入图片描述

    3、引用前面保存的token值(前面保存变量为什么,这里就引用什么)
    在这里插入图片描述
    4、后续接口中,成功引用了到了myToken的值:
    在这里插入图片描述

    接下来,我们以 WeatherWS 这个网站的两个接口为示例,使用【正则表达式提取器】完成一个关联实现。

    接下来的测试场景是这样的:

    1. 请求 getRegionProvince 接口,得到包含各个省份 code 的列表,并在这个列表里提取北京code
    2. 将北京的 code 作为getSupportCityDataSet接口 theRegionCode 参数的参数值,请求接口得到北京下辖的行政区域列表。

    在这里插入图片描述
    getRegionProvince的接口说明如下:

    GET /WebServices/WeatherWS.asmx/getRegionDataset? HTTP/1.1
    Host: ws.webxml.com.cn
    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
    
    <?xml version="1.0" encoding="utf-8"?>
    <DataSet xmlns="http://WebXml.com.cn/">
      <schema xmlns="http://www.w3.org/2001/XMLSchema">schema</schema>xml</DataSet>
    

    getSupportCityDataSet的接口说明如下:

    GET /WebServices/WeatherWS.asmx/getSupportCityDataset?theRegionCode=string HTTP/1.1
    Host: ws.webxml.com.cn
    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
    
    <?xml version="1.0" encoding="utf-8"?>
    <DataSet xmlns="http://WebXml.com.cn/">
      <schema xmlns="http://www.w3.org/2001/XMLSchema">schema</schema>xml</DataSet>
    

    根据上面的接口说明,先建立下面的脚本:
    在这里插入图片描述
    整体的脚本结构如上图所示,下面依次看每个组件的内容和作用。

    1、【HTTP请求】getRegionProvince
    在这里插入图片描述

    1. IP:ws.webxml.com.cn
    2. 路径:/WebServices/WeatherWS.asmx/getRegionDataset
    3. 作用:获得中国省份、直辖市、地区;国家名称(国外)和与之对应的ID
    4. 相应结果(为节省篇幅,删除了大量无关数据):
    <?xml version="1.0" encoding="utf-8"?>
    <DataSet xmlns="http://WebXml.com.cn/">
      <xs:schema id="getRegion" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
      </xs:schema>
      <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
        <getRegion xmlns="">
          <Province diffgr:id="Province5" msdata:rowOrder="4">
            <RegionID>3117</RegionID>
            <RegionName>河北</RegionName>
          </Province> 
          <Province diffgr:id="Province29" msdata:rowOrder="28" diffgr:hasChanges="inserted">
            <RegionID>311101</RegionID>
            <RegionName>北京</RegionName>
          </Province>
         <Country diffgr:id="Country1" msdata:rowOrder="0">
            <RegionID>3320</RegionID>
            <RegionName>阿尔及利亚</RegionName>
          </Country>
        </getRegion>
      </diffgr:diffgram>
    </DataSet>
    

    观察相应结果,北京的RegionID是311101,但如何将它提取出来并保存到变量中呢?这就要用到【正则表达式提取器】了。在HTTP请求getRegionDataset上添加【后置处理器】-【正则表达式提取器】。

    2、【正则表达式提取器】:
    在这里插入图片描述

    1. 引用名称:code,后面引用该值时,将使用${code}的固定写法。
    2. 正则表达式:<RegionID>(.+?)</RegionID>\r\n\ <RegionName>北京</RegionName>,注意中间的8个空格,不能多一个也不能少一个。
    3. 模板:$1$,表示取第一列,下文【正则表达式提取器】会有详细解释。
    4. 匹配数字:1,表示取第一行,下文【正则表达式提取器】会有详细解释。

    3、【HTTP请求】getSupportCityDataSet
    在这里插入图片描述

    1. IP:ws.webxml.com.cn
    2. 路径:/WebServices/WeatherWS.asmx/getSupportCityDataset?theRegionCode=${code}
    3. 作用:获得支持的城市/地区名称和与之对应的ID
    4. 相应结果:
      在这里插入图片描述
      在这里插入图片描述

    2 常用正则表达式详解

    正则表达式描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

    正则表达式是相对繁琐抽象的,理解和记忆难度较高,因此这里对JMeter中能用到的正则表达式语法(主要是限定符)进行一下讲解。

    据我个人经验,(.+?)这个表达式基本就够用了,何况正则表达式提取远不如JSON提取器使用频率高,所以这一节大可以略过,直接看第三节。

    字 符描 述
    .匹配除换行符 \n 之外的任何单字符
    *贪婪,匹配前面的子表达式零次或多次,等价于{0,}
    +占有,匹配前面的子表达式一次或多次,等价于{1,}
    ?懒惰,匹配前面的子表达式零次或一次 ,等价于 {0,1}
    {n}n 是一个非负整数。匹配确定的 n 次。例如a{3}匹配“aaaaa”,能匹配到“aaa”
    {n,m}重复n到m次,例如正则 “a{3,4}” 将a重复匹配3次或者4次
    *?重复任意次,但尽可能少重复,如 “acbacb” 正则 “a.*?b” 只会取到第一个"acb"
    +?重复1次或更多次,但尽可能少重复,与上面一样,不同的是至少重复一次
    ??重复0次或1次,但尽可能少重复,如 “aaacb” 正则 “a.??b” 只会取到最后的三个字符"acb"
    {n,m}?重复n到m次,但尽可能少重复,如 “aaaaaaaa” 正则 “a{0,m}” 因为最少是0次所以取到结果为空
    {n,}?重复n次以上,但尽可能少重复,如 “aaaaaaa” 正则 “a{1,}” 最少是1次所以取到结果为 “a”

    部分表达式使用【正则表达式测试器】实测结果如下:

    1. *:0次或多次,因为0个也被能匹配,所以b、c和末尾被匹配成空
      在这里插入图片描述
    2. +:一个或多个,因为至少要匹配一个,不会有空字符串
      在这里插入图片描述
    3. :0个或一个,同*一样,没有a的被匹配成空字符串
      在这里插入图片描述
    4. a{n}:
      在这里插入图片描述
    5. a{n,m}
      在这里插入图片描述
    6. a{n,}
      在这里插入图片描述

    3 正则表达式提取器

    正则表达式提取器一般在取样器上创建,它的作用是在取样器(包括HTTP请求和BeanShell Sampler及其他取样器)的结果中按照一定的规则提取特定的值,并保存到内存中的某一个字段上,正则表达式所在的取样器之后的组件,都能通过引用方式(格式:${XXX})使用该值。
    在这里插入图片描述

    3.1 参数详解

    名称描述必须
    名称脚本中显示的这个元件的描述性名称
    Apply toMain sample only:仅适用于主样本,默认用这个就可以了
    Field to check要检查的响应字段,即在取样器响应内容的哪个区域进行匹配
    Name of created variable引用名称,即匹配到的变量存储的名称,一般会有[refname]_g(匹配数量)、[refname]_g0 (整体)、[refname]_gn(某个具体匹配值)等多个变量,
    Regular Expression正则表达式,用于分析响应数据的正则表达式,除非使用$0$组,否则必须至少包含一组括号
    Template模板,如果在正则表达式中有多结果,则可以是$2$$3$等等,表示解析到的第几个值给title,如:$1$表示解析到的第1个值
    Match No. (0 for Random)匹配数字,取第几,0代表随机取值,-1代表全部取值,1、2、3等表示多行返回值取第几个值。
    Default Value缺省值,如果表达式没有取得到值,就使用这个默认值
    Use empty default value勾选此项后,如果未提取到值,则给变量赋予空字符串,而不是null

    3.2 使用示例

    先看这么一个场景,假如响应内容ccBBmmAABBAAddBBAA,想在该响应内容中提取AAddBB并存储到参数test中,该如何处理?

    首先,观察待匹配字符串的左右边界分别是BBAA,那么正则表达式应写成BB(.+?)AA,在【正则表达式测试器】中测试一下:
    在这里插入图片描述
    可以看到,第1列(列从0开始计数)第二行是我们想要的结果,因此【正则表达式提取器】中按下图填写:
    在这里插入图片描述
    接下来,我们使用【BeanShell Sampler】模拟服务,来测试一下:
    在这里插入图片描述
    在这里插入图片描述
    HTTP请求IP中引用正则表达式提取器提取到的test
    在这里插入图片描述
    在这里插入图片描述

    4 JSON提取器

    在【后置处理器】中,有一个【JSON提取器】,与【正则表达式提取器】有类似的作用,不同的是,前者专为处理JSON型的响应结果而生。
    在这里插入图片描述

    4.1 参数详解

    名称描述必须
    Name名称,脚本中显示的这个元件的描述性名称
    Names of chreated variables匹配到的数据存储的变量名称,后续可以使用${variable name}引用它
    JSON Path ExpressionsJSON路径表达式
    Default Values默认值,如果JSON 路径表达式未能匹配到值,将使用该默认值
    Match No. (0 for Random)如果匹配到多个结果,选择使用哪个。0代表随机,-1代表全部,x代表第x个
    Compute concatenation var勾选此项后,如果匹配到多个结果,JMeter会使用","将他们连接起来,存储在的变量中

    4.2 使用示例

    接下来,我们看一个示例:

    假如接口返回下面的JSON数据,我们想在其中提取“周芷若”到“name”参数中。

    {
    	"status":200,
    	"data":[{"id":101,"name":"张无忌"},{"id":102,"name":"周芷若"}]
    }
    

    首先,构造脚本结果如下图,【BeanShell Sampler】作为mock server返回上面的数据:
    在这里插入图片描述

    return "{\"status\":200,\"data\":[{\"id\":101,\"name\":\"张无忌\"},{\"id\":102,\"name\":\"周芷若\"}]}";
    

    在【BeanShell Sampler】下面添加【后置处理器】–【JSON Extractor】
    在这里插入图片描述
    这里解释一下【JSON Path expression】的写法,

    • . 首先$.这部分是固定写法
    • data表示在JSON串以"data"为key获取value,也就是"[{\"id\":101,\"name\":\"张无忌\"},{\"id\":102,\"name\":\"周芷若\"}]"。
    • data所对应的值是一个JSONArray(JSON数组)格式,里面有两个JSONObject(JSON对象),第二个JSONObject是我们需要的,因此再按索引值"1"去获取,写作data[1],写到这里,我们得到了{\"id\":102,\"name\":\"周芷若\"}这个JSONObject,接下来再根据name这个key去获取相应的值,就得到"周芷若"了。

    运行脚本,查看结果树中的【Debug Sampler】的响应数据:
    在这里插入图片描述

    后来在自己开发接口自动化框架的过程中,借鉴JMeter的这个功能,做了一个工具类,在响应结果是JSON串的接口中提取数据十分方便。

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * @author guozhengMu
     * @version 1.0
     * @date 2018/12/20 13:07
     * @description 根据自定义的字符串解析提取json中的特定内容
     * @modify
     */
    public class JsonPathExpression {
        public static void main(String[] args) {
            String str = "{\"data\" : {\"deth\" : {\"bids\" : [[\"3.637\", \"360000\"]],\"asks\" : [[\"4.273\", \"662\"],[[{\"a\":[1,2]}]]]}}}";
    //      String result = jsonPathExpression("{\"status\" : 200,\"employees\" : [{\"firstName\" : \"Bill\",\"lastName\" : \"Gates\"}, {\"firstName\" : \"George\",\"lastName\" : \"Bush\"}]}", "$.employees[1].firstName");
            String result = jsonPathExpression(str, "$.data.deth.asks[1].[0].[0].a[1]");
            System.out.println(result);
        }
    
        /**
         * 根据路径表达式解析JSON
         *
         * @param jsonString 待处理的字符串
         * @param matcher    路径表达式
         * @return
         */
        public static String jsonPathExpression(String jsonString, String matcher) {
            String[] jsons = matcher.split("\\.");
    
            JSONObject object = JSON.parseObject(jsonString);
            JSONArray array = new JSONArray();
            String result = "";
            int index;
    
            for (int i = 1; i < jsons.length; i++) {
                if (jsons[i].contains("[")) {
                    // 解析数字
                    index = getIndex(jsons[i]);
                    if (i == jsons.length - 1) { // 最后一层
                        // 特殊情况处理
                        if (jsons[i].length() <= 3) {
                            // []必然是从array中取值
                            result = array.getString(index);
                        } else {
                            array = object.getJSONArray(jsons[i].split("\\[")[0]);
                            result = array.getString(index);
                        }
                    } else { // 不是最后一层
                        if (jsons[i].length() <= 3) {
                            try {
                                array = array.getJSONArray(index);
                            } catch (Exception e) {
                                object = array.getJSONObject(index);
                            }
                        } else {
                            // 不知道下一层是array还是object
                            try {
                                array = object.getJSONArray(jsons[i].split("\\[")[0]).getJSONArray(index);
                            } catch (Exception e) {
                                object = object.getJSONArray(jsons[i].split("\\[")[0]).getJSONObject(index);
                            }
                        }
                    }
                } else {
                    if (i != jsons.length - 1) {
                        object = object.getJSONObject(jsons[i]);
                    } else {
                        result = object.getString(jsons[i]);
                    }
                }
            }
            return result;
        }
    
        /**
         * 将字符串中的数字解析出来
         *
         * @param string:待处理的字符串
         * @return
         */
        public static int getIndex(String string) {
            try {
                String regEx = "[^0-9]";
                Pattern pattern = Pattern.compile(regEx);
                Matcher matcher = pattern.matcher(string);
                String index = matcher.replaceAll("").trim();
                return Integer.valueOf(index);
            } catch (Exception e) {
                return 0;
            }
        }
    }
    

    5 疑难杂症

    这一节主要记录一些比较特殊的场景和其解决方案。

    5.1 提取多个值

    • 响应结果:
    {
    	"result" : {
    		"similar" : [{
    				"id" : "us-B072HFDHKY",
    				"asin" : "B072HFDHKY"
    			}, {
    				"id" : "us-B073WM827B",
    				"asin" : "B073WM827B"
    			}, {
    				"id" : "us-B07GY17KFZ",
    				"asin" : "B07GY17KFZ"
    			}, {
    				"id" : "us-B076NYPS7M",
    				"asin" : "B076NYPS7M"
    			}, {
    				"id" : "us-B07NSBBX7L",
    				"asin" : "B07NSBBX7L"
    			}, {
    				"id" : "us-B077W9GHDV",
    				"asin" : "B077W9GHDV"
    			}
    		]
    	},
    	"code" : 0,
    	"message" : "操作成功!"
    }
    
    • 实现目标:在响应结果中前3个 asin 的值。

    以上场景,响应结果是JSON格式,在正常情况下,使用【后置处理器】中的【JSON Extractor】显然是很方便的(提取路径:$.result.similar[0].asin 即可获取第一个 asin 的值)。但由于要提取不止一个 asin 值,【JSON Extractor】就不太适用了,这时候要用到【正则表达式提取器】。

    1. 建立下面的脚本结构:
      在这里插入图片描述
      【BeanShell Sampler】的作用依然是模拟接口响应:
    return 
    "{\"result\":{\"similar\":[{\"id\":\"us-B072HFDHKY\",\"asin\":\"B072HFDHKY\"},{\"id\":\"us-B073WM827B\",\"asin\":\"B073WM827B\"},{\"id\":\"us-B07GY17KFZ\",\"asin\":\"B07GY17KFZ\"},{\"id\":\"us-B076NYPS7M\",\"asin\":\"B076NYPS7M\"},{\"id\":\"us-B07NSBBX7L\",\"asin\":\"B07NSBBX7L\"},{\"id\":\"us-B077W9GHDV\",\"asin\":\"B077W9GHDV\"}]},\"code\":0,\"message\":\"操作成功!\"}";
    
    1. 【正则表达式提取器】:
      在这里插入图片描述
      正则表达式:"asin":(.+?)"}

    2. 运行脚本,查看结果:
      在这里插入图片描述
      可见,所有 asin 值已经被提取并保存在内存中,后续的组件中可以任意引用。

    3. 引用值
      在这里插入图片描述
      在这里插入图片描述

    5.2 多个值合并

    如果响应内容是<name = Author value = Muguozheng>,我们同时提取到Author:MuguozhengAuthorMuguozheng作为下次请求参数,该如何做呢?

    首先,去【正则表达式试验器】中测试
    在这里插入图片描述
    根据匹配要求和正则表达式的测试结果,【正则表达式提取器】如下:
    在这里插入图片描述
    正则表达式:<name = (.+?) value = (.+?)>
    模板:$1$;$2$

    运行后查看结果树,后面的sampler(取样器)引用规则如下:

    1. 使用${test}可以引用Author:Muguozheng
    2. 使用${test_g}可以引用2这个数值
    3. 使用${test_g0}可以引用<name = Author value = Muguozheng>
    4. 使用${test_g1}可以引用Author
    5. 使用${test_g2}可以引用Muguozheng

    在这里插入图片描述

    5.3 左右边界不好确定

    假如响应结果是这么一个字符串:<name = Readers value = 马云,马化腾,刘强东>(向三位大佬致敬),想要提取马化腾这个值。

    这个例子的难点在于,正则表达式的左右边界无法确定,因为马化腾的右边界,刘强东也是响应内容中的动态值(这里的动态指的是,下次请求整体的响应内容可能变成"<name = Readers value = 张三,李四,王五>")。

    这里,正则表达式写成下面的样式即可:
    在这里插入图片描述
    于是,【Beanshell Sampler】写入模拟数据

    return "<name = Readers value = 马云,马化腾,刘强东>";
    

    【正则表达式提取器】可以如下图输入:
    在这里插入图片描述
    正则表达式:<name = Readers value = (.+?),(.+?),(.+?)>
    模板:$2$

    运行后查看结果树:
    在这里插入图片描述

    5.4 多个匹配结果

    在实际工作中,接口响应结果可能是一个集合,具有同样的左右边界,但我们需要的是最新的那条,一般是最后一条。

    如下,新建一个【Beanshell Sampler】模拟接口:

    return "<td>您的验证码是:400836,切勿将验证码告诉他人<td><td>您的验证码是:54297,切勿将验证码告诉他人<td><td>您的验证码是:65291,切勿将验证码告诉他人<td>";
    

    接下来在【Beanshell Sampler】下创建【正则表达式提取器】(匹配数字写-1,表示取所有匹配结果):
    在这里插入图片描述
    正则表达式:您的验证码是:(.+?),切勿将

    添加【Debug Sampler】和【查看结果树】后运行脚本,在【查看结果树】中可以看到,【正则表达式提取器】匹配结果:
    在这里插入图片描述

    code_1=400836
    code_1_g=1
    code_1_g0=您的验证码是:400836,切勿将
    code_1_g1=400836
    code_2=54297
    code_2_g=1
    code_2_g0=您的验证码是:54297,切勿将
    code_2_g1=54297
    code_3=65291
    code_3_g=1
    code_3_g0=您的验证码是:65291,切勿将
    code_3_g1=65291
    code_matchNr=3
    

    那么我们想获得匹配结果的最后一个,该怎么操作呢?这个问题的难点在于,事先无法确定匹配结果的数量,而解决这个难点的关键就在于code_matchNr这个参数,它的含义是匹配到的结果的数量,它的值就是最后一个匹配结果的索引。

    很明显,取code_${code_matchNr}就等值于code_3,无论匹配结果的数量是多少,code_${code_matchNr}都代表着最后一条结果。

    JMeter不支持嵌套引用,所以${code_${code_matchNr}}这种写法是不正确的。想正确引用该值,需要打开【Tools】-【函数助手对话框】,选择_V,填入code_${code_matchNr},点击生成:
    在这里插入图片描述
    ${__V(code_${code_matchNr})} 这个表达式就表示引用了匹配结果的最后一个。

    5.5 其他特殊用法

    在身份证中匹配提取出生日期,正则表达式如下图:
    在这里插入图片描述

    以上就是如何使用正则表达式提取器和JSON提取器实现关联的全部内容,觉得不错的朋友请点个赞和收藏,有不准确之处,欢迎指正。

    展开全文
  • 一、正则表达式提取器各名词解 (1)Apply to Main sample and sub-samples( 作用于主节点的取样器及对应子节点的取样器) Main sample only( 仅作用于主节点的取样器) Sub-samples only( 仅作用于子节点的取样...

    注重版权,转载请注明原作者和原文链接

    在这里插入图片描述
    在这里插入图片描述
    一、正则表达式提取器各名词解
    (1)Apply to
    Main sample and sub-samples( 作用于主节点的取样器及对应子节点的取样器)
    Main sample only( 仅作用于主节点的取样器)
    Sub-samples only( 仅作用于子节点的取样器)
    Jmeter-Variable Name to use( 作用于jmeter变量(输入框内可输入jmeter的变量名称),从指定变量值中提取需要的值)

    (2)要检查的响应字段
    1、主体:响应报文的主体,最常用
    2、Body(unescaped):主体,是替换了所有的html转义符的响应主体内容,注意html转义符处理时不考虑上下文,因此可能有不正确的转换,不太建议使用
    3、Body as a Document:从不同类型的文件中提取文本,注意这个选项比较影响性能
    4、信息头:响应信息头
    5、Request Headers:请求信息头
    6、URL:请求url
    7、响应代码:响应状态码,比如200、404等
    8、响应信息:响应信息

    (3)填写说明(例如:响应数据为:“id”: “1385417142792151042”, “token”: “eyJ0eXAiOiJKV1QiLCJhbG”
    1、引用名称
    (token,后面引用该值时,将使用${token}的固定写法)
    2、正则表达式
    ( 想要提取:1385417142792151042 和 eyJ0eXAiOiJKV1QiLCJhbG)
    (正则表达式:“id”:"(.?)",“token”:"(.?)")
    3、模板
    在这里插入图片描述
    4、匹配数字
    (当为 0 时,随机返回匹配的数据)
    (当为 1 时,返回匹配结果的第一个,x代表返回内容的第x个)
    (当为 -1 时,返回全部元素, 此时提取结果是一个数组)
    5、缺省值
    ( 正则匹配失败时,取的值)

    二、常用的正则表达
    在这里插入图片描述
    如有改善的地方欢迎大家在下方留言交流

    展开全文
  • 正则表达式提取器 应用场景:上一接口请求回来的参数下一个接口需要用到某一个参数 比如页面展示列表 点击某个列表查看详情,这时我们就需要用到 正则表达式提取器了。因为查看详情需要用到点击该列表的 id 在HTTP...

    接上一篇文章 Jmeter接口测试的使用及用户定义的变量进行参数化关联:https://blog.csdn.net/dhfaksljdfksajdnks/article/details/108456773

    正则表达式提取器

    应用场景:上一接口请求回来的参数下一个接口需要用到某一个参数 比如页面展示列表 点击某个列表查看详情,这时我们就需要用到  正则表达式提取器了。因为查看详情需要用到点击该列表的 id 

    在HTTP请求上面右键:添加--后置处理器--正则表达式提取器

    正则表达式 详情页面展示:

     

    Apply to:应用范围

    Main sample and sub_samples: 匹配范围包括当前父取样器并覆盖至子取样器

    Main sample only:匹配范围是当前父取样器

    sub-samples only: 仅匹配子取样器

    Jmeter Variable:支持对Jmeter变量值进行匹配

    要检查的响应字段:样本数据来源

    主体:响应数据的主体部分,排除Header部分;http协议返回请求的主体部分就是Body

    Body(unescapad):针对替换了转移码的Body部分。

    Body as a Document:返回内容作为一个文档进行匹配。

    信息头:只匹配信息头部分内容。

    URL:只匹配URL链接。

    响应代码:匹配响应代码,比如Http协议返回码200代表成功。

    响应信息:匹配响应信息,比如处理成功返回“成功”字样。

    引用名称:根据自己的风格随便填写,在后面引用需要用到

    正则表达式:这里填写需要匹配的内容 一般用(.+?)都能满足 意思是“.”匹配任意元素;“+”指前面的"."匹配任意元素的次数是一次或多次;“?”则是标识前面匹配上最小长度值。如果有别的需求自行百度一下吧

    模板:比如有多个值 提取到第几个值

    $-1$:表示取所有匹配模板值

    $0$:表示随机取匹配模板值

    $1$:表示取第一个匹配模板值

    $2$:表示取第二个匹配模板值

    $n$:n表示正整数,提取第n个匹配模板值。

    匹配数字:0便是随机取;-1表示取所有;正数表示对应取第一个匹配到的值

    缺省值:缺省值相当于默认值;当未匹配到数据时,缺省值就是引用变量的值。

     

    这里我用百度的接口测试一下取返回结果的这个值(html格式)

    提取器页面的详细配置,字段说明在上面已经描述过了

    注意引用的字段,上面提取器引用名称填写的什么这里就引用什么

    查看第二个接口的返回结果,也就是在上一个接口提取的几个字

    有人会有疑问,返回的是html的这样提取,那返回为json 格式的怎么提取呢,下面就说一下json格式的怎么提取

    比如我想提取这个字段

    那么提取器的表达式这样写 也就是将菜谱大全返回的imtro参数提取出来

    供下一个百度搜索的接口使用  引用方式及结果

    以上就是正则表达式提取器的使用,如果有什么不对请提出宝贵的建议,会及时改正,感谢

    展开全文
  • 要截取上图红框中的内容(在登录请求的响应体中),好作为下个请求的请求体输入。 使用Jmeter的正则表达式提取器,设置如下图: 运行Jmeter,却无法获取到定义的变量dmfRequestId2,不知道是正则哪里写错了?
  • 1、什么是正则表达式提取器 2、应用场景 3、正则表达式提取器的使用步骤 一、什么是正则表达式提取器 1、正则表达式是实现关联的其中一种方式 2、正则表达式是一种模糊匹配,通过匹配得到某一个值 二、应用场景 1、...

    1、什么是正则表达式提取器
    2、应用场景
    3、正则表达式提取器的使用步骤

    一、什么是正则表达式提取器
    1、正则表达式是实现关联的其中一种方式
    2、正则表达式是一种模糊匹配,通过匹配得到某一个值
    二、应用场景
    1、说到Jmeter正则表达式提取器的应用,就不得不说到关联,所谓关联就是上一个接口的响应是下一个接口的请求
    2、例如:上一个接口(登录)的响应中返回的有一个“key”值,而这个key的值是下一个接口(加入购物车)请求中所用到的,加入购物车这个接口的请求要想用key的值,那必须要先从登录的响应中提取出这个key的值,怎么提取那?这时就可以用到正则表达式提取器。

    三、正则表达式提取器的使用步骤
    利用一个加入购物车案例来说明一下正则表达式提取器的使用

    第一步:添加一个http请求,命名为:加入购物车,请求参数中有一个key, key的值是从登录的响应中获取到的,所以接下来我们需要添加一个登录的请求,从而获得key的值
    在这里插入图片描述

    第二步:添加一个http请求,命名为:登录
    在这里插入图片描述第三步:添加查看结果树,并查看登录的响应结果
    在这里插入图片描述第四步:在登录请求下面添加一个正则表达式提取器,来提取第二步中的key的值
    在这里插入图片描述第五步:添加一个Debug Sampler(在取样器中),来查看是否成功提取到我们需要提取的值(key)
    在这里插入图片描述第六步:利用提取到的key值,做加入购物车的请求参数,因为在这里key的值不是固定的,所以需要用${}做引用,从而去获得不断变化的key的值
    在这里插入图片描述第七步:添加成功
    在这里插入图片描述第八步:刷新购物车,对应购物车也同时添加成功
    在这里插入图片描述

    展开全文
  • 一:正则表达式提取器 HTTP请求-后置处理器-正则表达式提取器 2.看一下需要提取的响应信息,在察看结果树的响应信息里查看 (此为访问一个登录系统的响应信息) 提取登录后获取的token,作为请求参数,用于其它...
  • Jmeter之正则表达式提取器
  • 正则表达式2.模板3.匹配数字二、例子1.【模板&匹配数字】2.【例-贪婪&非贪婪】3.【例-普通】 一、相关理论 1.正则表达式 ():要提取的内容 .:匹配任意单个字符串 *: 匹配(之前的符号)0次或多次 +:匹配...
  • 一、json提取器 1、为什么使用?因为接口返回类型是json格式的! 2、步骤:HTTP请求---> 后置处理器--->JSON提取器 Variable names : 名称JSONPath Expression:JSON表达式Match Numbers:0随机;n取第几...
  • jmeter常用控件-正则表达式提取器 基本介绍 它是后置处理器中的一员,在域内所有Sampler执行完后才会执行,所以如果你想只对某个Sampler生效的话,那就加成子对象这个组件可以用来做关联 信息填好之后如下: ...
  • 1. 添加正则表达式提取器 右键线程组->添加->后置处理器->正则表达式提取器 2. 提取器配置介绍 说明: Apply to Main sample only - 仅作用于Main sample Sub-samples only - 仅作用于sub-...
  • Jmeter-使用正则表达式提取器获取关联参数的使用方法,网络资源共享!
  • Jmeter使用正则表达式提取器

    千次阅读 2020-08-14 00:12:18
    一、正则表达式提取器 如果一个正则表达式提取一个值,那么模板以$1$,即可将匹配的值提取出来; 例如:Set-Cookie: sessionid=(.*); 如果一个正则表达式需要提取多个值,那么模板以$1$ $2$…$n$将匹配的值进行提取...
  • 上一篇文章实现了用Jmeter工具实现了新增用户和学员登录两个功能,这篇文章将对前两个功能进行优化。 1.实现参数化 在上一篇文章中,新增用户时...正则表达式提取器和JSON表达式提取器的作用相同,都是提取数据的。但是
  • 正在学习,所以拿正则表达式提取器练手,结果掉坑了。 设置变量名captchaId,正则式,匹配项1,默认值888,这些都ok,因为在调试取样器中能看到结果,没有错。但是请求2就是报错不通过。各种百度,可能自己没理解...
  • 提取数据范例: {“retCode”:“000000”,“retMsg”:“操作成功”,...遇到问题,正则表达式提取器提取的时候提取到null值,原来没加(),对于正则表达式提取器()内的值是要提取的值。 综上两种都可以提取。 ...
  • jmeter 正则表达式提取器详细讲解

    千次阅读 2019-07-23 15:18:51
    正则表达式入门教程:http://deerchao.net/tutorials/regex/regex.htm 表1.常用的元字符 代码 说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d ...
  • 说到Jmeter正则表达式提取器的应用,就不得不说到关联。所谓关联,就是把应用中动态变化返回的数据获取到,把它保存为一个参数,提供给后面需要用到的地方进行使用。 Jmeter中关联可以通过“添加—后置处理器—正则...
  • jmeter提取多个token之正则表达式提取器 1、新建一个线程组 2、添加HTTP请求 3、填写登录请求信息 4.添加查看结果树,运行脚本后,查看登录接口返回值,接下来我们要获取这两个token,然后传给下一个请求 ...
  • 上图中Login接口的Response中有用户token,该token需要在下一个需求提报的接口中使用,所以在Login下添加“正则表达式提取器” 步骤2:选择Login,鼠标右键选择“添加->后置处理器->正则表达式提取器” ...
  • 正则表达式的用处很多,最基础的用法,这里介绍正则表达式提取器的使用 1,断言 2,传参(关联) 例子 1.http请求 2正则表达式提取,想要提取列表列中id,一遍打开列表页 如果是1,每次就会取相同的值!匹配数字的...
  • 正则表达式提取器 允许用户使用正则表达式从服务器响应中提取值。作为后处理器,此元素将在其范围内的每个Sample请求之后执行,应用正则表达式,提取请求的值,生成模板字符串,并将结果存储到给定的变量名称中。 ...
  • 1,添加正则表达式提取器。 依次右击采样器 点击 Add→ Post Processors→ Regular Expression Extractor 2,面板介绍 (1)Apply to 当我们发出一个请求,可能触发服务端多个请求, main sample only就足以...
  • JMeter后置处理器中的正则表达式提取器也是最常使用的一个元件,非常简单方便,功能也很强大。 **在jmeter4.0中增加了Boundary Extractor元件,可以代替正则表达式提取器,而且使用更简单更方便**   最近我在调...
  • JMeter正则表达式提取器使用详解

    千次阅读 2020-04-04 08:37:37
    Jmeter正则表达式提取器使用详解 整体目录结构: http请求的访问地址为: http://www.stats.gov.cn//tjsj/tjbz/tjyqhdmhcxhfdm/2019/14/1402.html 需要抓取的内容为: <tr class='countytr'><td...
  • 如加了一个debug采样器,名称可以为:${name} 5、正则表达式提取器中模板所填不同值的含义: 表示使用提取到的第几个值: $-1$:表示取所有值 $0$:表示随机取值 $1$:表示取第一个值 $2$:表示取第二个值 ,...
  • 1、提取全部:^(.*)$ 2、提取中间某一段:(.*?) 或(.+?) 3、从中间某处提取到末尾:([^"]+) 4、转义:\ 5、换行:\n 6、\d+ 是来匹配1个或更多连续的数字 ps:(.+?) 和 (.*?) 的区别: (.+?)提取1个字符串及...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,736
精华内容 20,694
关键字:

正则表达式提取器