软件测试——性能测试

目录

一、性能测试简介

二、性能测试指标 

三、性能测试的流程 

四、Jmeter简介

五、Jmeter常见测试框架

六、Jmeter录制脚本 

七、脚本增强 

八、Jmeter脚本参数化 

九、断言 

十、关联 

十一、JDBC请求 

十二、分布式测试 

十三、性能测试报告


一、性能测试简介

性能测试:通过性能测试工具(Jmeter,Loadrunner),通过特定方式对系统施加一定压力(正常场景、异常负载以及峰值条件来实施压力,得到各项性能指标来保证系统的性能需求)。

性能测试原理:基于协议,用工具模拟实际操作(发送多个请求),并且收集数据生成报告。

性能测试的目的:

  • 评估系统的能力;
  • 识别系统的弱点(瓶颈);
  • 检查系统的隐藏问题;
  • 保证系统的稳定性和可靠性;
  • 在保证用户体验感的同时节省资源;

性能测试一般在功能测试的中后期进行,性能测试是依赖于功能测试的。

性能测试一般要有独立的测试环境,并且测试环境要进行用户数据初始化。

前期的网络测试能在局域网中进行,网络影响小。

二、性能测试指标 

  • 响应时间:指的是从客户端发送请求开始到收到服务的响应且看到响应内容为止的时间段,响应时间=网络传输时间+服务器处理时间+浏览器解析呈现时间;
  • 用户数:在线数:在软件上不一定操作,并发数:在软件上且在操作(特定时间或时段);
  • 资源利用率:常见资源有CPU、内存、磁盘、网络带宽;
  • 吞吐量:处理数据总量;
  • 吞吐率:单位时间内处理的数据量;
  • 点击量:点击的数量;
  • 点击率:单位时间内点击的次数;

软件的性能是否达标是依据用户的性能需求。

三、性能测试的流程 

  1. 分析用户的性能需求,确定性能指标;
  2. 制定性能测试方案,设计性能测试的场景;
  3. 根据性能测试场景准备脚本,调试脚本,优化脚本,确保脚本能够保证性能测试的需求;
  4. 执行测试脚本;
  5. 收集性能测试指标数据,与需求进行比对,性能调优,回归测试;
  6. 生成测试报告。

四、Jmeter简介

Jmeter是基于Java语言开发的开源测试工具:轻量级测试工具(与LoadRunner比较);

常用场景

  • 压力测试:常用于web系统,可以录制教本、参数化、断言、关联以及操作数据库
  • 接口测试:http脚本(get,post),加cookie,加header、加权限认证以及上传文件等

支持多种协议(web协议、webService、通过JDBC连接数据库、FTP等)。

Jmeter的特性优点

  • 免费的开源软件;
  • 简单且直观的图形用户界面;
  • Jmeter中负载和性能测试许多不同的服务器类型(HTTP、HTTPS,SOAP等)
  • 独立于平台的工具;
  • 拥有完整的Swing和轻量级组件支持;
  • 拥有完整的多线程框架;
  • 高度可拓展;
  • 用于执行应用程序的自动化测试和功能测试。

Jmeter的组成部分

  • 负载发生器:用于产生负载(发送请求),多进程(线程)模拟用户行为;
  • 用户运行器:脚本运行的引擎,附加在进程或线程之上的;
  • 资源生成器:生成测试过程中服务器的资源数据(收集测试数据);
  • 报表生成器:根据测试中获取的数据生成报表,提供可视化的数据显示方式;

Jmeter常见概念:

  • 测试计划:描述一个性能测试包含本次测试的所有相关功能;
  • 线程组:一般一个线程组可看作一个虚拟用户组,其中每个线程为一个虚拟用户;
  • 取样器:测试对象以及测试内容,是基于线程的,Jmeter支持多种取样(Jmeter支持多种协议);
  • 监听器:对测试结果进行处理和可视化展示的一系列组件,常见的有图形结果、查看结果树,聚合报告、表格结果等;
  • 控制器:驱动处理一个测试,有逻辑控制器和取样控制器;
  • 配置元件:用于提供对静态数据配置的支持;
  • 定时器:用于在操作之间设置等待时间;
  • QPS:每秒请求数(防止恶意刷取,增加项目负载)
  • 断言:用于检查测试中得到的响应数据是否符合预期;
  • 前置处理器:用于在实际请求发出之前对即将发出的请求进行特殊处理;
  • 后置处理器:用于对Sampler发出请求后得到的服务器响应进行处理,一般用于提取响应中的特定数据。

