Jmeter性能测试

一 性能测试的概念

1.1 概念

  1. 性能测试: 是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试压力测试都属于性能测试,两者可以结合进行。
  2. 负载测试: 通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。
  3. 压力测试: 压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。它与负载测试的主要区别在于目的不同,确定一个最大的服务级别。

1.2 常见的性能测试场景

  1. 并发性能测试: 并发性能测试的过程是一个负载测试和压力测试的过程,即逐渐增加负载,直到系统的瓶颈或者不能接收的性能点,通过综合分析交易执行指标和资源监控指标来确定系统并发性能的过程。

  2. 疲劳强度测试: 疲劳测试是采用系统稳定运行情况下能够支持的最大并发用户数,持续执行一段时间业务,通过综合分析交易执行指标和资源监控指标来确定系统处理最大工作量强度性能的过程。

  3. 大数据量测试: 大数据量测试可以分为两种类型:针对某些系统存储、传输、统计、查询等业务进行大数据量的独立数据量测试;与压力性能测试、负载性能测试、疲劳性能测试相结合的综合数据量测试方案。

  4. 速度测试: 速度测试主要是针对关键有速度要求的业务进行测速度,可以在多次测试的基础上求平均值。

二 Jmeter的概述和使用入门

2.1 Jmeter简介

