• Jmeter系列之接口依赖


    VOL 133

    10

    2020-06

    今天距2021年204天

    这是ITester软件测试小栈第133次推文

    点击上方蓝字“ITester软件测试小栈“关注我,每周一五早上 07:30准时推送。

    微信公众号后台回复“资源测试工具包、“简历模板领取测试资源,回复“21天打卡”一起学习成长,打怪升级。

    本文4445字,阅读约需12分钟

    上一篇:Jmeter系列之参数化,主要介绍JMeter的三种参数化方式:用户参数、CSV Data Set Config CSV函数助手。

    以下主要介绍接口依赖的三种处理方式:JSON Extractor、正则表达式边界提取器(Boundary Extractor)。

    在接口自动化中,需要将多个流程串联起来才能将程序整个流程测试通过,会出现后一个接口的请求要用到前面接口的返回值。比如调用商品列表接口请求需要先登录,这时就需要先登录后,获取登录结果中的token,商品列表接口请求时携带token即可。

    JSON Extractor

    1

    使用场景

    JSON Extractor后置处理器用在返回格式为json的HTTP请求中,用来获取返回的json中的某个值,并保存成变量供后面的请求进行调用或断言等。

    2

    Json Extractor界面说明

    HTTP请求,右键,依次选择Add--》Post-Processors--》JSON Extractor。

    创建的 JSON Extractor页面如下:

               

    • Name:json后置表达式的名称,标识作用,建议使用有意义的名字;

    • Names of created variables:保存的变量名,后面使用${Variable names}引用;

    • JSON Path  expressions:json path表达式;

    • Match No:匹配数字(0代表随机,1代表第一个,-1代表所有);

    • Compute concatenation var(suffix_ALL):是否统计所有,即将匹配到的所有值都保存,名为“变量名_ALL”,使用场景需要获取的值有多个,后面需要对这一组数据进行操作;

    • Default Values:找不到时默认值,比如设置为null。

    JsonPath语法:

    JsonPath说明
    $文档根元素
    @当前元素
    .[]匹配下级元素
    ..递归匹配所有子元素
    *通配符,匹配下级元素
    []下标运算符,根据索引获取元素,JsonPath索引从0开始
    [,]连接操作符,将多个结果拼接成数组返回,可以使用索引或别名
    [start:end:step]数据切片操作
    ?()过滤表达式

    以上的语法规范,细心的小伙伴可能会发现语法中 ..表示递归匹配所有子元素,简单粗暴,用..获取所有匹配的子元素,通过索引拿到想要的值,以下以实战进行演练。

    3

    战小例子

    创建线程组、http请求。其中http请求配置如下:

    运行结果如下:

    {
        "msg": "OK",
        "code": 0,
        "data": {
            "token_info": {
                "token_type": "Bearer",
                "expires_in": "2020-06-09 12:40:27",
                "token": "eyJhbGciOiJIUzUxMiJ9.eyJtZW1iZXJfaWQiOjExNTE1LCJleHAiOjE1OTE2Nzc2Mjd9.u8XfG1vzNmFkkNweiZ2N3hKrzZbIIiI2zb6Z44RAHw7XVrQwoFYTw4vOAL1vK4dquh62atZZoIdmYGjOI-FuRQ"
            }
        }
    }
    

    HTTP请求右键,新建JSON Extractor,配置如下:

    创建Debug Sampler及察看结果树,运行之后,在Debug Sampler查看token是否提取成功。

    正则表达式

    1

    使用场景

    从请求的响应结果中取到需要的内容,作为下一个接口的入参从而实现关联。比如登录后,用正则表达式获取token,其他接口携带token请求。

    2

    正则表达式提取器界面说明

    HTTP请求右键,依次点击添加--》后置处理器--》正则表达式提取器。

    创建的正则表达式提取器页面如下:

                 

    APPly to:

    • Main sample and sub-samples: 作用于主节点的取样器及对应子节点的取样器;

    • Main sample only:仅作用于主节点的取样器;

    • Sub-samples only: 仅作用于子节点的取样器;

    • JMeter Variable Name to use: 作用于jmeter变量(输入框内可输入jmeter的变量名称),从指定变量值中提取需要的值。

    要检查的响应字段:

    • 主体:响应报文的主体,最常用;

    • Body(unescaped):主体,是替换了所有的html转义符的响应主体内容,注意html转义符处理时不考虑上下文,因此可能有不正确的转换,不太建议使用;

    • Body as a Document:从不同类型的文件中提取文本,注意这个选项比较影响性能;

    • 信息头:响应信息头;

    • Request Headers:请求信息头;

    • URL:请求url;

    • 响应代码: 响应状态码,比如200、404等;

    • 响应信息: 响应信息。

    引用名称

    提取结果之后的变量名称,即下个请求需要引用的值,后面引用方式是${变量名}

    正则表达式

    使用正则表达式解析响应结果,()括号表示提取字符串中的部分值,前后是提取的边界内容。一般通用的正则表达式(.+?)

    如需了解更多关于正则表达式知识,可参照:Python自动化测试-正则表达式解析一文。

    模板:

    如果正则表达式有多个提取结果,则结果是数组形式。若只有一组表达式,则使用$1$,两组正则匹配使用$1$$2$,以此类推。

    匹配数字

    正则表达式匹配数据的结果可以看做一个数组:-1表示全部,0表示随机,1表示第一个,2表示第二个,依次类推。

    缺省值

    如果参数没有取到值,那默认给个值,比如null

    3

    实战小例子

    创建一个线程组。

    创建一个HTTP请求,用来发送登录请求,登录接口请求参数配置如下。

    HTTP请求,右键,创建一个正则表达式提取器,登录接口返回结果如下:

    {
        "data": {
            "mobile": "12345678",
            "id": 500,
            "rid": 0,
            "email": "adsfad@qq.com",
            "username": "admin",
            "token": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE1OTA5MDY3MzAsImV4cCI6MTU5MDk5MzEzMH0.M3CWrgsDUMvnhkprQMBJ1wWY5OKO-mKiOD4EJ2YV4zc"
        },
        "meta": {
            "msg": "登录成功",
            "status": 200
        }
    }
    

    正则表达式提取token,配置如下:

    创建一个察看结果树,运行后,接口返回如下:

    Boundary Extractor

    1

    使用场景

    边界提取器(Boundary Extractor),不需要写复杂的正则表达式,只要填写左右边界即可。

    2

    边界提取器面说明

    HTTP请求右键,依次选择Add--》Post Processors--》Boundary Extractor。

    边界提取(Boundary Extractor)界面如下:

    APPly to:

    • Main sample and sub-samples: 作用于主节点的取样器及对应子节点的取样器;

    • Main sample only:仅作用于主节点的取样器;

    • Sub-samples only: 仅作用于子节点的取样器;

    • JMeter Variable Name to use: 作用于jmeter变量(输入框内可输入jmeter的变量名称),从指定变量值中提取需要的值。

    要检查的响应字段:

    • Body:响应报文的主体,最常用;

    • Body(unescaped):主体,是替换了所有的html转义符的响应主体内容,注意html转义符处理时不考虑上下文,因此可能有不正确的转换,不太建议使用;

    • Body as a Document:从不同类型的文件中提取文本,注意这个选项比较影响性能;

    • Response Headers:响应信息头;

    • Request Headers:请求信息头;

    • URL:请求url;

    • Response Code: 响应状态码,比如200、404等;

    • Response Message: 响应信息。

    引用名称

    提取结果之后的变量名称,即下个请求需要引用的值,后面引用方式是${变量名}

    左边界

    要提取字符的左边。

    右边界

    要提取字符的右边。

    匹配数字(0代表随机)

    -1 匹配所有,0 随机,1 代表匹配第一个,以此类推,n 取匹配的第n个。

    缺省值

    如果没有取到值,那默认给个值,比如null

    3

    实战小例子

    创建http请求,配置如下:

    创建察看结果树,运行结果如下:

    {
        "msg": "OK",
        "code": 0,
        "data": {
            "token_info": {
                "token_type": "Bearer",
                "expires_in": "2020-06-09 12:40:27",
                "token": "eyJhbGciOiJIUzUxMiJ9.eyJtZW1iZXJfaWQiOjExNTE1LCJleHAiOjE1OTE2Nzc2Mjd9.u8XfG1vzNmFkkNweiZ2N3hKrzZbIIiI2zb6Z44RAHw7XVrQwoFYTw4vOAL1vK4dquh62atZZoIdmYGjOI-FuRQ"
            }
        }
    }
    

    http请求,右键,新建边界提取器(Boundary Extractor),配置如下:

    创建Debug Sampler,运行之后,查看token是否正确获取。

    今日问题:在接口自动化测试中,你用什么方式处理接口依赖? 

    (欢迎在留言区发表你的看法)

    留言福利:

    抽取截止至6月14日留言点赞最多的一位幸运er,可获得:漫画算法:小灰的算法之旅(Python篇)

    (幸运er名单将在下周一推文的置顶留言处公布)

    以上


    That‘s all

    更多系列文章

    敬请期待

    ITester软件测试小栈

    往期内容宠幸

    1.Python接口自动化-接口基础(一)


    2.Python接口自动化-接口基础(二)


    3.Python接口自动化-requests模块之get请求


    4.Python接口自动化-requests模块之post请求


    5.Python接口自动化之cookie、session应用


    6.Python接口自动化之Token详解及应用


    7.Python接口自动化之requests请求封装


    8.Python接口自动化之pymysql数据库操作


    9.Python接口自动化之logging日志


    10.Python接口自动化之logging封装及实战

    想获取更多最新干货内容

    快来星标 置顶 关注

    每周一、三、五 07:30见

    <<  滑动查看下一张图片  >>


     后台 回复"资源"取干货

    回复"21天打卡"一起打怪升级

    测试交流Q群:727998947

    点亮一下在看,你更好看

  • 相关阅读:
    TLE: poj 1011 Sticks
    UVa 116 Unidirectional TSP
    csuoj 1215 稳定排序
    UVa 103 Stacking Boxes
    UVa 147 Dollars
    UVa 111 History Grading
    怎么在ASP.NET 2.0中使用Membership
    asp.net中如何删除cookie?
    ASP.NET中的HTTP模块和处理程序[收藏]
    NET开发中的一些小技巧
  • 原文地址:https://www.cnblogs.com/ITester520/p/13203282.html
Copyright © 2020-2023  润新知