压力测试工具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$ 

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

liumiaocn:~ liumiao$ curl http://localhost:8088/



Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

liumiaocn:~ liumiao$

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

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

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

  • 步骤3: 添加一个聚合报告,选择菜单信息如下图所示:
    压力测试工具Apache JMeter:5:使用HTTP请求进行Web应用测试_第1张图片

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

  • 步骤5: 在聚合报告页面设定jtl文件
    在聚合报告页面设定写入和jtl文件路径为:/tmp/nginx-test.jtl
    压力测试工具Apache JMeter:5:使用HTTP请求进行Web应用测试_第2张图片

HTTP测试

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

测试设定

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

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

详细设定如下图所示:
压力测试工具Apache JMeter:5:使用HTTP请求进行Web应用测试_第3张图片

线程组设定

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

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

压力测试工具Apache JMeter:5:使用HTTP请求进行Web应用测试_第4张图片

执行&聚合报告

点击绿色的启动按钮开始执行,然后点击聚合报告可以看聚合报告如下所示:
压力测试工具Apache JMeter:5:使用HTTP请求进行Web应用测试_第5张图片
从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$

接下来故意修改一下HTTP请求的端口号,改成错误的本地没有HTTP服务的端口号,比如8089,设定示例如下所示:
压力测试工具Apache JMeter:5:使用HTTP请求进行Web应用测试_第6张图片
点击绿色的启动按钮开始执行,会提示一个Warning,因为在测试中修改设定,是否还是一个压力测试是需要使用者自己判断的,这里为了演示选择“添加到现有文件”
压力测试工具Apache JMeter:5:使用HTTP请求进行Web应用测试_第7张图片
然后点击聚合报告可以看聚合报告如下所示:
压力测试工具Apache JMeter:5:使用HTTP请求进行Web应用测试_第8张图片
从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$ 

测试报告

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

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

  • 测试报告的概要信息如下所示:
    压力测试工具Apache JMeter:5:使用HTTP请求进行Web应用测试_第9张图片

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

设定信息如下:

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

压力测试工具Apache JMeter:5:使用HTTP请求进行Web应用测试_第10张图片

点击绿色的启动按钮开始执行,会提示一个Warning,这里为了演示仍然选择“添加到现有文件”
压力测试工具Apache JMeter:5:使用HTTP请求进行Web应用测试_第11张图片
然后点击聚合报告可以看聚合报告如下所示:
压力测试工具Apache JMeter:5:使用HTTP请求进行Web应用测试_第12张图片
可以看到样本数量为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

  • 测试报告的概要信息如下所示:
    压力测试工具Apache JMeter:5:使用HTTP请求进行Web应用测试_第13张图片

你可能感兴趣的:(#,性能测试,JMeter,压力测试,测试报告,负载测试,HTTP请求)