jmeter是个纯java编写的开源压测工具,apache旗下的开源软件,一开始是设计为web测试的软件,由于发展迅猛,现在可以压测许多协议比如:http、https、soap、ftp、database数据库、LDAP 轻量目录访问协议、TCP、SOMP(简单邮件协议)等,由于是纯java编写,可以在苹果、window或者Linux下运行,全功能的测试IDE,允许快速的建立测试计划(从浏览器或本地应用程序,官网地址:http://jmeter.apache.org),Jmeter是一个中高级开发或者测试人员都必须掌握的一个工具。

2.2 Jmeter的下载安装

下载地址:http://jmeter.apache.org/download_jmeter.cgi

这里下载的是window版本
Jmeter性能测试_第1张图片

安装:直接解压zip文件

启动: 运行bin目录中的ApacheJMeter.jar文件(双击即可运行起来)

如果双击后提示"window无法打开此文件"的话
Jmeter性能测试_第2张图片
去下载jarfix即可:https://jarfix.en.softonic.com/
Jmeter性能测试_第3张图片
先双击运行jarfix,然后再双击运行ApacheJMeter.jar,即可正常打开jmeter
Jmeter性能测试_第4张图片

2.3 Jmeter的使用入门

2.3.1 目标

对某个功能进行压力测试,即模拟高并发

2.3.2 实现步骤

右键,添加线程组
Jmeter性能测试_第5张图片
这里模拟并发量是100
Jmeter性能测试_第6张图片
在线程组里添加取样器,发起请求
Jmeter性能测试_第7张图片
添加参数
Jmeter性能测试_第8张图片

添加监听器来查看结果
Jmeter性能测试_第9张图片
此时运行会报错415(媒体类型错误,400错误是请求参数的问题),那是因为参数是json贵,所以要添加消息头指定参数类型
在这里插入图片描述
Jmeter性能测试_第10张图片
Jmeter性能测试_第11张图片
点击运行
Jmeter性能测试_第12张图片
请求结果
Jmeter性能测试_第13张图片

清除结果树里的内容
Jmeter性能测试_第14张图片
添加聚合报告的监听器,来查看性能方面的信息
Jmeter性能测试_第15张图片
再次运行项目,查看结果
Jmeter性能测试_第16张图片
聚合报告数据分析

  1. 样本:请求总数
  2. 平均值:请求的平均时长
  3. 中位数:请求时长的中位数
  4. 90%百分位:90%的人在5156时长内收到了响应了
  5. 最小值:收到消息花费时长最短的时长
  6. 吞吐量:即qps,每秒钟发起的请求数
  7. 接收:服务器每秒钟接收的数据量
  8. 发送:服务器每秒钟发送的数据量,即响应数据量

如果jmeter测试的项目需要登录的话,则需要添加cookie和请求头
Jmeter性能测试_第17张图片

三 Jmeter实现网络爬虫

这里使用Jmeter的ForEach控制器实现网页爬虫

3.1 目标:

​ 使用Jmeter获取网络图片,并存到本地文件中

3.2 步骤

3.2.1 新建测试计划,创建线程组

Jmeter性能测试_第18张图片

3.2.2 在线程组下,新建一个Http请求取样器,访问 https://dp.pconline.com.cn//list/all_t5.html网址

目的:取到下边网址的图片和图片对应的名字存到本地

Jmeter性能测试_第19张图片
填写需要爬的网站信息
Jmeter性能测试_第20张图片

此时如果运行的话,取到的是整个页面的html,不是每张图片,这里需要查看网页信息

在图片上右键,“检查”
Jmeter性能测试_第21张图片
在Jmeter里进行设置,从上边的html响应的数据里,取出每个图片的路径和对应的名字

添加XPath后置处理器
Jmeter性能测试_第22张图片
XPath可以解析html,获取html里的标签和属性(下边的俩勾必须勾上)
Jmeter性能测试_第23张图片

  1. XPathQuery: //a/img/@src:获取html里a标签下的img下的src,即获取图片路径
  2. 引用名称:将上边获取到的内容赋值到src这个变量里

再新建一个提取器来提取图片名称
Jmeter性能测试_第24张图片
添加调试取样器
Jmeter性能测试_第25张图片
添加查看结果树的监听器
Jmeter性能测试_第26张图片
运行后查看结果
Jmeter性能测试_第27张图片

3.2.3 下载图片到本地

之前已经获取到图片和名称了,接下来就是要下载图片到本地

添加循环控制器
因为要获取多个图片,所以添加循环控制器
Jmeter性能测试_第28张图片

找到总数:
Jmeter性能测试_第29张图片
在循环控制器里,写上图片的总数
Jmeter性能测试_第30张图片
在循环控制器里添加http请求,去获取每张图片
Jmeter性能测试_第31张图片
每次请求需要将图片与自己的名字对应上,所以需要加一个计数器(记录图片循环的次数)
Jmeter性能测试_第32张图片
Jmeter性能测试_第33张图片

Jmeter函数:${__V(title_${num})}

_V:拼接字符串函数,拼接的是“title”和引用的num;

运行:获取到了想要的结果
Jmeter性能测试_第34张图片
把取到的图片存储到本地

添加请求的后置处理器,通过脚本把图片存到本地
Jmeter性能测试_第35张图片
Jmeter性能测试_第36张图片

脚本如下:

prev.setDataEncoding("UTF-8");
byte[] result = prev.getResponseData();
String fileName = "d:\\\aa\\\_${__V(title_${num})}.jpg";
File file = new File(fileName);
FileOutputStream out = new FileOutputStream(file);
out.write(result);
out.close();

切记:需要提前建立好保存目录

再次运行
Jmeter性能测试_第37张图片
打开D:\aa目录
Jmeter性能测试_第38张图片

四 使用JMeter测试数据库服务器插入数据的性能

4.1 新建测试计划

添加线程组,并且加入mysql驱动的jar包
Jmeter性能测试_第39张图片

4.2 新建线程组

插入100条数据
Jmeter性能测试_第40张图片

4.3 添加JDBC Connection Configuration配置

Jmeter性能测试_第41张图片
Jmeter性能测试_第42张图片
在线程组下添加一个计数器,记录每次执行的序号,存放到遍历num中
Jmeter性能测试_第43张图片
在线程组下添加一个JDBC Request
Jmeter性能测试_第44张图片
写上插入语句
Jmeter性能测试_第45张图片
记住如果是插入的话,此处选择update statement
Jmeter性能测试_第46张图片
不然后边会报错;

添加查看结果树,观察执行结果;或者是添加聚合报告进行分析

报错:
Response message:java.sql.SQLException: Can not issue data manipulation statements with executeQuery().

Jmeter性能测试_第47张图片
那是因为jdbc request这里需要选择update statement
Jmeter性能测试_第48张图片
最终结果:
Jmeter性能测试_第49张图片
Jmeter性能测试_第50张图片
聚合报告:
Jmeter性能测试_第51张图片

五 使用Jmeter打造百万条数据

5.1 目标

因测试需求,要打造100W条用户数据,通过用户名、手机号、密码可以新增用户,其中要求用户名和密码不能重复

5.2 步骤

5.2.1 创建测试计划,添加线程组

在线程组下添加一个循环控制器,循环100W次

Jmeter性能测试_第52张图片
Jmeter性能测试_第53张图片
这里由于个人电脑配置低,所以实际循环500次即可;

5.2.2 在循环控制器里添加一个脚本,来插入数据

Jmeter性能测试_第54张图片

脚本如下:

phone=${__Random(111111111,999999999,)};
String a =String.valueOf(phone);
phone=${__Random(3,9,)};
String b =String.valueOf(phone);
a=1+b+a;
String account="Ge"+a;
vars.put("phone",a);
vars.put("account",account);

脚本解释

# 手机号的后就为,可以是1-9之间的任意数
phone=${__Random(111111111,999999999,)};
# 
String a =String.valueOf(phone);
# 手机号的第二位可以是3-9之间的任意数
phone=${__Random(3,9,)};
String b =String.valueOf(phone);
# 手机号的第一位只能是1
a=1+b+a;
# 用户名是 GE+手机号 
String account="Ge"+a;
vars.put("phone",a);
vars.put("account",account);

添加http请求
在这里插入图片描述
后台添加用户的代码:
Jmeter性能测试_第55张图片
实体类:
Jmeter性能测试_第56张图片
所以jmeter里的request如下
Jmeter性能测试_第57张图片
添加消息头
Jmeter性能测试_第58张图片
Jmeter性能测试_第59张图片
配置完成,运行即可;

你可能感兴趣的:(笔记)