五、Jmeter常见测试框架

测试计划:只要启动Jmeter就会默认生成一个测试计划,这个计划包含了本次测试的相关功能。

线程(用户):线程组:主线程组,核心,需要进行性能测试的内容(不可省略);

                        setup 线程组:初始化的内容(可省略),若存在则最先运行;

                        teardown线程组:收尾的内容(可省略);

线程属性

  • 线程数(用户数)
  • Ramp-up: 虚拟用户启动时间,用户开始发请求的时间;
  • 循环次数:具体的次数,或者永远(必须加调度器有持续时间,否则无法结束),当同时设置了次数并且添加调度器时间,以设置次数为准。

取样器:测试对象及测试内容,基于线程的,即要模拟的动作

              常用http请求:协议、服务器IP、端口号、方法、url地址、编码方式

监听器:用来查看测试结果,图形化显示,常用的有查看结果树(同时查看请求和响应信息,绿色表示测试地址通常,不代表测试case成功,红色代表异常)、聚合报告(汇总请求发送情况)、图形结果(图形化展示)、表格形式展示(可以查看启动时间)。

Jmeter支持多个请求同时发送,支持多协议、多请求同时并发。

在聚合报告中,时间是以ms为单位的;

在汇总报告中,标准偏差体现稳定性的,表示离散程度,越小约好。

六、Jmeter录制脚本 

1、http代理服务器设置(在Jmeter中完成);

添加http代理服务器(脚本记录器),再添加线程组,将目标控制器选为如图所示,端口默认是8888:

2、浏览器的设置;

在internet选项的连接中将局域网设置为如下:

在Jmeter的脚本记录器中启动,之后在浏览器中进行相关操作,就会录制:

七、脚本增强 

tps:每秒事务处理量(每秒处理的消息数),表达系统处理能力的性能指标;

集合点:一般用来测试瞬间的并发能力;

思考时间:一般是用来模拟用户的真实行为(用户在页面的停留时间),让每个用户的操作有一定差异,有了思考时间会减少服务器堆积的情景时间;

事务通过控制器来体现。

在Jmeter中通过定时器来实现集合点和思考时间。

集合点使用同步定时器,能够实现真正的并发(先到的线程在集合点等后到的,等到期了就一起走),适用场景:秒杀、限购、抢票等

注意:设置集合的模拟虚拟用户数不能大于线程数,否则会一直等待。

集合虚拟用户数小于线程组中的用户数,表示分批次集合,最后一批有可能不够集合的数目,必须要设置等待时间。

集合虚拟用户数等于线程组中的用户数,表示所有虚拟用户必须全部到达集合点,才一起开始下一个动作。如果模拟用户数量设置为0表示全部用户都参与集合。超时时间设置为0,当最后一批无法达到集合数量时将一直等待,等待到系统的最大值才释放。

对于思考时间常用的是固定计时器和高斯随机定时器;

固定计时器:固定停留(间隔),上下请求发出的时间间隔是固定的;

高斯随即定时器:随机停留(间隔),每个虚拟在请求前都是按照随机事件间隔停留。

注意:在设置定时器时,固定偏移量和随机偏移量不要同时设置,否则以固定偏移量为准。

八、Jmeter脚本参数化 

参数化的作用:让数据变得不一样,模拟每个线程(虚拟用户)的数据不一样,就进行参数化。

参数化实现的步骤:

  1. 判断哪些参数需要实现参数化;
  2. 设置参数:新建变量(定义名称),准备参数的值;
  3. 用参数代替需要参数化的数据(替换形式:${xx});

用户定义的变量:自定义变量,适用于ip或者欢迎词等只有一个参数值的数据,但是这个值可以变化;

配置原件 -> 用户定义的变量。

前置处理器中的用户参数:在请求发出之前,对请求的参数进行处理;

迭代:需要执行验证的操作再执行一次。

线程数表示使用的用户数;

特点:指定了用户和参数的关系,适用于数量比较少的参数化操作,用户和参数有特定关系。

配置原件中的CSV数据文件设置:必须先准备好参数文件是.csv文件格式或者.bat文件格式。

