Jmeter

Stella981
• 阅读 774

性能测试最关键的一个方面是能够模拟应用程序的实际负载。但是,确定目标负载的并发用户数是不够的。在测试阶段使用的相同目标负载下,经过测试的应用程序可能会失败。或者当问题是系统中的瓶颈时,应用程序可能会在测试负载下失败。发生这些事情是因为除了目标负载之外,开发人员和性能测试人员还应该关心在测试执行期间如何分配负载也就是模拟各种负载压力场景。

JMeter的Ramping-Up

虽然有很多JMeter的参数负责负载分配(比如Number of threads'线程数',Loop Count'循环次数'或Duration'持续时间'),但其中一个参数可能不是那么容易理解,并且它的适当值参数可能并不总是很明显。 此参数称为ramp-up斜坡上升。

Ramp-up是JMeter将所有users (threads)"测试用户(线程)"添加到测试执行所需的时间。 或者换句话说, JMeter开始执行所有线程需要多长时间。

例如:

  • 1000个目标线程,加速1000秒:JMeter将每秒添加一个用户
  • 1000个目标线程,持续100秒:JMeter每秒将增加10个用户
  • 1000个目标线程,50秒加速:JMeter每秒将增加20个用户

在本文中,我们将重点介绍如何应用JMeter的Rame-up斜坡上升来模拟我们应用程序的不同负载情况也就是类似Loadrunner中的压测场景配置。

配置JMeter压测场景

我们将测试某一web网站。 我们将应用具有相同目标线程值的各种负载,但具有不同的上升周期组合。

1.创建一个具有目标线程数的线程组(假设为100)。
右键单击 - >添加 - >线程 - >线程组
将线程数的值更改为100.现在让我们假设您要运行我们的测试5分钟。 因此,您需要在Duration“持续时间”字段中指定值300。 现在,让我们将线程组中的“Ramp-Up Period”字段保持为空。

2.添加一个访问Web主页的HTTP Request Sampler "Http请求采样器"。 
右键单击Thread Group - > Add-> Sampler - > HTTP Request
我将其名称更改为“BlazeDemo home page”。 添加“blazedemo.com”作为服务器名称,并确保将该方法设置为GET。

3.查看包含用户分布的图表。 
这样的图表可以帮助我们可视化负载模式并检查我们要测试的内容。 JMeter不提供开箱即用的这些选项,但您可以轻松安装“自定义插件包”,其中包含许多有用的侦听器(可通过Jmeter-GraphsGeneratorListener此链接找到安装说明)。 其中一个插件被称为"Active Threads Over Time"。 添加该侦听器:
添加 - >监听器 - > jp@gc - Active Threads Over Time

请记住 ,如果您有大量目标线程,则加速期不应为0。 Ramp-up 0意味着性能脚本将在测试执行开始时立即添加所有线程,因此它会立即给您的应用程序带来非常严重的负载。

当然,有时您可能希望模拟此类负载,例如在Spike performane test "峰值测试"期间,但这是一个单独的案例,具有单独的最佳实践方法(在下面介绍)。 但即使使用峰值测试,我们通常也不希望所有用户都在测试的第一秒立即执行。

这种情况看起来并不符合实际情况,通常这种负载加压没有任何意义。 如果您有一个Web应用程序,用户通常会或多或少地逐渐访问您的站点,并且您的服务器有足够的时间进行适当的调整和扩展。

加速分配应根据您的需求而定。 因此,首先需要做的是了解您的测试目标。 最好的方法是从生产环境中学习并找出当前网站的负载模式。 但与此同时,在许多情况下,它足以创建一个线性加速,显示用户逐渐进入您的网站或应用程序。

创建线性负载加速

1.返回线程组并将Ramp-Up周期更改为120。

因为测试持续时间是300秒,所以在2分钟内加速,我们有3分钟的保持时间。 重要的是,在加速结束并且所有用户都启动并运行之后,有足够的保持时间。 保持时间确认系统可以处理负载并且性能保持稳定且不会恶化。

在这个测试中,我们确定了3分钟的保持时间,但在您的情况下,所有这些值都将基于您的特定需求和您要模拟的场景。

2.运行测试,查看活动用户数量如何逐渐增长2分钟。

这种负载称为Linear“线性”。 这种方法适用于主要关注目标负载的许多用户。 但是,这种方法不是最佳实践。 为什么? 因为如果服务器在线性加速期间在某个负载下表现不佳,通常很难隔离并确定哪个负载。 我们不清楚我们的服务器可以处理哪些负载以及哪些负载不能处理。

这就是为什么按步骤执行加载要好得多。 所以让我们将测试持续时间分成几个阶段。

创建步进负载加速

