• Jmeter之断言


    在调试生成的JMeter脚本时,可以通过使用断言的方式验证接口的返回信息是否正确,断言可以创建在任何目录下(包括测试计划、线程组、取样器),添加路径为:右键单击左侧某个菜单 - '添加' - '断言',如下图所示:

    常用的断言有响应断言、JSON断言、大小断言、断言持续时间。

    响应断言

    用于检查任何形式的响应信息是否符合预期

    1. 右键单击取样器,添加'响应断言'

    2. 选中响应断言,在右侧窗口中可以修改响应断言的名称

    3. 在右侧窗口的'测试字段'中选择'响应文本',在'模式匹配规则'中选择字符串,点击'添加'按钮,在测试模式窗口中输入要检查的内容,比如'百度一下,你就知道',这样就会自动检查返回的响应体中是否包含这个字符串 

    • 响应代码(Response Code):校验响应返回的状态码,比如'200'
    • 响应信息(Response Message):校验响应代码对应的响应信息,比如'OK'
    • 响应头(Response Header):校验整个响应头的内容
    • 请求头(Request Header):校验整个请求头的内容
    • 请求数据(Request Data):校验整个请求体的数据

    Contains:返回结果包括指定的内容,支持正则表达式  

    Matches:返回结果完全等于指定的内容,支持正则表达式

    Equals:返回结果完全等于指定的内容,不支持正则表达式

    Substring:返回结果包括指定的内容,不支持正则表达式

    Not:比如希望返回结果中不包含'百度一下'这几个字

    Or:右侧窗口中,可以通过点击'添加'按钮多次新增多个校验规则,默认多个规则之间是'与'的关系,即需要同时满足这些条件。

    JSON断言

     返回的结果是JSON格式的数据,可以使用'JSON断言'进行校验。比如这个连接https://www.atstudy.com/api/consume/Lecturer/10021

    1. 右键单击取样器,添加'JSON断言'

    2. 在'Assert JSON Path exists'栏中填写JSON path路径,比如'$.nickName',勾选'Additionally assert value'选项,在'Expected Value'栏中填写期望值

    3. 执行请求,这时JMeter会检查在响应的JSON字符串的根节点下的nickName节点的值是否等于'肖老师',如果验证通过,则结果树中显示正常结果,不显示断言相关信息,如下图所示 

    JsonPath语法

    JSON断言之所以能够读取JSON字符串中的特定信息,是因为使用了一种叫做 JsonPath的语言。JsonPath将JSON字符串当成一棵树,通过一些语法规则遍历树中的节点,常用的语法规则如下:

    JsonPath描述
    $表示根节点
    @当前节点
    .表示层级关系
    []表示数据的下标
    *表示所有节点
    ..表示所有符合条件的节点
    ?()表示过滤操作
    1. {
    2. "id": 10021,
    3. "nickName": "肖老师",
    4. "avatar": "//cdn.atstudy.com/user/769b40a50d544d0988ba9f11a842c9a3.JPG",
    5. "title": "测试讲师",
    6. "introduction": "<p><span style=\"font-size:14px\">拥有13年软件测试从业经验,及软件测试培训经验,对大型软件系统有深厚的测试实践及管理经验。熟悉各种测试工具和测试理论,对性能测试和配置管理有深刻的认识。</span></p>
    7. ",
    8. "projectExpr": null,
    9. "trainingExpr": null,
    10. "courses": [
    11. {
    12. "id": 1000009,
    13. "courseSetId": 4,
    14. "title": "性能测试与LoadRunner基础培训",
    15. "icon": "//cdn.atstudy.com/course/16000754590278060.png",
    16. "mode": 1,
    17. "chargeMode": 2,
    18. "price": "1580.00",
    19. "sales": 1510,
    20. "promotionPrice": null,
    21. "tags": [ ],
    22. "liveStartTime": 0,
    23. "isLive": false
    24. },
    25. {
    26. "id": 1000010,
    27. "courseSetId": 4,
    28. "title": "性能测试与LoadRunner基础培训",
    29. "icon": "//cdn.atstudy.com/course/16000754590278060.png",
    30. "mode": 1,
    31. "chargeMode": 1,
    32. "price": "0.00",
    33. "sales": 1510,
    34. "promotionPrice": null,
    35. "tags": [ ],
    36. "liveStartTime": 0,
    37. "isLive": false
    38. }
    39. ]
    40. }
    JsonPath表达式含义结果
    $.title获取根节点下title节点的值[
    "测试讲师"
    ]
    $.courses[1]获取根节点下courses节点的列表中第二项内容[
    {
    "id": 1000010,
    "courseSetId": 4,
    "title": "性能测试与LoadRunner基础培训",
    "icon": "//cdn.atstudy.com/course/16000754590278060.png",
    "mode": 1,
    "chargeMode": 1,
    "price": "0.00",
    "sales": 1510,
    "promotionPrice": null,
    "tags": [],
    "liveStartTime": 0,
    "isLive": false
    }
    ]
    $.courses.*获取根节点下courses节点的所有内容[
    {
    "id": 1000009,
    "courseSetId": 4,
    "title": "性能测试与LoadRunner基础培训",
    "icon": "//cdn.atstudy.com/course/16000754590278060.png",
    "mode": 1,
    "chargeMode": 2,
    "price": "1580.00",
    "sales": 1510,
    "promotionPrice": null,
    "tags": [],
    "liveStartTime": 0,
    "isLive": false
    },
    {
    "id": 1000010,
    "courseSetId": 4,
    "title": "性能测试与LoadRunner基础培训",
    "icon": "//cdn.atstudy.com/course/16000754590278060.png",
    "mode": 1,
    "chargeMode": 1,
    "price": "0.00",
    "sales": 1510,
    "promotionPrice": null,
    "tags": [],
    "liveStartTime": 0,
    "isLive": false
    }
    ]
    $.courses..id获取根节点下courses节点下所有id的值[
    1000009,
    1000010
    ]
    $..id获取根节点下所有id的值[
    10021,
    1000009,
    1000010
    ]
    $.courses[?(@.price>500)]获取获取根节点下courses节点的列表中,满足price大于500的项的内容[
    {
    "id": 1000009,
    "courseSetId": 4,
    "title": "性能测试与LoadRunner基础培训",
    "icon": "//cdn.atstudy.com/course/16000754590278060.png",
    "mode": 1,
    "chargeMode": 2,
    "price": "1580.00",
    "sales": 1510,
    "promotionPrice": null,
    "tags": [],
    "liveStartTime": 0,
    "isLive": false
    }
    ]

    大小断言

    判断响应内容的大小(字节为单位)

    1. 右键单击取样器,添加'大小断言'

    2. 选中大小断言,在右侧窗口中可以修改大小断言的名称,如下图所示:

    3. 在右侧窗口的'响应字段大小'中选择'完整响应',在'Size to Assert'中输入预期的字节大小,并选择对应的比较类型,如下图所示: 

    • 响应字段大小

      响应字段大小允许用户选择校验的目标,包括:

      • 完整响应:即所有响应内容
      • 响应头:响应头的内容
      • 响应的消息体:即响应体的内容
      • 响应代码:响应的状态码,如'200'
      • 响应信息:响应状态码的信息,如'OK'

     断言持续时间

    判断规定时间内是否收到响应数据,如果超时即校验失败,实际响应时间可查看结果树中的loadtime

    1. 右键单击取样器,添加'断言持续时间'

    2. 选中断言持续时间,在右侧窗口中可以修改断言持续时间的名称,如下图所示:

    3. 在右侧窗口的'断言持续时间'栏中输入持续时间(单位是毫秒),如下图所示:

     

     

     

  • 相关阅读:
    黑马程序员-软件测试基础班-02-30-45工具代开浏览器运行代码,音、视频、测试点,音视频标签,布局标签。超链接语法进阶,绝对路径,相对路径
    Java题目集-Chapter 10 Object-Oriented Thinking
    搭建源码调试环境—RocketMQ源码分析(一)
    【高阶产品策略】设计有效的AB测试
    c++ template traits
    M2 MacBookAir售价是多少 M2 MacBookAir配置如何
    阿里云 window下 nginx 安装https证书的配置。
    PHP7的新特性
    记录一个切换视频横竖屏导致tableView刷新的问题
    国内在线协作工具有哪些?
  • 原文地址:https://blog.csdn.net/weixin_44007111/article/details/125436938