• 性能测试学习


    性能测试

    性能:软件质量属性中效率特性

    概念:使用自动化工具,模拟不同场景,对软件各项性能指标进行测试评估

    时间特性:系统处理用户请求的响应时间

    资源特性:CPU、内存、磁盘IO

    自动化工具

    模拟不同场景

    软件各项性能指标

    基准测试

    侠义:单个用户进行业务场景的测试,并统计性能的各项指标

    广义:在某一时刻进行性能测试建立一个已知的性能水平,当软硬件发生变化时在测试,观察变化对其性能的影响

    负载测试

    通过逐步增加系统负载,测试系统性能的变化,在满足性能指标的前提下,系统所能承受的最大负载量的测试。

    找到系统的最优负载和最大负载。最大负载一般项目组内部知晓,不会对外公布。普通用户看到的系统最大能力,一般是测试得的最优负载。

    稳定性测试

    在服务器稳定运行的情况下,进行长时间的测试,保证服务器正常运行。

    长时间:1天、一周

    JMeter

    在这里插入图片描述

    作用域的原理:

    按照jmeter测试计划的树形结构来定义作用域(类似于python的缩进)
    作用域的原则:

    • 取样器是jmeter的核心,不作用于其他组件
    • 逻辑控制器,只对子节点起作用
    • 对于其他组件:如果父节点是取样器的话,只对父节点起作用。

    jmeter第一个案例

    1. 启动jmeter
    2. 在"测试计划"下添加“线程组”
    3. 在“线程组”下添加“HTTP请求”取样器
    4. 填写“HTTP请求”的相关请求数据
    5. 在‘线程组’下添加‘查看结果树’监听器
    6. 点击‘启动’按钮运行,并查看结果

    线程组的特点

    • 模拟多人操作
    • 线程组可以添加多个,多个线程组可以并行或串行
    • 取样器(请求)和逻辑控制器必须依赖线程组才能使用
    • 线程组下可以添加其他元件下组件

    线程组分类

    普通线程组:用于发送业务请求的线程组(受并行、串行配置的影响)
    setup线程组:在所有的线程组之前执行(不受并行、串行配置的影响)
    teardown:在所有线程组之后执行(不受并行、串行配置的影响)

    线程组属性

    线程数:需要模拟的虚拟用户数
    ramp-up time:模拟的虚拟用户数全部启动所需的时间

    • 模拟性能测试的场景,更接近用户的使用习惯(用户慢慢进入系统)
      循环次数:
    • 设置为固定次数n时:配置脚步运行时发送请求的次数
    • 设置循环次数为“永远”时,脚步会一直运行下去,不停止
      调度器:
    • 一般与循环次数为“永远”配合使用
    • 持续时间设置为n时:脚步的请求发送时间为n秒

    线程数:代表并发用户数,体现服务器的负载量
    循环次数:代表执行时间

    Jmeter参数化

    用户定义的变量

    1.配置方法

    • 添加路径:测试计划—线程组–配置元件–用户定义的变量
    • 参数设置:
      参数名:参数值
      在HTTP取样器中应用:${参数名}
      2.在测试计划中配置

    某支付系统,需要用1000个不同的用户登录,并使用不同的测试金额数据访问支付接口?
    答:1. 定义CSV数据文件,存放1000个不同的用户账号密码
    2.定义线程组,将线程组的线程数设置为1000
    3.添加CSV数据文件设置,读取CSV数据文件中的账号密码
    4添加HTTP请求(用户登录的请求),在请求中引用CSV数据文件设置中的用户账号、密码参数
    5添加HTTP请求(支付请求),使用counter函数作为支付金额的参数
    6添加查看结果数观察结果

    JMeter断言:通过自动化的手段对请求的响应数据进行自动校验
    响应断言(断言一定是在HTTP请求的子节点下)

    性能:重点在于分析被测系统是否能满足特定的业务需求场景(时间、资源)

    Jmeter初始化工作

    1. 创建测试用例结构
    2. 设置HTTP请求默认值
    3. 用户定义的变量
    4. 添加监听器-查看结果树
    5. 添加监听器-聚合报告

    1.取样器-HTTP请求 发送HTTP请求
    2.配置元件-HTTP请求默认值 设置HTTP请求的默认参数
    3.配置元件-用户定义的变量 定义变量,可供后面引用
    4.后置处理器-JSON提取器 提取JSON响应结果中的内容
    5.断言-响应断言
    6.断言-JSON断言 对响应结果进行断言
    7.监听器-查看结果树 用于Jmeter脚本调试时查看运行日志
    8.监听器-聚合报告 用于Jmeter性能测试时查看运行结果
    在这里插入图片描述
    1.Http信息头管理器–对请求消息的消息头进行修改
    2.使用HTTP请求默认值写入协议、域名、端口、编码格式
    3.编写脚本时,每个用例一个独立的线程组 ----改为名字、添加断言
    4.当脚本涉及登录及后续相关操作时,需要使用提取器将登录后的token信息提取出来,在后续请求中加上token信息

    1. 通过Python脚步构造10W条数据
    #导包
    import pymysql
    #创建连接
    conn = pymysql.connect(host="192.168.85.139",user="root",password="Lagou@1234",database="litemall",port=3306,charset='utf8')
    #创建游标
    cursor = conn.cursor()
    #添加用户的SQL语句
    user_sql = "INSERT INTO `litemall`.`litemall_user` (`id`, `username`, `password`, `gender`, `birthday`, `last_login_time`, `last_login_ip`, `user_level`, `nickname`, `mobile`, `avatar`, `weixin_openid`, `session_key`, `status`, `add_time`, `update_time`, `deleted`) VALUES ('{}', '{}', '$2a$10$SrnVvS/D6N0XNd4MHNjQR.W3VUfJhOdBylPC3Ika0zTvmxyiJ52AS', '0', NULL, '2020-08-14 12:00:58', '192.168.91.1', '0', 'xiaoh', '{}', 'https://yanxuan.nosdn.127.net/80841d741d7fa3073e0ae27bf487339f.jpg?imageView&quality=90&thumbnail=64x64', '', '', '0', '2020-08-12 14:14:37', '2020-08-14 12:00:58', '0');"
    #循环插入数据
    user_start = 100000
    for i in range(100000):
        user_id = user_start + i
        username = "test" + str(user_id)
        mobile = "13012" + str(user_id)
    
        print("插入第{}条数据ID为{}".format(i+1,user_id))
        sql = user_sql.format(user_id,username,mobile)
        cursor.execute(sql)
    
        conn.commit()
    #关闭游标
    cursor.close()
    #关闭连接
    conn.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    1. 修改对应的Jmeter脚本,将登录时的密码进行参数化
    {"username":"test${__Random(100000,149728)}","password":"123456"}
    
    • 1
    1. 监控服务器的资源配置
      将ServerAgent压缩包上传到待监控的服务器
      对ServerAgent进行解压缩,并赋权限
      运行代理监控程序: ./startAgent.sh
      在Jmeter中添加监听器,并配置
      在这里插入图片描述
  • 相关阅读:
    MQ篇---第三篇
    Java之Map集合的详细解析
    爆肝了! 阿里最新版的这份 Spring Security 源码手册, 狂揽 GitHub 榜首
    为啥就业这么难——聊聊我在培训机构的所见所闻
    基于STM32的森林火灾监控系统设计
    NET 6 实现滑动验证码(三)、接口
    杂记---windows11功耗问题
    前端研习录(16)——JavaScript引入、注释及输出方式讲解及示例说明
    c++枚举
    uniapp 悬浮球
  • 原文地址:https://blog.csdn.net/ganeshys2017/article/details/127228504