我们仍然想测试100个用户,但我们会逐步逐步提升他们。 我们将从25个持有一段时间负载的用户开始,看看服务器如何处理它。 之后我们将增加25个到50个,另外25个到75个,最后25个到100个用户。 这种方法效果更好,更可靠。

不幸的是,JMeter不支持开箱即用的步进加载步骤。 但是您可以轻松安装名为Ultimate Thread Group终极线程组的相应插件。 此插件为您提供了非常强大的控制线程组加压负载能力和灵活性,可以为您的测试应用程序模拟各种负载场景。

  1. Ultimate Thead Group 类似于默认的'Thread Group'JMeter元素,可以通过以下方式找到:

右键单击左侧的元素选项卡 - >添加 - >线程(用户) - >jp@gc - Ultimate Thread Group

2.在创建'Ultimate Thread Group'元素之后,我们可以从最初的'Thread Group'复制我们的'BlazeDemo home page'请求采样器和'Active Threads Over Time'监听器。

3.Ultimate Thread Group提供了一个'Threads Schedule' 线程计划表,您可以在其中配置不同的线程组。 您可以决定线程数量('Start Threads Count'),每组开始添加到测试执行之前的延迟('Initial Delay,sec'),线程组的加速期('Startup Time') ,sec'),在减速前线程组的持续时间('Hold Load For,sec')以及指定所有线程组应该关闭的速度('Shutdown Time')。 所有线程组同时启动,但每个线程组都有自己的Intial Delay“初始延迟”值,这有助于分别从每个组中分离用户。

Ultimate Thread Group“终极线程组”插件的另一个重要功能是,您可以在下图中看到预期的负载分布,并根据您的需要调整分配值,甚至在运行脚本之前并且没有考虑到棘手的计算。

让我们将测试分为4个步骤,每分钟增加25个用户。 在这种情况下,我们的'Threads Schedule' 线程计划表将如下所示。

Spike Testing峰值测试

这种负载灵活性可能有用的另一个很好的例子是峰值测试。 基本上,峰值测试是一种性能测试,其中应用程序在意外的增量和负载减少下进行测试,以查看它在这种情况下的行为以及是否能够处理这种峰值。 让我们调整我们的'Threads Schedule'来模拟某种峰值测试。 要模拟该模式,我们需要使用Shutdown Time“关闭时间”列来负责线程减速。

总结

这样利用Ultimate Thread Group的Threads Schedule配置压测场景计划,就可以做到和Loadrunner 一样的负载加压策略了

跟大家推荐一个学习资料分享群:747981058,里面大牛已经为我们整理好了许多的学习资料,有自动化,接口,性能等等的学习资料!人生是一个逆水行舟的过程,不进则退,咱们一起加油吧!

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
CuterCorley CuterCorley
3年前
数据库编程 MySQL 常见异常和解决办法
1.mysqlslap性能测试unknownvariable'defaultcharactersetutf8'mysqlslap可以用于模拟服务器的负载,并输出计时信息。测试时,可以指定并发连接数,可以指定SQL语句。如果没有指定SQL语句,mysqlslap会自动生成查询schema的SELECT语句。但是可能会报错m
Stella981 Stella981
3年前
Jmeter在windows上安装和环境配置
一、Jmeter简单介绍ApacheJMeter是Apache组织开发的基于Java的压力测试工具。它可以用于测试静态和动态资源,例如静态文件、Java小服务程序、CGI脚本、Java对象、数据库、FTP服务器,等等。JMeter可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Locust 安装
Locust介绍  Locust是一个易于使用、分布式的负载测试工具,它可以对网站或其他系统进行负载测试,并计算出一个系统能够承受多少的并发用户。Locust完全基于事件,因此可以在一台机器上支持数千名并发用户,与其他基于事件的应用相比,它不使用回调。与jmeter、loadrunner相比,Locust不需要笨重的UI或臃肿的xml
新支点小星 新支点小星
11个月前
CNAS中兴新支点——软件测试中的非功能测试包含哪些测试内容
软件测试中的非功能测试是指对软件产品在功能之外的其他特性进行测试,包括性能测试、可靠性测试、安全性测试、易用性测试、可维护性测试等。1、性能测试:性能测试是对软件产品在特定条件下的性能进行测试和评估。包括负载测试、强度测试、数据库容量测试等。通过模拟不同的
新支点小玉 新支点小玉
11个月前
软件测试中的非功能测试包括什么?
软件测试中的非功能测试是指对软件产品在功能之外的其他特性进行测试,包括性能测试、可靠性测试、安全性测试、易用性测试、可维护性测试等。1、性能测试:性能测试是对软件产品在特定条件下的性能进行测试和评估。包括负载测试、强度测试、数据库容量测试等。通过模拟不同的