如何使用JMeter进行性能和负载测试

如何使用JMeter进行性能和负载测试,第1张

JMeter负载测试是使用一个名为Apache JMeter的负载测试工具完成的测试过程,Apache JMeter是一个基于Java的开源桌面应用程序。它还有助于分析高负载下的整体服务器

JMeter性能测试是使用Apache JMeter测试Web应用程序性能的测试方法。JMeter for Performance Testing有助于同时测试静态和动态资源,有助于发现并发用户JMeter性能测试,包括Web应用的负载测试和压力测试。

Apache JMeter测闭孝试工锋首具在性能测试方面提供以下好处

JMeter性能测试包括:

下图显示了JMeter负载测试如何模拟重负载:

在本教程中,我们将对1000名用户进行baidu.com的性能分析 。在测试目标Web应用程序的性能之前,我们应该确定-

以下是这个实际示例的路线图

右键单击“测试计划”,添加一个新的线程组:Add->Thread(Users)->Thread Group

在线程组控制面板中,输入线程属性,如下所示:

线程计数和循环计数不同。

启动周期告诉JMeter在启动下一个用户之前要延迟多长时间。例如,如果我们有100个用户和100秒的启动周期,那么启动用户之间的延迟将是1秒(100秒/100个用户)

现在我们确定此测试中的JMeter元素。这些元素包括

可以通过右键单击Thread Group并选择:Add->Config Element->HTTP request Defaults来添加此元素。

