性能测试-学习笔记

一、性能测试基础

1、性能测试导论

1⃣️ 什么是(软件)性能测试

==> 范围:不包括硬件的性能

==> 实质:通过接口层向服务器发起请求,测试服务器的性能

==> 定义:用一定的技术工具,找出或验证某些性能指标值的测试

2⃣️ 与功能/自动化测试的区别

==> 功能/自动化测试都是为了验证功能是否正常、能不能够满足需求,断言实际结果是否与预期结果一致。

==> 而性能测试是模拟n多个用户来访问服务器,在可接受的时间范围内是否有正常的响应结果,不需要这n多个用户都得到准确的结果。

3⃣️ 什么情况下需要用工具找出性能指标值

==> 某个接口从来没有做过性能测试时,需要通过工具获取性能指标值作为基准值

4⃣️ 常说的性能测试相关概念区别

广义(软件)性能测试

==> 负载测试:逐步增加并发用户数,发起请求,找到系统的拐点区间。

关键词:逐步增加

驱动:并发用户数

目的:找到服务的“天花板”

==> 压力测试:通过一定的并发用户数,持续较长时间向服务器发起请求,查看服务器的稳定性(实际上是 稳定性测试)

关键词:比较大的压力 + 比较长的时间 * 24

驱动:并发用户数(一般选取服务器可承受的最大并发用户数的40%以下)、持续请求时间(一般选取夜间 运行12h)

目的:查看服务器的稳定性

==> 压测:不等于压力测试,而是负载测试(得出性能指标区间)+性能测试(得到准确的各项性能指标值),可能还会有压力测试。

5⃣️ 性能测试的前提

==> 性能测试的必要性研究,即关键项评估(哪些是需要做性能测试的,哪些是不需要的)

==> 可测性,可以量化为性能指标值

6⃣️ 性能测试的(基本原则)

==> 先单接口,再多接口,然后多接口构成业务/模块,然后多业务混合,然后系统,最后全链路

7⃣️ 性能测试的必备条件

==> 独立的服务器:一旦出现不稳定情况/宕机时,不会影响其他工作人员的使用

==> 独立网络:性能测试时会有大量的数据请求,导致占用大量的带宽,带宽占用过多,会影响其他工作人员的工作(尽可能使用有线网络进行,无线网络不稳定)

2、性能测试的主要指标

1⃣️ 响应时间

==> 从发起请求到收到响应到时间(=网络传输时间+服务器处理时间)

==> 网络传输时间:1)客户端发起请求到服务器接收到请求的时间、 2)服务器将响应返回到客户端的时间

==> 服务器处理时间:1)服务器处理请求的时间、  2)服务器与数据库服务器交互的时间

2⃣️ 并发

==> 狭义:同一时间做相同的事情,如同时发起相同请求

==> 广义:同一时间,做不同的事情(混合场景),如同时发起不同的请求

3⃣️ 并发数

==> 单位时间内向服务器发起请求的用户数(virtual user)

4⃣️ 并发用户数

==> 用于模拟真实用户向服务器发起请求的性能测试虚拟用户数量

==> 系统用户数:只要访问过系统的用户,可能包含一次性访问的用户

==> 在线用户数:当前正在访问系统的用户,不一定有压力(可以不操作,不发起请求,发起请求时才算作并 发用户数)

5⃣️ 服务器处理能力TPS

==> 服务器每秒通过事务数,是最主要的性能指标(综合指标,体现服务器的综合能力)

6⃣️ 资源利用率

7⃣️ 网络传输情况,如吞吐量、吞吐率等

==> 衡量网络的重要指标

==> 吞吐量:事务数

==> 吞吐率:数据量

3、性能测试工具

1⃣️ Jmeter

2⃣️ lr

3⃣️ 自研+python+locust

 

二、Jmeter环境配置与脚本制作

1、脚本录制:

1⃣️ 通过代理服务器方式录制脚本:使用的是电脑自身的代理

   

2、参数的引用

1⃣️ 创建被引用参数

添加随机变量:

点击生成后,就会自动复制函数字符串,可以在定义变量的地方使用

===> 用户参数在启动时会获取一次值,此后在运行过程中每次使用该参数都会动态获取一次值。 

2⃣️ 引用创建参数

三、Jmeter脚本制作与优化

JSON提取器:用于提取响应json中字段的值

json提取式:$.节点名称   ==> 绝对路径

==> 可以在察看结果树中选择JSON Path Tester,书写表达式进行测试是否能提取到值

如果想要提取出值后存储,以防后续断言或其他地方用到,可以在该请求取样器上添加后置处理器-JSON提取器

提取单个值时: 

当提取表达式有误/未提取到值时:

提取多个值:json提取式用英文;隔开,如 $.code;$.msg  ,此时变量名也需要多个,也是用;隔开,默认值均一一对应,match No填写为0或1或0;0或1;1

match No为1;1时:

match No为0或0;0时:

match No为1时:

json提取式还可以采用相对路径的写法:$..节点名称  ,用于提取多个值,此时match No为-1

正则表达式提取器:左边界(正则表达式)右边界

提取多个时,没有特定的分割符,需要通过正则来过滤不需要匹配的字符

CSV数据文件设置:

添加:

使用:支持 txt 或 csv 格式的文件

多个变量用英文,分割   分别表示第一列,第二列…的变量

四、Jmeter场景执行与分布式

1、普通性能测试场景设置:

线程组配置项:

1⃣️ 线程数

2⃣️ Ramp-up时间

3⃣️ 是否循环:1)不勾选循环,则要设置执行次数

           2)勾选循环,则需要在调度器中配置执行时间,如果不配置则会一直执行下去,直至手动停止

4⃣️ 调度器配置:1)

 

2、负载测试场景设置:

需要安装插件Plugin Manager,然后搜索jpgc 安装

1)阶梯场景

  a、创建负载测试线程组:测试计划右键 - 添加 - jp@gc stepping thread group

  b、数据配置:

  c、创建监听器

  d、分析

2)波浪场景

  a、测试计划右键 - 添加 - jp@gc ultimate thread group

 

3、压力测试场景设置:

  

服务器监控:ServerAgent

 

启动服务:sh startagent --udp-port 0 --tcp-port 2233    建议的使用方式,去掉udp端口,更改tcp端口号

 

防火墙配置:

查看服务器状态:systemctl status firewalld 

防火墙添加开放端口:firewall-cmd --permanent --add-port=2131/tcp     firewall-cmd --reload

 

五、Jmeter分布式与持续集成

分布式配置:

前提:

jmeter一致性:

1⃣️ 分布式的机器的jmeter版本要一致

2⃣️ jdk 大版本要一致

3⃣️ 插件  要一致

4⃣️ 在同一个局域网

5⃣️ csv

===> 直接将本机的jmeter安装包、插件及性能测试脚本一起打包后放置到助攻机上

===> 如果助攻机是Linux系统,则需要修改jmeter.properties文件

==> server_port

==> server.rmi.port

==> server.rmi.ssl.disable=true

==> 启动:jmeter-server.bat -Djava.rmi.server.hostname=助攻机ip

==> 配置防火墙:systemctl stop firewalld.service

 

六、Jmeter性能分析与性能测试流程

 

(未完,待更新细节)

 

posted @ 2020-12-16 11:28  潘潘达  阅读(271)  评论(1编辑  收藏  举报