性能概念
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 关键词:较大压力+较长时间
QPS :“每秒查询率”,是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。同时也代表一种计算机编程语言,用于数据分析和报表产出。 HPS:每秒用户点击率,页面点击 (Jmeter里无hps)
可靠性测试:在给定的业务压力下,持续运行一段时间,查看系统是否稳定
容量测试
通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下没有出现任何软件故障或还能保持主要功能正常运行。 容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或 工作量。
测试用的环境:独立性能测试环境,不超过万。
性能测试流程
- 性能测试准备
- 搭建性能测试环境(服务器、服务版本、数据库)(数据量要准备好)
- 性能测试脚本开发
- 性能测试脚本执行
- 结果分析与调优
- 测试报告与结果跟练
服务器硬件瓶颈>网络瓶颈>服务器的瓶颈>应用瓶颈
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
衍生:http请求包括哪些部分?
- 请求行:请求方式,请求地址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的属性配置文件。
Jmeter工具属性:
- 静态属性:写在properties文件中属性信息,都是静态属性。
- 动态属性:运行过程中,动态定义属性。
动态属性:在运行过程中产生的,关闭Jmeter就自动释放了。
系统属性:os.jdk===这个系统属性信息,是不可变。
顺序:
- Jmeter中,多个启用线程组,默认是并行执行,在性能测试中,我们不会勾选测试计划中独立运行每个线程组。
|