028-86261949

当前位置:首页 > 技术交流 > JMeter执行负载测试

JMeter执行负载测试

2020/01/15 10:52 分类: 技术交流 浏览:1

 

在本教程中,我们将介绍如何使用Apache JMeter在Web应用程序环境上执行基本的负载和压力测试。 我们将向您展示如何使用图形用户界面来构建测试计划并针对Web服务器运行测试。

JMeter是一个开源桌面Java应用程序,旨在加载测试和衡量性能。 它可以用来模拟各种场景的负载并以几种方式输出性能数据,包括CSV和XML文件以及图形。 因为它是100%Java,所以它在支持Java 6或更高版本的每个OS上都可用。

 

 

大前提

为了遵循本教程,您将需要有一台可以在其上运行JMeter的计算机,以及一台用于加载测试的Web服务器。除非您知道生产服务器可以处理负载,否则请不要在其上运行这些测试,否则可能会对服务器的性能产生负面影响。

您可以使本教程中的测试适应您自己的任何Web应用程序。作为示例,我们要测试的Web服务器是在NYC2 DigitalOcean数据中心的LEMP堆栈上运行WordPress的1 CPU / 512 MB VPS。 JMeter计算机正在纽约市的DigitalOcean办公室运行(这与我们的测试延迟有关)。

请注意,JMeter的测试结果可能受多种因素影响,包括JMeter可用的系统资源(CPU和RAM)以及JMeter与要测试的Web服务器之间的网络。通过在非图形模式下运行测试或将负载生成分布到多个JMeter服务器,可以增加JMeter可以生成的负载大小而不会扭曲结果。

 

安装JMeter

因为我们将Apache JMeter用作桌面应用程序,并且使用了各种各样的桌面OS,所以我们将不介绍针对任何特定OS的JMeter安装步骤。 话虽如此,JMeter的安装非常简单。 最简单的安装方法是使用程序包管理器(例如apt-get或Homebrew),或从官方站点下载并取消存档JMeter二进制文件并安装Java(版本6或更高版本)。

 

这是运行JMeter所需的软件列表以及指向归档的链接:

根据安装Java的方式,可能需要将Java bin目录添加到PATH环境变量中,以便JMeter可以找到Java和keytool二进制文件。

同样,我们将把您安装JMeter的路径(您将其取消存档的目录)称为$ JMETERHOME因此,如果您使用的是Linux或Unix操作系统,则JMeter二进制文件位于$ JMETERHOME / bin / jmeter。 如果您正在运行Windows,则可以运行$ JMETER_HOME / bin / jmeter.bat。

作为参考,在编写本教程时,我们使用了以下软件版本:

  • Oracle Java 7 update 60, 64-bit
  • JMeter 2.11

安装并运行JMeter后,让我们继续制定测试计划!

 

建立基本的测试计划

启动JMeter后,您应该看到带有空测试计划的图形用户界面:

 

 

测试计划由一系列测试组件组成,这些组件确定如何模拟负载测试。 当我们将这些组件添加到测试计划中时,我们将说明如何使用其中的某些组件。

 

添加线程组

首先,将线程组添加到测试计划:

  1. Right-click on Test Plan
  2. Mouse over Add >
  3. Mouse over Threads (Users) >
  4. Click on Thread Group

 

线程组具有影响负载测试的三个特别重要的属性:

  • Number of Threads (users): JMeter将尝试模拟的用户数。 设置为50
  • Ramp-Up Period (in seconds): JMeter将分发线程开始的持续时间。 设置为10
  • Loop Count: 他执行测试的次数。 将此设置为1

 

 

添加HTTP请求默认值

HTTP请求默认值配置元素用于在我们的测试计划中设置HTTP请求的默认值。 如果我们要在测试中将多个HTTP请求发送到同一服务器,则此功能特别有用。 现在,我们将HTTP请求默认值添加到线程组:

  1. Select Thread Group, then Right-click it
  2. Mouse over Add >
  3. Mouse over Config Element >
  4. Click on HTTP Request Defaults

 

在“ HTTP请求默认值”的“ Web服务器”部分下,在“服务器名称”或“ IP”字段中填写要测试的Web服务器的名称或IP地址。 在此处设置服务器使其成为该线程组中其余项目的默认服务器。

 

 

添加HTTP Cookie管理器

如果您的Web服务器使用cookie,则可以通过将HTTP Cookie Manager添加到线程组来添加对cookie的支持:

  1. Select Thread Group, then Right-click it
  2. Mouse over Add >
  3. Mouse over Config Element >
  4. Click on HTTP Cookie Manager

 

添加一个HTTP请求采样器

现在,您要向线程组添加一个HTTP请求采样器,该采样器表示每个线程(用户)将访问的页面请求:

  1. Select Thread Group, then Right-click it
  2. Mouse over Add >
  3. Mouse over Sampler >
  4. Click on HTTP Request

 