使用范围:大批量用户参数,并且参数值有一定规律(利用excel表格来准备参数文件)。

当设置的用户参数数量少于虚拟用户数时,就会循环重复使用参数。

将excel表格转换为dat格式时,先保存为txt文本格式,再保存为dat格式,并且在bat文件中键和值之间用拥吻逗号分隔。

Tools中的函数助手:使用其中的CSVRead函数。

前提:准备好csv参数文件,注意不要加列表名(参数标题)。

设置csv文件的读取列号从0开始。

作用域和执行顺序: 

作用范围:处于不同的级别,受控范围和可控制的范围是不一样的,特别是定时器。

当一个定时器只应用于一个请求中,就将定时器作为请求的子节点加入;

当一个定时器同时应用于多个请求时,就将请求跟定时器放在同一个级别。

在Jmeter中,即使集合点放在请求子节点中仍可以实现同步。

在同一个作用域下,执行的顺序如下:

配置原件 -> 前置处理器 -> 定时器 -> 取样器 -> 后置处理器 -> 断言 -> 监听器

九、断言 

作用:用于就检查测试中得到的响应数据是否符合预期,用于保证性能测试过程中的数据交互与预期一致,主要用于做调试,在进行压力测试时,断言可以禁用。

目的:在request的返回层面加一层判断机制。

实现过程

  1. 在请求下添加断言(一个请求可以添加多个断言),请求不同,添加的断言不同;
  2. 添加一个断言结果的监听器,通过断言结果可以看到是否通过断言,若通过,断言结果会打印一次请求的名称,一个请求的所有断言都通过了才算请求成功。

Jmeter中的断言和LoadRunner中的检查点是一致的。

常用断言:

响应断言:判断返回的内容是否满足预期;

作用对象:响应报文中的所有对象(响应代码、响应文本、url等等)

在响应断言下添加断言结果:

大小断言(size断言):用来判断返回内容的大小;

作用对象:返回信息,响应报文,添加size断言,必须指定大小和长度

断言持续时间:判断服务器的响应时间是否达到预期;

作用对象:服务器;

BeanShell断言:与Java语言相结合的断言,用于验证脚本。

十、关联 

在测试过程中需要引用前面的数据,但是数据是经常发生变化的,那么要获取使用这些数据,就需要使用关联。

例如:第二个请求需要第一个请求返回数据的结果作为自己的输入数据,此时就需要使用关联将这两个数据对接起来。

具体实现步骤:在第一个请求之后添加后置处理器;

后置处理器的作用:在请求结束之后,处理响应结果的特定数据,提取需要的数据。

在关联的过程中,会通常使用到正则表达式提取器。

对于Jmeter的参数说明:

引用名称:下一个请求要引用的参数名称,比如填写name时,就需要用${name}进行引用;

正则表达式:

  • ():括起来的部分表示要提取的;
  • . :匹配任何字符串;
  • +:一次或多次;
  • ?:在找到第一个匹配项后停止;

模板:用$$引用起来,如果正则表达式中有多个正则表达式,则可以是$2$$3$等等,

匹配数字:0代表随机取值,1代表全部取值,通常情况下使用0;

缺省值:如果参数没有取到值,就要给赋给默认值。

常用的正则表达式操作符:

后置处理器中的正则表达式:

十一、JDBC请求 

使用Jmeter通过jdbc请求来操作数据库。

准备工作:准备数据库环境(创建表、准备数据)

实现步骤:

1、添加jar包

  • 直接将jar包复制到jmeter的lib目录(mysql推荐使用)
  • 通过Test Plan浏览加载(oracle推荐使用)

2、建立连接信息:在测试计划中,点击添加配置原件 -> JDBC Connection Configuration

3、添加JDBC请求

使用结果树查看响应结果:

十二、分布式测试 

使用场景:在使用Jmeter进行性能测试时,对于高频大并发的数据单台电脑可能难以支持就需要进行分布式压测,即对客户端的压力进行分摊,也叫负载均衡。

原理

  1. 在使用Jmeter进行测试时,选择其中一台作为主控调度机,其余作为执行机;
  2. 执行时,主控机器会把每个脚本发送到每台执行机器上,执行机器拿到脚本就开始执行,执行机器不需要启动GUI界面;
  3. 执行结束后,执行机器会把结果回传给主机,主机收集所有的执行机器的测试数据进行汇总;

