• JMeter基础



    JMeter环境搭建

    JMeter的三个重要组件

    线程组

    作用:控制JMeter用于执行测试的一组用户

    分类:

    • Setup线程组:预测试操作,所有脚本之前执行
    • 线程组:执行测试用例的
    • Teardown线程组:所有脚本之后执行

    位置:测试计划——添加——线程(用户)——线程组

    属性

    • 线程数:虚拟用户数
    • Ramp-Up时间:全部虚拟用户启动需要的时间
    • 循环次数:指定运行次数,选中“永远”后一直执行
      调度器:配合“永远”使用。

    Ps:线程数为2,循环次数为3;与线程数为3,循环次数为2的区别?

    • 线程数表示虚拟用户数,用户数越多,负载越大
    • 循环次数代表运行时间,次数越多,运行时间越长

    HTTP请求

    作用:向服务器发送http及https请求

    位置:线程组——添加——取样器——HTTP请求

    属性

    • 协议:默认为HTTP,HTTPS
    • 服务器名称或IP:IP地址
    • HTTP请求:GET或POST请求
    • 路径:URL端口后面的部分
    • 参数:get方法中URL路径中传参(/?键名=键值&键名=键值)
    • 消息体数据:POST方法中,请求体中传参数(直接在消息体数据中添加请求体,任意格式:from、json)

    查看结果树

    作用:在查看结果树中点击运行可以查看请求参数和响应结果

    位置:线程组——添加——监听器——查看结果树

    JMeter参数化

    参数化:把测试数据组织起来,用不同的测试数据调用相同的测试方法

    用户定义的变量

    场景:定义全局变量

    位置:线程组——添加——配置元件——用户定义的变量

    使用方法:

    添加用户定义的变量,格式:变量名 - 变量值
    在HTTP请求中引用定义的变量名。格式:${变量名}
    
    • 1
    • 2

    用户参数

    场景:针对同一组参数,不同用户访问时,可以获取到不同的值

    位置:线程组——添加——前置处理器——用户参数

    使用方法:

    第一列添加多个变量名,后续每一列为一组用户的数据
    在HTTP请求中引用定义的变量名。格式:${变量名}
    
    • 1
    • 2

    CSV数据文件设置

    场景:当不同用户或者同一用户多次循环时,都可以获取到不同的值

    位置:线程组——添加——配置元件——CSV数据文件设置

    使用方法:

    准备好CSV数据文件,文件名处为文件路径
    变量名称:自定义
    在HTTP请求中引用自定义的变量名。格式:${变量名}
    
    • 1
    • 2
    • 3

    函数

    场景:相当于计数函数,自动生成不重复的数据,让每个用户每次循环都能取到不同的值,且不需要提取定义

    位置:菜单栏中的工具——函数助手对话框——选择counter函数——选择计数器方式——点击生成——复制函数

    使用方法:

    在HTTP请求中使用counter函数。格式:${__counter(FALSE,)}
    
    • 1

    四种参数化方式的不同

    用户定义的变量:

    • 作用:定义全局变量
    • 局限性:每次取值(无论是否相同的用户) 都是固定值

    用户参数:

    • 作用:保证不同的用户针对同一组参数,可以取到不同的值
    • 局限性:同一个用户在多次循环时,取到相同的值

    csv数据文件设置:

    • 作用:保证不同的用户及同一用户多次循环时,都可以取到不同的值
    • 局限性:需要手动进行测试数据的设置

    函数

    • 作用:保证不同的用户及多次循时,都可以取到不同的值,不需要提前设置
    • 局限性:输入数据有特定的业务要求时无法使用(如:登录时的用户名密码)

    PS:查看结果树看到的发送消息和HTTP取样器配置不完全一样的原因?

    • 查看结果树中最外层HTTP请求的 请求信息和响应信息,应该与子节点中最后一个HTTP请求的请求信息和响应信息一致
    • 配置的HTTP请求,因该与子结点中第一个请求的请求信息一致

    利用JMeter测试的一个具体用例,找一个跟着学一下,不然真的不会,不知道在干嘛怎么用

    JMeter断言

    让程序自动判断预期结果和实际结果是否一致

    • JMeter在请求的返回层有一个自动判断机制(响应状态码)
    • 但是请求成功了,并不代表结果一定正确,需要检测机制提高测试准确性。
    • 响应断言
      • 位置:HTTP请求——断言——响应断言
      • 场景:对HTTP请求任意格式的响应结果进行断言
    • JSON断言
      • 位置:HTTP请求——断言——JSON断言
      • JSON路径: . w e a t h e r i n f o . c i t y , .weatherinfo.city, .weatherinfo.city.为根目录,.对目录进行分割
      • 场景:对HTTP请求格式为JSON格式的响应结果进行断言
    • 持续时间断言
      • 位置:HTTP请求——断言——持续时间断言
      • 作用:检查HTTP请求的响应时间是否超出要求范围

    JMeter关联

    当请求之间有依赖关系的时候需要用到关联处理。如一个请求的入参是另一个请求返回的数据。

    正则表达式

    公式格式:左边界(匹配符)右边界

    .:通配符,可以代表任意字符(换行回车除外)

    *:表示前面的字符出现0次或多次

    ?: 表示非贪婪匹配,找到左边界后,往右查找右边界,查到匹配的右边界就停止继续查找;再次查找左边界和右边界

    正则表达式提取器位置:HTTP请求——后置处理器——正则表达式提取器

    参数:

    引用名称:存放提取出的值的参数名称
    模板:用$$引用起来,表示解析出的第几个正则表达式(.*?)中的值
    匹配数字:1表示第一个值,0表示随意一个值,-1表示获取所有值
    
    • 1
    • 2
    • 3

    XPath提取器

    位置:HTTP请求-后置处理器-XPath提取器

    JSON提取器

    位置:HTTP请求-后置处理器-JSON提取器

    JMeter属性

    用于不同线程组之间的参数获取

    • setProperty函数:将值保存成JMeter属性
    • property函数:在其他线程组中使用property函数读取属性
    • 使用步骤:
      • 添加线程组1
        • 添加HTTP请求——添加JSON提取器
        • 使用setProperty函数保存JSON中的值
        • 添加BeanShell取样器,在脚本中添加JMeter属性:${__setProperty(pro_city,${city},)}
      • 添加线程组2
        • 添加HTTP请求——使用property函数读取JMeter属性:${__property(pro_city,)}

    JMeter录制脚本

    • 作用:在没有接口文档的旧项目中,快速录制web页面产生的HTTP接口请求,帮助编写接口测试脚本
    • 位置:测试计划(右键)->非测试元件->HTTP代理服务器

    JMeter直连数据库

    使用场景

    • 用作请求的参数化:登录时需要的用户名,可以从数据库中查询获取
    • 用作结果的断言:添加购物车下订单,检查接口返回的订单号,是否与数据库中生成的订单号一致
    • 清理垃圾数据:添加商品,再执行该脚本不能成功,需要在下次执行前删除该商品数据
    • 准备测试数据:通过数据库准备大量的性能测试数据

    JMeter逻辑控制器

    位置:线程组-逻辑控制器-IF控制器/循环控制器/ForEach控制器

    • IF控制器:控制它下面的测试元素是否运行
    • 循环控制器:通过设置循环次数,实现循环发送请求
    • ForEach控制器:一般和用户自定义变量或者正则表达式提取器一起使用,读取返回结果中一系列相关的变量

    JMeter定时器

    • 同步定时器:阻塞线程,当在规定时间内达到一定的线程数量,这些线程会在同一个时间点一起释放,瞬间产生很大压力。
      • 超时时间:超市多少毫秒后同时释放指定的线程数。
      • 0:表示定时器会等待线程数达到了设置的线程数才释放,若没有达到则会一直死等。
    • 常数吞吐量定时器:
      • QPS单位为:次/s,而该定时器参数是:次/m,因此需要注意时间的换算
    • 固定定时器

    定时器的作用也需要后面遇到具体的项目来做才能明白其作用

  • 相关阅读:
    MySQL的MVCC机制
    《Java面向对象程序设计》学习笔记——第 15 章 Java 多线程机制
    Cpp/Qtday070914cpp基础
    Kubernetes Replicaset
    通过token认证的方式来加速OKE集群的访问
    深入理解JNINativeInterface函数<一>
    无心剑汉英双语诗003. 《书海》
    【数据结构】数据结构基础概念
    解剖—单链表相关OJ练习题
    Flink 监控检查点 Checkpoint
  • 原文地址:https://blog.csdn.net/weixin_42227243/article/details/134496231