在“ HTTP请求”的“ HTTP请求”部分下,用要每个线程(用户)请求的项目填充“路径”。 我们将其设置为/,因此每个线程都将访问服务器的主页。 请注意,您不需要在此项目中指定服务器,因为已经在“ HTTP请求默认值”项目中指定了服务器。

注意:如果要在测试中添加更多HTTP请求,请重复此步骤。 每个线程将执行此测试计划中的所有请求。

 

在表侦听器中添加视图结果

在JMeter中,侦听器用于输出负载测试的结果。 有多种侦听器可用,可以通过安装插件来添加其他侦听器。 我们将使用表,因为它易于阅读。

  1. Select Thread Group, then Right-click it
  2. Mouse over Add >
  3. Mouse over Listener >
  4. Click on View Results in Table

 

您也可以输入“文件名”的值以将结果输出到CSV文件。

 

运行基本测试计划

现在我们已经设置了基本测试计划,让我们运行它并查看结果。

首先,通过单击文件,然后单击保存,保存测试计划,然后指定所需的文件名。 然后在左窗格中的“查看表中的结果”上选择,然后从主菜单中单击“运行”,然后单击“开始”(或仅单击主菜单下面的绿色“开始”箭头)。 运行测试时,您应该在表中看到测试结果,如下所示:

 

 

解释结果

您可能会看到所有请求的状态均为“成功”(由带有复选标记的绿色三角形表示)。 之后,您可能最感兴趣的列是“采样时间(ms)”和“延迟”(在示例中未显示)列。

  • Latency: JMeter发送请求到收到初始响应之间经过的毫秒数
  • Sample Time: 服务器完全满足请求所花费的毫秒数(response + latency)

根据生成的表,“采样时间”的范围是128-164 ms。 对于基本主页(大约55 KB),这是一个合理的响应时间。 如示例所示,如果您的Web应用程序服务器没有为资源而苦苦挣扎,那么采样时间将主要受到地理距离(通常会增加延迟)和请求项的大小(这会增加传输时间)的影响。 您的个人结果将与示例有所不同。

因此,我们的服务器在10秒钟(每秒5次)访问我们的55 KB WordPress主页的模拟中幸免了50个用户,并且响应令人满意。 让我们看看增加线程数会发生什么。

 

增加负荷

让我们在10秒内尝试使用80个线程进行相同的测试。 在左窗格的“线程组”项中,将“线程数(用户)”更改为80。现在单击“查看表中的结果”,然后单击“启动”。 在我们的示例服务器上,结果如下表所示:

 

 

如您所见,采样时间已增加到将近一秒,这表明我们的Web应用程序服务器开始变得繁重。 让我们登录到VPS,看看负载测试期间的资源使用情况。

通过SSH登录到您的Web服务器并运行top

top

除非您有用户积极访问您的服务器,否则您应该看到Cpu(s)用户使用率(us)应该非常低或0%,而Cpu(s)闲置%(id)应该是99%+,例如 所以:

 

 

现在,在JMeter中,再次开始测试,然后切换回Web服务器的SSH会话。 您应该看到资源使用量增加

 

 

在我们的示例中,CPU使用率百分比为94%,系统使用率(sy)为4.7%,空闲状态为0%。 如上图所示,我们并没有用尽内存,因此性能下降是由于CPU能力不足造成的! 我们还可以看到,服务于WordPress的php5-fpm进程正在使用大部分CPU(约占96%)。

 

为了在10秒内满足模拟80位用户的需求,我们需要增加CPU或优化服务器设置以使用更少的CPU。 对于WordPress,我们可以将MySQL数据库(使用一部分CPU)移动到另一台服务器,并且还可以实现缓存(这将减少CPU使用率)。

 

如果您感到好奇,可以调整测试中的线程数,以查看服务器在开始出现性能下降之前可以处理多少个线程。 以我们的1个CPU Droplet示例为例,它可以正常工作,直到我们在10秒内使用72个线程。

 

结论

JMeter是确定如何改进Web应用程序服务器设置,减少瓶颈和提高性能的非常有价值的工具。 现在您已经熟悉了JMeter的基本用法,可以随时创建新的测试计划以衡量服务器在各种情况下的性能。

 

我们作为示例使用的测试不能准确反映普通用户的使用模式,但是JMeter具有执行各种测试的工具,这些测试可能对您自己的环境有用。 例如,可以将JMeter配置为模拟用户登录到您的应用程序,客户端缓存以及使用URL重写处理用户会话的过程。 还有许多其他内置的采样器,侦听器和配置工具可以帮助您构建所需的方案。 此外,还有一些JMeter插件可以增强其功能,可以从http://jmeter-plugins.org/下载。

#标签:JMeter,负载测试