• jmeter参数化6、上个接口返回的值作为下一个接口的参数(json extrator、正则提取器、beanshell)


    对请求添加后置处理器,从前面的响应数据中提取参数。

    一般使用json提取器、正则提取器、beanshell。三者用法都一样,都是在待提取的请求下面添加一个提取器就可以了。

    6.1、后置处理器json extrator

    6.1.1、注意事项

    注意需添加到请求内,否则下一个请求可能获取不到值

    错误写法:

     

     正确写法:

     

    6.1.2、举例中的测试数据

     

    6.1.3、各字段含义

     

    Apply to:指作用范围,通常发出一个请求只触发一个请求,所以勾选“main sample only”就可以;若发一个请求可以触发多个服务器请求,就有main sample 和sub-sample之分了。

    Variable names:参数名称,多个参数之间用英文分号分隔

    Json path expression:提取方式的表达式

    Match no:需要与json path expression搭配使用,当表达式为$.data.data..title时,取到的是列表,此处填入数字,则表示取第几个值,从1开始数。不填时,默认为0,表示从title列表中随机取一个title。填入-1时,返回每一个值。

    compute concatenation var:在match no为-1的情况下,勾选后,会多生成一个“变量名_ALL”的参数,将所有匹配值用,连接起来。

    Default values:当参数取不到对应值时的默认值

    6.1.4、Json path expression 详细说明

    1)常规情况

    $..title 相对路径,取任一层级下的title,有多个时默认随机取值,或者搭配match no返回多个值

    $.data.total  绝对路径下的total

    $.data.data[0].title

    *(2)按条件提取值,对列表中的元素进行筛选

    语法格式

    [?(expression)]

    $..users[?(@.uuid)] 提取 users 里面包含 uuid 字段的记录

    $..users[?(@.reg_time > '2020-06-01')] 提取 reg_time 字段大于 2020-06-01 的记录

    $..users[?(@.role_desc =~ /.*会员.*?/i)] 提取 role_desc 字段包含会员的记录

    $..users[?(@.status == 0)] 提取 status 字段等于 0 的记录

    @

    代表当前节点,像上面的四个栗子,@代表 users 这个列表字段

    =~

    后面跟正则表达式,如果想提取包含指定字符的值,可以使用此正则: /.*指定字符串.*?/i

     i  代表大小写不敏感

     

     

    *(3)提取数据指定字段的值的例子

    提取 users 第一条记录的 uuid、username 字段的值

    $..users[0].['uuid','username']

    测试结果

    new_1={"uuid":"6D5EDCB459F0917A98106E07D5438C58","username":"luojunjiessb"}

    6.1.5、match no为-1的情况

    从列表中循环取值

      

    搭配for each控制器,就可以遍历每一个返回值:

      

    运行结果:

     

    6.2、正则提取器

    JSON 提取器只针对接口返回的响应内容,如果想提取的是响应头、请求头的值,这个时候正则提取器的作用就出来了,它可以提取请求任一部分的值。

     

     测试数据与6.1中的相同。

    6.2.1、各字段含义

    Apply to:同json处理器

    Field to check:需要匹配的字段范围,即从哪里匹配

    Body 响应体,不包括响应头;最常用

    Body (unescaped) 响应体,替换了所有HTML转义符,因为转义处理时不考虑上下文,所以不建议使用

    *Body as a Document 从不同类型的文件中提取文本;影响性能

    Names of created variables:接收提取值的变量名

    Regular Expression:正则表达式

    ( ) 里面写匹配规则,用于解析正则表达式

      .*? 表示匹配任意长度的任意字符,这也是最常用的正则表达式

    Template:从找到的匹配项中创建字符串的模板

    Match No.(0 for Random):同json提取器

    Default Value:json提取器

    Use empty default value :勾选后,提取不到值时,则返回空字符串 

    6.2.2、仅有一个返回值的情况

    正则表达式只有一个(),且匹配数字不为-1

    模板为空时,参数值返回为空

      

    模板为$0$时,返回完整的正则表达式

      

    模板为$1$时,返回正则表达式中,第一个括号里匹配到的内容

     

    模板为$2$时,返回正则表达式中,第二个括号里匹配到的内容,没有则返回null

     

     模板为$3$时,返回正则表达式中,第三个括号里匹配到的内容,没有则返回null

    6.2.3、有多个返回值的情况

    1)一个(),匹配到多个值

    一个 ( ) 匹配到多个值,且 Match No 填了 -1

     

       同理json提取器,可以使用for each依次取值,参考6.1.5

    2)多个(),匹配到多个值

    一个表达式有多个()的情况

     

      

    6.3、后置处理器 BeanShell PostProcessor

    解析并提取响应结果

     

  • 相关阅读:
    微信h5下拉隐藏网页,还有取消页面滑动
    vuejs中使用递归嵌套组件
    运行gitbook init命令报错及问题解决办法
    利用python生成gitbook目录文件
    通过Appium日志,分析其运行原理
    字符串两两更换位置
    Dockerfile启动的程序,内存不断增长问题
    测试流程优化
    APP测试面试题(一)
    关于面试总结13-app测试面试题
  • 原文地址:https://www.cnblogs.com/hushuer/p/16140653.html
Copyright © 2020-2023  润新知