主控机器:生成脚本,调试脚本,汇总数据;

执行机器:运行脚本,回传数据给主控数据;

具体实现步骤

1、执行机器的设置

  • 在执行机上安装JDK和Jmeter(执行机和主控机的版本必须保持一致);
  • 添加环境变量;
  • 在启动bin目录下的:jmeter-server.bat;

易出现问题:提示无法启动,请按任意键/文件找不到

解决方案:进入apache-jmeter-5.2\bin\jmeter.properties文件,将server.rmi.ssl.disable设置为true,重新启动jmeter-server.bat,查看命令行窗口显示则表示启动成功。

2、主控机器设置:

  • 准备测试脚本;
  • 修改属性配置文件:jmeter.properties 文件,修改IP和端口号,在文件中查找remote_hosts,原默认信息是127.0.0.1表示本机,修改host信息:执行机器IP:端口号,执行机器2号IP:端口号,默认端口号是1099,执行时,确保1099未被占用(端口号可以进行自定义)
  • 重新启动jmeter.bat;
  • 在jmeter中点击运行,再点击远程启动,即可开启分布式测试。

十三、性能测试报告

测试报告的大纲:目的、项目简介、测试过程、测试结果以及项目总结。

性能测试报告的内容:概述、测试环境、测试目标(性能指标)、测试方法、测试数据分析、测试结论。

注意:在测试数据分析的过程中,必须按照不同的测试场景进行描述。

利用Jmeter生成html的测试报告:

方法一:

选择添加监听器中的聚合报告,将聚合报告输出到指定的csv文件,在jmeter的工具中选择Generate HTML report;

html报告展示:

方法二:在命令行窗口输入命令来实现:

操作命令:jmeter -n -t 脚本的绝对路径.jmx -l 测试报告的文件名称.csv -e -o html报告的目录路径。

注意:报告的目录文件必须为空目录,测试报告文件也不能有数据,必须是空文件或者是不存在的文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/712742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode】一周中的第几天+ 一年中的第几天

