参考
开发环境
名称 | 版本 |
---|---|
操作系统 | 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 内容如下
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Web.Http;
using System.Web.Mvc;
namespace MvcApplication3.Controllers
{
public class Student
{
public int Id { get; set; }
public string No { get; set; }
public string Name { get; set; }
public string Message { get; set; }
}
public class PressureTestController : ApiController
{
public HttpResponseMessage Add([FromBody]Student data)
{
data.Message = "服务器已处理完毕";
string str = JsonConvert.SerializeObject(data);
var result = new HttpResponseMessage
{
Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json")
};
return result;
}
}
}
运行此项目,使用 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.2
到 D:\Program Files
目录
此版本是基于 Java8
以上版本的,因此需要安装 Java8
(如已安装请忽略)
JMeter 启动
进入 D:\Program Files\apache-jmeter-5.2\bin
,以管理员身份运行 jmeter.bat
启动之后会有两个窗口,一个 cmd
窗口,一个 JMeter
的 GUI
。
不要忽略 cmd
窗口的提示信息。
cmd
窗口
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================
大概意思:
================================================================================
不要使用GUI模式进行负载测试!仅用于测试创建和测试调试。
对于负载测试,请使用非GUI模式(使用下面的命令):
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
并且增加Java堆以满足您的测试要求:
修改jmeter批处理文件中的当前环境变量 HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"
检查:https://jmeter.apache.org/usermanual/best-practices.html
================================================================================
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
输入命令
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
部分内容如下
timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
1574337347491,4781,HTTP请求,200,OK,线程组-压力测试 1-102,text,true,,458,257,500,500,http://localhost:7111/api/PressureTest/Add,4766,0,187
1574337347526,5046,HTTP请求,200,OK,线程组-压力测试 1-142,text,true,,458,257,499,499,http://localhost:7111/api/PressureTest/Add,5046,0,342