• 性能测试-学习笔记


    一、性能测试基础

    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性能分析与性能测试流程

     

    (未完,待更新细节)

     

  • 相关阅读:
    Git命令与使用
    Android与WebView的JS交互
    Android 中关于硬件加速的使用和问题
    Activity-生命周期和启动模式
    Activity-恢复与保存状态或数据
    Android中Paint的一些使用心得记录
    Java中sleep,wait的区别
    C#基本类型
    LeetCode74 搜索二维矩阵
    leetcode 43 字符串相乘 java
  • 原文地址:https://www.cnblogs.com/panpanda/p/14142972.html
Copyright © 2020-2023  润新知