压力测试工具Apache JMeter:5:使用HTTP请求进行Web应用测试

依然范特西╮ 提交于 2020-01-17 15:15:51
原文:压力测试工具Apache JMeter:5:使用HTTP请求进行Web应用测试

在这里插入图片描述
Apache JMeter是一个纯Java开发的用于负载测试或者性能测试的开源软件。JMeter起初就是被设计用来进行Web应用的压力测试,这篇文章通过使用Docker拉起一个Nginx容器,然后对其进行压测这样一个即为简单的例子来介绍一下使用JMeter进行压力测试的流程和方法。

环境准备

关于Apache JMeter的概要介绍与安装的方法,可参看如下内容:

  • https://liumiaocn.blog.csdn.net/article/details/101264380

压力测试应用准备

在本地机器的8088端口使用Docker启动一个Nginx应用(使用其他方式也可),示例如下所示:

liumiaocn:~ liumiao$ docker images |grep nginx |grep latest
nginx                                           latest                          e445ab08b2be        2 months ago        126MB
liumiaocn:~ liumiao$ docker run -p 8088:80 -d --name=nginx-test nginx:latest
a80fb1a4fc20627891a6bd7394fd79ae9aefb7dc8cf72c12967bc2673a815308
liumiaocn:~ liumiao$ 
12345

使用curl命令或者直接使用浏览器确认nginx已正常运行

liumiaocn:~ liumiao$ curl http://localhost:8088/
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
liumiaocn:~ liumiao$
123456789101112131415161718192021222324252627

使用如下步骤准备测试验证的前提准备:

  • 步骤1: 在测试计划下添加一个线程组,选择菜单信息如下图所示:
    在这里插入图片描述

  • 步骤2: 在刚刚创建的线程组上添加一个HTTP请求的取样器,选择菜单信息如下图所示:
    在这里插入图片描述

  • 步骤3: 添加一个聚合报告,选择菜单信息如下图所示:
    在这里插入图片描述

  • 步骤4: 保存测试计划
    点击保存测试计划按钮将结果保存为/tmp/nginx-test.jmx

  • 步骤5: 在聚合报告页面设定jtl文件
    在聚合报告页面设定写入和jtl文件路径为:/tmp/nginx-test.jtl
    在这里插入图片描述

HTTP测试

进行一次HTTP GET的成功测试,通过JMeter的HTTP取样器执行一次GET http://localhost:8088/

测试设定

HTTP请求设定如下信息,建立与nginx服务之间的关联,在本例中设定内容如下所示

设定项 设定内容
协议 http
服务器名称或者ip localhost
端口号 8088
HTT请求/方法 GET
HTTP请求/路径 /

详细设定如下图所示:
在这里插入图片描述

线程组设定

保持线程组信息为缺省设定即可,设定内容如下所示:

设定项 设定值
线程数 1
循环次数 1

在这里插入图片描述

执行&聚合报告

点击绿色的启动按钮开始执行,然后点击聚合报告可以看聚合报告如下所示:
在这里插入图片描述
从nginx-test.jtl文件中也可以看到结果的详细信息,可以看到返回的结果200码,以及success字段的true的结果信息,说明这是一次成功的执行,另外在聚合报告中的异常%的结果是0也可以看出这一点。

liumiaocn:tmp liumiao$ cat nginx-test.jtl
timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
1569663931702,5,HTTP请求,200,OK,线程组 1-1,text,true,,850,118,1,1,http://localhost:8088/,5,0,3
liumiaocn:tmp liumiao$
1234

接下来故意修改一下HTTP请求的端口号,改成错误的本地没有HTTP服务的端口号,比如8089,设定示例如下所示:
在这里插入图片描述
点击绿色的启动按钮开始执行,会提示一个Warning,因为在测试中修改设定,是否还是一个压力测试是需要使用者自己判断的,这里为了演示选择“添加到现有文件”
在这里插入图片描述
然后点击聚合报告可以看聚合报告如下所示:
在这里插入图片描述
从nginx-test.jtl文件中也可以看到结果的详细信息,Connection refused的错误信息,以及success字段的false的结果信息,说明这是一次失败的执行,另外在聚合报告中的异常%的结果也变成了50%(共计两次取样测试,上一次执行的结果成功,所以异常为50%)也可以看出这一点。

liumiaocn:tmp liumiao$ cat nginx-test.jtl
timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
1569663931702,5,HTTP请求,200,OK,线程组 1-1,text,true,,850,118,1,1,http://localhost:8088/,5,0,3
1569664469242,2,HTTP请求,Non HTTP response code: org.apache.http.conn.HttpHostConnectException,"Non HTTP response message: Connect to localhost:8089 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused (Connection refused)",线程组 1-1,text,false,,2673,0,1,1,http://localhost:8089/,0,0,2
liumiaocn:tmp liumiao$ 
12345

测试报告

  • 使用如下命令生成测试报告

执行命令:bin/jmeter -g /tmp/nginx-test.jtl -e -o /tmp/nginx-test-rpt-1 -j /tmp/nginx-rpt.log

  • 测试报告的概要信息如下所示:
    在这里插入图片描述

重新将端口号修正为8080,保证HTTP测试能正确执行的基础之上,进行如下压力测试:并发用户数100、循环360次、持续时间180秒的内置HTTP请求验证

设定信息如下:

设定项 设定值
线程数 100
循环次数 360
持续时间 180s

在这里插入图片描述

点击绿色的启动按钮开始执行,会提示一个Warning,这里为了演示仍然选择“添加到现有文件”
在这里插入图片描述
然后点击聚合报告可以看聚合报告如下所示:
在这里插入图片描述
可以看到样本数量为36002,因为100线程组*360次循环 + 既存的两次测试结果,所以总计36002次压力测试样本,相较于前文中使用内置的Java请求,使用缺省的nginx设定的情况下,异常率已经上升至9.17%了。

测试报告

  • 使用如下命令生成测试报告

执行命令:bin/jmeter -g /tmp/nginx-test.jtl -e -o /tmp/nginx-test-rpt-2 -j /tmp/nginx-rpt.log

  • 测试报告的概要信息如下所示:
    在这里插入图片描述
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!