在Http request Defaults控制面板中,输入正在测试的网站名称( http://www.google.com )

右键单击Thread Group并选择:Add->Sampler->HTTP Request。

在HTTP求控制面板中,路径字段指示要将哪个URL求发送到Google服务器。

例如,如果在路径字段中输入“日历”。JMeter将创建指向谷歌服务器的URL求 http://www.google.com/calendar

如果保留路径字段 空白 jeter将创建指向谷歌服务器的url求 http://www.google.com 。 在此测试中,将路径字段保留为空,以使JMeter创建到Google服务器的 http://www.google.com 请求。

JMeter可以将测试结果以Graph格式显示。 右键单击“测试计划”,选择“添加”->“侦听器”->“绘制结果图银态数”

按工具栏上的Run(运行)按钮(Ctrl+R)开始软件测试过程。将看到测试结果实时显示在Graph上。 下图显示了一个测试计划的图表,其中我们模拟了访问 www.google.com 网站的100个用户。

在图片底部,有以下用颜色表示的统计数据:

让我们在下图中分析一下Google服务器的性能。

要分析被测Web服务器的性能,应该关注两个参数

吞吐量是最重要的参数。它表示吞吐量越高,服务器性能越好。 在本次测试中,Google服务器的吞吐量为1491.193/分钟。该值相当高,因此我们可以得出结论,Google服务器具有良好的性能 偏差用红色表示-它表示与平均值的偏差。越小越好。

让我们将Google服务器的性能与其他Web服务器进行比较。这是网站 http://www.yahoo.com/ 的性能测试结果(可以选择其他网站)

被测网站 http://www.yahoo.com 的吞吐量为867.326/分钟。这意味着该服务器每分钟处理867.326个求,低于谷歌。 偏差为2689,远高于谷歌(577) 。所以我们可以确定这个网站的性能低于谷歌服务器。

注意:上面的值取决于几个因素,比如Google当前的服务器负载,网速,CPU能力等等。所以不要惊慌!

如果在运行上述方案时遇到此问题.执行以下 *** 作

浏览网页: https://www.itxiaonv.com/ ,了解更多IT信息

1.打开Java编译器,新建一个项目"TestLength",然后新建一个包"app".2.从Jmeter的安粗型装目录lib/ext中拷贝两个文件"ApacheJMeter_core.jar"和"ApacheJMeter_java.jar"到激团"Tester"的项目中,然后引入这两个JAR文件.(具体的引入方法参考各个Java编译器的使用方法)3.在"app"包中新建一个类,名字叫"TestLength",不过这个类要继承"AbstractJavaSamplerClient"类,如果项目引入步骤二中的两个文件,就可以找到"AbstractJavaSamplerClient"类了.4."TestLength"类在继承"AbstractJavaSamplerClient"类的同时也会继承四个方法,分别是"getDefaultParameters","setupTest","runTest"和"teardownTest"方法."getDefaultParameters"方法主要用于设置传入的参数"setupTest"方法为初始化方法,用于初始化性能测试时的每个线岩铅猜程."runTest"方法为性能测试时的线程运行体"teardownTest"方法为测试结束方法,用于结束性能测试中的每个线程.5.具体实现代码如下:package appimport org.apache.jmeter.config.Argumentsimport org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClientimport org.apache.jmeter.protocol.java.sampler.JavaSamplerContextimport org.apache.jmeter.samplers.SampleResultimport com.passpod.core.t8.*/*** @author乐以忘忧** TODO To change the template for this generated type comment go to* Window - Preferences - Java - Code Style - Code Templates*/public class TestLength extends AbstractJavaSamplerClient{private SampleResult resultsprivate String testStr//初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行,类似于LoadRunner中的init方法public void setupTest(JavaSamplerContext arg0) {results = new SampleResult()testStr = arg0.getParameter("testString", "")if (testStr != null &&testStr.length() >0) {results.setSamplerData(testStr)}}//设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter的参数列表中public Arguments getDefaultParameters() {Arguments params = new Arguments()params.addArgument("testStr", "")//定义一个参数,显示到Jmeter的参数列表中,第一个参数为参数默认的显示名称,第二个参数为默认值return params}//测试执行的循环体,根据线程数和循环次数的不同可执行多次,类似于LoadRunner中的Action方法public SampleResult runTest(JavaSamplerContext arg0) {int len = 0results.sampleStart()//定义一个事务,表示这是事务的起始点,类似于LoadRunner的lr.start_transactionlen = testStr.length()results.sampleEnd()//定义一个事务,表示这是事务的结束点,类似于LoadRunner的lr.end_transactionif(len <5){System.out.println(testStr)results.setSuccessful(false)//用于设置运行结果的成功或失败,如果是"false"则表示结果失败,否则则表示成功}else results.setSuccessful(true)return results}//结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行,类似于LoadRunner中的end方法public void teardownTest(JavaSamplerContext arg0) {}}6.把上面的例子打包,然后把生成的"TestLength.jar"文件拷贝到Jmeter的安装目录lib/ext下.7.运行Jmeter,添加一个线程组,然后在该线程组下面添加一个Java请求(在Sampler中),在Java请求的类名称中选择咱们刚创建的类"app.TestLength",在下面参数列表的"testStr"后面输入要测试的字符串,然后添加一个监听器(聚合报告),设置一下模拟的用户数就可以测试了.如果测试不成功,Jmeter会在它自己个输出框中抛出这个字符串.通过上面的例子我们可以发现,使用Jmeter自定义Java测试代码,配合Jmeter自带的函数,就可以实现出LoadRunner中"Java Vuser"协议的绝大多数功能,而且是没有用户数限制和完全免费的(嘿嘿).上面的例子非常简单,而且没有任何实际意义,只是一个简单的Jmeter测试代码示例,用于抛砖引玉,希望大家一起交流,共同 进步.

在进行网页或应用程序后台接口开发时,一般要及时测试开发的接口能否正确接收和返回数据,对于单次测试,Postman插件是个不错的Http请求模拟工具。

但是Postman只能模拟单客户端的单次请求,而对于模拟多用户并发等性能测试,就必须借助其他的工具了,这里推荐功能强大的JMeter自动化测试工具

Apache JMeter - Apache JMeter™

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最弊雀谨初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库, FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。

下面就以上租基图的Restful类型的接口为例简单介绍使用Jmeter进行接口测试的方法。

获取某个具体网关设备的基本信息。

请求

方法:GET

URI:/api/gateway/<gateway_id>

参数:

在HTTP请求(http request)的头部(header)添加Userid和Token字段作为用户验证字段

响应

返回值:JSON格式的网关信息

参数:

.启动jmeter:在bin下以管理员身份运行jmeter.bat,启动jmeter

2. 创建测试计划:

默认启动jmeter时会加载一个测试技术模板,保存测试计划:修改名称为Apitest,点击保存,选择保存路径,后面的步骤,每次添加或修改了了一些选项,软件并不会自动保存到jmx文件中,所以进行测试后,如果需要保存本次测试选项,要手动到“文件”菜单中保存一下。

3. 添加线程组

右键左边树中的测试计划“Apitest”节点,“添 加”→”Threads”→”线程组”

添加成功后,“Apitest”节点下多了“线程组” 节点,当然这个线程组的名称是可以自己设定的。

4. 添加http默认请求:(用来配置公共参数,不是http请求)

右键线程组,选择“添加”→ “配置元件”→岁升“HTTP请求默认值”,点击“HTTP请求默认值”后

添加成功后,线程组”节点下多了“HTTP请求默认值”节点

这里可以设置主机地址等一下公共参数,比如我们的例子中请求路径前面都是主机地址+index.php,就可以统一在"http请求默认值"里设置

填写默认请求名、服务器、默认请求路径,保存测试计划。

5.添加http请求信息头

这一项并不是必须的,只不过我们的例子中使用了Userid和Token放在HTTP请求头中用作用户验证

右键“Apitest”,选择“添加”→ “配置元件”→“HTTP信息头管理器”

6. 添加http请求

右键“Apitest”,选择“添加”→ “Sampler”→“HTTP请求”

添加成功后,出现新的节点“HTTP请求”,就可以填写具体的请求参数了。

填写完成,保存测试计划

7. 添加监听器:

右键线程组,选择“添加”→“监听器”→“XXXXXXXXX”

可以添加的监听器有很多种,可以添加多个监听器,这里我们添加几个常用的“图形结果”、“察看结果树”、“聚合报告”

添加成功后,“线程组”下增加了几个节点

8. 试运行

点击执行

可以查看各个“监听器”的结果

Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值

#Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100

Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间

Median:中位数,也就是 50% 用户的响应时间

90% Line:90% 用户的响应时间

Note:关于 50% 和 90% 并发用户数的含义,请参考下文

http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html

Min:最小响应时间

Max:最大响应时间

Error%:本次测试中出现错误的请求的数量/请求的总数

Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数

KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

9. 修改线程组的线程数等参数,用于压力测试

点击左侧树形导航中的“线程组”

设置上面几个参数,模拟的总的请求数是:线程数*循环次数。执行一下,用“图形结果”监听器查看一下

样本数目:总共发送到服务器的请求数.

最新样本:代表时间的数字,是服务器响应最后一个请求的时间.

吞吐量:服务器每分钟处理的请求数.

平均值:总运行时间除以发送到服务器的请求数.

中间值:时间的数字,有一半的服务器响应时间低于该值而另一半高于该值.

偏离:服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8279287.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存