使用 Apache JMeter 进行压力测试

2019年11月20日 20:03 · 阅读(1735) ·

参考

使用 JMeter 进行压力测试

Jmeter性能测试 入门

开发环境

名称 版本
操作系统 Windows 10 X64
IIS IIS 8.0
Visual Studio 2013
Apache JMeter 5.2

测试网站

新建 Visual Studio 2013 解决方案,新建 Web 项目

项目类型,WebAPI

在 Controller 文件夹新建 WebApi Controller,命名为 PressureTestController

项目结构如下

PressureTestController.cs 内容如下

  1. using Newtonsoft.Json;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Net.Http;
  7. using System.Text;
  8. using System.Web.Http;
  9. using System.Web.Mvc;
  10. namespace MvcApplication3.Controllers
  11. {
  12. public class Student
  13. {
  14. public int Id { get; set; }
  15. public string No { get; set; }
  16. public string Name { get; set; }
  17. public string Message { get; set; }
  18. }
  19. public class PressureTestController : ApiController
  20. {
  21. public HttpResponseMessage Add([FromBody]Student data)
  22. {
  23. data.Message = "服务器已处理完毕";
  24. string str = JsonConvert.SerializeObject(data);
  25. var result = new HttpResponseMessage
  26. {
  27. Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json")
  28. };
  29. return result;
  30. }
  31. }
  32. }

运行此项目,使用 Postman 测试结果如下

http://localhost:7111/api/PressureTest/Add

压力测试基础概念

压力测试基本概念

关于 JMeter

来源: https://baike.baidu.com/item/Jmeter
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。

JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。

JMeter 下载

进入官网: http://jmeter.apache.org/download_jmeter.cgi

点击 apache-jmeter-5.2.tgz sha512 pgp 下载

下载完后,解压下载好的文件 apache-jmeter-5.2.tgz,复制解压后的文件夹 apache-jmeter-5.2D:\Program Files 目录

此版本是基于 Java8 以上版本的,因此需要安装 Java8(如已安装请忽略)

JDK 1.8 安装

JMeter 启动

进入 D:\Program Files\apache-jmeter-5.2\bin,以管理员身份运行 jmeter.bat

启动之后会有两个窗口,一个 cmd 窗口,一个 JMeterGUI

不要忽略 cmd 窗口的提示信息。

cmd 窗口

  1. ================================================================================
  2. Don't use GUI mode for load testing !, only for Test creation and Test debugging.
  3. For load testing, use CLI Mode (was NON GUI):
  4. jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
  5. & increase Java Heap to meet your test requirements:
  6. Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
  7. Check : https://jmeter.apache.org/usermanual/best-practices.html
  8. ================================================================================

大概意思:

  1. ================================================================================
  2. 不要使用GUI模式进行负载测试!仅用于测试创建和测试调试。
  3. 对于负载测试,请使用非GUI模式(使用下面的命令):
  4. jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
  5. 并且增加Java堆以满足您的测试要求:
  6. 修改jmeter批处理文件中的当前环境变量 HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"
  7. 检查:https://jmeter.apache.org/usermanual/best-practices.html
  8. ================================================================================

JMeter 图形界面

设置语言

使用 JMeter GUI 创建测试

1.创建线程组

Test Plan 上右键 添加-线程(用户)-线程组

设置线程数和循环次数。我这里设置线程数为 500,循环 1 次。

2.配置元件

在我们刚刚创建的线程组 线程组-压力测试 上右键 添加-配置元件-HTTP请求默认值

配置我们需要进行测试的程序协议、地址和端口。

这里的地址端口来自我们之前创建的测试项目 http://localhost:7111/api/PressureTest/Add

当所有的接口测试的访问域名和端口都一样时,可以使用该元件,一旦服务器地址变更,只需要修改请求默认值即可。

3.构造 HTTP 请求

线程组-压力测试 上右键 添加-取样器-HTTP请求

设置我们需要测试的API的请求路径和数据。

这里的路径和数据来自我们之前创建的测试项目 http://localhost:7111/api/PressureTest/Add,注意格式是 json

4.添加 HTTP 请求头

线程组-压力测试 上右键 添加-配置元件-HTTP信息头管理器

因为我要传输的数据为 json,所以添加一个 名称:Content-Type,值: application/json

5.添加断言

线程组-压力测试 上右键 添加-断言-响应断言

根据响应的数据来判断请求是否正常。我在这里只判断的响应代码是否为 200。还可以配置错误信息

6.添加察看结果树

线程组-压力测试 上右键 添加-监听器-察看结果树

点击 运行 按钮,点击 Yes

这个数据要保存(以后要用到),我保存到 D:\Program Files\apache-jmeter-5.2\data

保存之后开始运行了,需要等待运行完成

看下每个请求的请求数据

响应数据

7.添加汇总报告

线程组-压力测试 上右键 添加-监听器-汇总报告

点击运行按钮就可以看到结果了

可以看到 吞吐率(每秒处理请求数)

保存,到此,压力测试完成。

使用 JMeter 命令行创建测试

把前面 6.添加察看结果树 中保存的文件 查看结果树.jmx 保存到 D:\Program Files\apache-jmeter-5.2\bin\TestPlan

前面说过,执行测试计划不能用 GUI,需要用命令行来执行。

打开命令行窗口,进入目录 D:\Program Files\apache-jmeter-5.2\bin

输入命令

  1. jmeter -n -t TestPlan/察看结果树.jmx -l TestPlan/Result/Result.txt -e -o TestPlan/WebReport

命令说明:

命令 说明
TestPlan/察看结果树.jmx 测试计划文件路径(上面保存的汇总报告)
TestPlan/Result/Result.txt 测试结果文件路径和保存的文件名称
TestPlan/WebReport Web报告保存路径

运行完成后,在对应目录生成了存放测试结果的文件夹

WebReport 文件夹内容如下

打开 index.html,查看 Web 报告

Result.txt 部分内容如下

  1. timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
  2. 1574337347491,4781,HTTP请求,200,OK,线程组-压力测试 1-102,text,true,,458,257,500,500,http://localhost:7111/api/PressureTest/Add,4766,0,187
  3. 1574337347526,5046,HTTP请求,200,OK,线程组-压力测试 1-142,text,true,,458,257,499,499,http://localhost:7111/api/PressureTest/Add,5046,0,342