2023-12-30 文章目录 一周中的第几天方法一:模拟思路步骤 方法二:调用库函数方法三:调用库函数 [1154. 一年中的第几天](https://leetcode.cn/problems/day-of-the-year/)方法一:直接计算思路: 方法二:调用…

【计算机考研】学硕还是专硕?

这里面没有什么更好的选择,大家都知道专硕录取人数多,学硕录取人数上,博弈一直存在 单就考研的难度上来说,专硕的难度确实要比学说低很多的,同样的专业课的情况下,专硕的考研数学考的是数学二和英语二&…

rk3568 gamc0 控制器寄存器配置不了导致连接不上phy

系统启动 GMAC 的驱动开机 log 上出现打印:No PHY found 或者 Cannot attach to PHY。查阅rk 官方gmac 配置指导手册出现改问题的原因可能如下: 但反复检查硬件和软件发现都没问题。看内核启动日志发现gamc0 在启动过程中读取gmac0 的版本id是读取不到&a…

表格自定义音频播放组件

1.在使用的地方调用 <Audiosvue ref"audio" class"audio-box" :audioFile"item.cont"></Audiosvue> 2.引入组件 import Audiosvue from "/components/audio"; 3.组件 <template><div><div style"d…

优化Vue项目中 WebStorm:2023.3 对 CSS 和 HTML 的默认注释

前言 WebStorm是一种基于JetBrains IntelliJ平台的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于Web开发。它支持JavaScript、HTML和CSS等语言&#xff0c;并提供了丰富的功能和工具&#xff0c;以提高开发人员的效率。但是&#xff0c;在开发Vue项目中发现&a…

(科目三)计算机操作系统

1、操作系统的基本概念及功能 1.1概念 一、操作系统的概念 操作系统是运行在裸机之上的&#xff0c;控制和管理计算机硬件和软件资源、合理组织计算机工作流程一级方便用户操作的程序集合。 操作系统由一套分层次的控制程序组成&#xff0c;是计算机硬件的一级扩充是软件系…

【爬虫逆向实战 逆向滑块 Python+Node】今天逆向的网站有点嘿嘿,还是仅供学习,别瞎搞

逆向日期&#xff1a;2024.03.01 使用工具&#xff1a;Node.js、Python 加密方法&#xff1a;AES标准算法 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算…

实现unity场景切换

本文实现两个按键实现场景1和场景2之间的切换 ①首先在unity 3D中创建两个场景&#xff0c;分别为Scene1和Scene2 ②在Scene1中创建一个Button&#xff0c;修改txt内容为“To Scene2”&#xff0c;并在Buttons下创建一个空物体&#xff0c;用于挂载脚本。 脚本Trans Scene.…

操作系统x面试|进程与线程

1. 线程进程的区别 进程可以称为是资源分配的最小单元&#xff0c;而线程可以称为是处理器分配的最小单元。 资源包括内存空间。同时进程是一段代码的执行过程&#xff0c;这段代码需要多少的内存在代码确定时已经确定下来了。 处理器就是执行单元&#xff0c;一个进程可以拆解…

程序员的金三银四求职宝典

程序员的金三银四求职宝典 金三银四&#xff0c;即三月和四月&#xff0c;是程序员求职的黄金时期。在这个关键时期&#xff0c;求职者们需要做好充分的准备&#xff0c;以便在面试中脱颖而出。以下是一些建议&#xff0c;帮助程序员在金三银四期间更好地准备求职&#xff1a;…

【DAY06 软考中级备考笔记】数据结构:树

数据结构&#xff1a;树 3月1日 – 天气&#xff1a;晴 之前在B站看的视频讲的是在太过简单&#xff0c;弃了。现在换了新的视频继续&#xff0c;后续会重新看前面的视频补过来。https://www.bilibili.com/video/BV1pT4m1S7uH/ 1. 树的基本概念 需要注意的是&#xff1a; 并不是…

CentOS7使用yum安装MySQL8.0教程

CentOS7使用yum安装MySQL8.0 一、下载MySQL Yum下载仓库二、安装MySQL三、为MySQL运行提供相关的用户以及环境四、启动MySQL五、MySQL开机自启六、修改MySQL中root账户的密码 一、下载MySQL Yum下载仓库 MySQL下载地址&#xff1a;https://dev.mysql.com/downloads/ 首先进入下…

Java通过Semaphore控制同一时间只有3个线程运行

怎么控制同一时间只有3个线程运行&#xff1f; 直接上代码 import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore;public class SemaphoreThreadPoolExample {private static…

【网站项目】324企业人事信息管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

Windows下卸载JDK

操作步骤&#xff1a; 直接到windows程序卸载面板进行卸载 然后删除已配置的环境变量

深入解析Golang的encoding/ascii85库:从基础到实战

深入解析Golang的encoding/ascii85库&#xff1a;从基础到实战 引言基础知识什么是ASCII85编码&#xff1f;ASCII85编码的工作原理ASCII85编码的优点ASCII85编码的缺点 使用Golang的encoding/ascii85库引入encoding/ascii85包ASCII85编码ASCII85解码实战示例小结 进阶技巧和最佳…

用于游戏开发的顶级 PYTHON 框架

一、说明 我们试图用python开发游戏&#xff0c;一旦产生这个念头&#xff0c;就伴随这样一个问题&#xff1a;当今用于构建游戏的领先 Python 框架有哪些&#xff1f;python下&#xff0c;支持游戏开发平台有哪些优势&#xff1f;我们在这篇博文中告诉你。 二、高级游戏平台简…

驱动高级--mknod

一、起源 仅devfs&#xff0c;导致开发不方便以及一些功能难以支持&#xff1a; 热插拔 不支持一些针对所有设备的统一操作&#xff08;如电源管理&#xff09; 不能自动mknod 用户查看不了设备信息 设备信息硬编码&#xff0c;导致驱动代码通用性差&#xff0c;即没有分离…

【改进算法】【IHAOAVOA】天鹰优化算法和非洲秃鹫混合优化算法

目录 1 主要内容 IHAOAVOA流程图 主要创新点 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现《IHAOAVOA: An improved hybrid aquila optimizer and African vultures optimization algorithm for global optimization problems》&#xff0c;天鹰优化算法&am…

spring boot3解决跨域的几种方式

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途。 目录 1.前言 2.何为跨域 3.跨域问题出现特征 4.方式一&#xff1a;使用 CrossOrigin 注解 5.方式二&#xff1a;自定义…