性能测试学习

性能测试

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

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

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

资源特性: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. 修改对应的Jmeter脚本,将登录时的密码进行参数化
{"username":"test${__Random(100000,149728)}","password":"123456"}
  1. 监控服务器的资源配置
    将ServerAgent压缩包上传到待监控的服务器
    对ServerAgent进行解压缩,并赋权限
    运行代理监控程序: ./startAgent.sh
    在Jmeter中添加监听器,并配置
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值