Jmeter性能测试
- 性能概念
-
- 性能测试
- 性能指标
- 负载测试
- 压力测试
- 容量测试
- 性能测试过程
- Jmeter安装
-
- 文件路径
- Jmeter写脚本
- 脚本增强
-
- 增强脚本功能
- 函数
- 属性
性能概念
性能中的100人同时登录接口avgrt应该接受多少? 1.5s APDEX用户满意度指数
**事务:**请求行为不一定只有一个接口,所以一件事可能有多个接口,增加事务控制器
Jmeter默认情况下,一个接口要求一次,任务一件事Transaction,从发起到网络传输再到收到响应,也可以通过事务控制器挂载多个接口请求合并成事务。
性能测试
通过工具模拟多用户发起请求,获取 用工具模拟多个人的方法有很多 线程:使用过程资源,Jmeter IR(默认为线程) :资源所有者,资源消耗会比较大 线程在过程下运行。
:Python Locust
性能指标
- 平均相应时间:avgrt avgRt:所有入口流量的平均响应时间
- TPS(性能测试指标):服务器每秒处理的事务数 衡量**服务器处理能力的主要指标
- 吞吐量:…网络…每秒通过的事务数 (1)无网络瓶颈:Tps数值=吞吐量值(服务器处理多少,网络处理多少) (2)网络瓶颈:Tps数值!=吞吐量数值 吞吐量是指设备在没有帧丢失的情况下能够接受的最大速率。 吞吐量单位:kbit,吞吐率:kbit/s,每秒通过多少kb数据。
- 服务器资源利用率:(1)CPU (2)内存 (3)IO利用率
- 并发用户数: (1)同时发起的请求和用户数 广义并收:同时发起(相同或不同)请求 狭义并发:同时发起同样的请求 (狭义并发 集合点:同时聚集多个人发起同样的请求)
负载测试
并发用户数量逐户数量,找出最大拐点区间。
- 有没有报错
- Tps下降
- 响应时间长(1.5s,单接口在500ms)
50Tps:服务器每秒处理50个事务
压力测试
在一定的性能压力下,根据系统服务和资源利用的稳定性,持续运行较长时间(小时为单位)。 一定数量访问量小于最大并发用户 20%或80% masThreads 关键词:较大压力 较长时间
:每秒查询率是服务器每秒响应的查询次数,是指在规定时间内处理特定查询服务器流量的衡量标准。它还代表了一种用于数据分析和报告输出的计算机编程语言。 :用户点击率为每秒,页面点击 (Jmeter里无hps)
可靠性测试:在给定的业务压力下,连续运行一段时间,检查系统是否稳定
容量测试
通过对反映软件系统应用特征的指标(如最大并发用户数、数据库记录数等)的极限值进行测试,系统在极限状态下无软件故障或保持主要功能正常运行。 容量测试还将确定测试对象能够在给定时间内连续处理的最大负载或 工作量。
测试环境:独立性能测试环境,不超过1万。
性能测试过程
- 性能测试准备
- 构建性能测试环境(服务器、服务版、数据库)(准备数据量)
- 脚本开发的性能测试
- 脚本执行性能测试
- 结果分析与调优
- 跟踪测试报告和结果
服务器硬件瓶颈>网络瓶颈>服务器瓶颈>应用瓶颈
Jmeter安装
- 不需要配置Jmeter-home环境变量 原因:如果配置电脑,只能运行一台Jmeter
- 理论上,一台计算机可以运行多个不同版本Jmeter Jmeter闪退的原因:
- 配置环境变量
- 没有安装jdk
- 包少了文件
文件路径
- Bin:启动 配置文件
- lib:jar包 工具自身jar 以及第三方jar
- docs:文档,用于Jmeter二次开发调用api
- prinatable-docs:离线帮助文档
- extras:扩展 ACD 连续集成性能测试
Jmeter写脚本
首先启动项目 打开项目接口文档 接口文档:一般开发 当您的接口要求参数韦时JSON一定要写请求头,一定要有请求。Content-Type:application / json 如果没有这样的信息,100%的错误报告是无限的Jmeter
- 请求行:请求方式,请求地址URL
- 请求头:- Content-Type - Cookie -User-Agent
- 空一行
- 请求头:参数:表单 消息体数据:json,xml
json格式:{“key”:“value”,“key”:1}
8080是端口,是Tomcat默认端口。 http协议默认端口:80 https协议默认端口:443
:
- 当请求体韦json,一定要有请求头Content-Type:application / json
- json格式有问题
- 协议:协议为http不能写;如果是,可以不写;https,必须写
- 服务器或IP:不能带有/
- 路径:不要带域名或Ip,和端口 路径开头带/路径开头带/路径开头带/路径开头带/路径开头带/路径路径开头带/路径路径开头带/路径路径开头带/路径路径开头带/路径路径路径开头带路径开头带路径开头带路径开头带路径开头带路径开头带路径开头带路径开头带路径开头带路径开头带路径开头带路径开头带路径路径开头带路径路径开头带路径路径开头带路径路径开头带路径路径开头带路径路径开头带路径路径开头带路径路径开头带路径路径开头带路径路径开头带路径路径开头带路径路径开头带路径路径路径开头带路径路径路径路径开头带路径路径路径路径开头带路径路径路径路径路径开头带路带路带路径开头带路带路带路带路径开头带路带/路径路径路径路带路径开头带路带路带路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路开路开路开路开路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路开路路开路开路开路开路开路开路开路开路开路开路开路开路开路路路路路路路路路开路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路开路开路开路开路开路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路路开路开路开路开路开路开路开路开路开路开路 没有空格,有空格请求URL % 20 urlencoded编码 URL 资源地址 URL:带domain
- 编码内容:utf-8
:
- 内容编号:utf-8请求头:charset:utf-8
- 请求值为参数类型:勾选参数编码 编码:urlenconded编码 编码需要在参数值韦(非字符汉字和特殊符号中检查 建议:建议检查参数值,无论什么类型。
: 需要修改Jmeter.properties中sampler,result,encoding 不是简单的设置utf-8,gbk,big5
使用相同的接口postman请求,响应正常,使用Jmeter请求响应。
中文乱码原因:Jmeter编码是根据操作系统编码的。
:选择消息体数据 在我们的请求接口文档中,请求体韦json然后我们选择用消息体数据来写格式json,soap=http xml
**自动重定向:**中间重定向过程不会显示,过程中不会提前显示信息。
:重定向过程可以自动显示,接口请求可以提前使用所需的信息。
使用keepAlive:保持连接,长连接。
脚本增强
:
- 协议:http、https
- 域名 IP:不能有 /
- 请求方法:查看接口文档
- 路径:不要域名和IP放一起 路径中,前后空格要看清,% 20的urlenconded编码
:
- 内容编码 utf-8
- 消息头
- 参数,勾选编码urlenconded
: 乱码原因:GUI的编码
请求体:参数 from-data application / x-www-from-urlenconded
: json、xml 一定要添加请求头:Content-Type:application / json
:
- 添加线程组
- 测试计划-》非测试元件-》http代理服务 IP是本机IP,port可以修改,默认是8888 目标控制器,一定要修改,修改为测试计划,线程组 添加过滤器
- 启动代理服务器时,就会出现一个证书的弹窗 如果抓取https信息,就必须使用证书。
- 本地浏览器使用代理服务器
脚本功能增强
:前面接口的响应信息,有动态值,作为后续接口的参数。 :用户定义变量,用户参数
- 位置:配置元件,测试计划 全局变量 作用域:作用于整个测试计划(跨线程组也可用)
- 位置:前置处理器 局部变量 作用域:作用域当前线程组或当前的取样器
:var_user:1888888 :${var_user}
Jmeter的函数方法: 1888888${_Random(1000,9999)} 字符串的连接 使用用户自定义变量,设置5循环,register+login:1次 register_success 5次 login_success
使用用户自定义变量,设置5循环,register+login:5次 register_success 0次 login_success
:一个线程组下所有的接口,全部执行完1次,才第一个迭代
用户参数:每次迭代更新一次。
函数:方法 双下划线开头 函数名称,严格区分大小写 重要的函数:
函数
用户定义变量 VS 用户参数
- 全局变量:可以跨线程组 在启动时,获取一次值,在运行中,不会动态获取值。
- 局部变量:不能直接跨线程组 在启动时,获取一次值,在运行过程中还会动态获取值。
作为功能测试、自动化测试、非性能测试时,可以把接口写一个线程组下面。在做性能测试时,可能会因为不同的需求,把接口写到不同的线程组中。
属性
属性:以properties结尾的文件,都是Jmeter的属性配置文件。
:
- 静态属性:写在properties文件中属性信息,都是静态属性。
- 动态属性:运行过程中,动态定义属性。 动态属性:在运行过程中产生的,关闭Jmeter就自动释放了。
:os.jdk===这个系统属性信息,是不可变。
顺序:
- Jmeter中,多个启用线程组,默认是并行执行,在性能测试中,我们不会勾选测试计划中独立运行每个线程组。