使用JMeter测试工具对服务器并发执行能力,响应速度等方面进行压力测试
测试内容
使用JMeter测试工具对服务器并发执行能力,响应速度等方面进行压力测试。
测试工具以及环境配置
-
测试工具:JMeter,版本:apache-jmeter-3.1
-
环境配置:配置JDK环境变量,以及JMeter的环境变量
1)JDK环境变量配置:
变量名:JAVA_HOME变量值:C:\Program Files\Java\jdk1.8.0_51 (即jdk安装的位置)
变量名:Path 变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
变量名:CLASSPATH 变量值:.;%JAVA_HOME%lib;%JAVA_HOME%lib\tools.jar
配置完成之后点击“确定”,jdk就配置完成。2)JMeter环境变量配置:
变量名:JMETER_HOME 变量值:I:\apache-jmeter-5.0
变量名:CLASSPATH
变量值:
%JMETER_HOME% \lib\ext\ApacheJMeter_core.jar;
%JMETER_HOME%\lib\jorphan.jar;
%JMETER_HOME%\lib/logkit-2.0.jar;
创建完成之后点击“确定”即可。 -
测试环境
1) 服务器
Windows10 64位操作系统
处理器:Intel® Core™ i5-4590 CPU @ 3.30GHz 3.30GHz
内存(RAM):8GB
应用服务器:apache-tomcat-7.0.88 最大线程2002) 客户端
Windows10 64位操作系统
处理器:Intel® Core™ i5-4590 CPU @ 3.30GHz 3.30GHz
内存(RAM):8GB3) 测试软件
apache-jmeter-5.0
测试说明
- 名词定义(时间单位ms)
Sample:本次测试场景共运行多少线程;
Average:平均响应时间;
Median:统计意义上的响应时间中值;
90% line:所有线程中90%的线程响应时间都小于xx的值;
Min:响应最小时间;
Max:响应最大时间;
Error:出错率;
Throughput - 吞吐量以“requests/second、requests /minute、 requests /hour”来衡量。 时间单位已经被选取为second,所以,显示速率至少是1.0,即每秒1个请求;
Kb/sec - 以Kilobytes/seond来衡量的吞吐量。
入门教程参考 https://blog.****.net/zl1zl2zl3/article/details/78194194
测试过程
启动JMeter,下载安装包解压后,进入bin/目录,点击箭头所示文件,双击打开,即可进入JMeter界面。
-
单个服务以登录为例
相关设置,登录请求。
然后根据需求设置并发线程数,查看聚合报告中相关参数结果,比如10个线程并发的聚合报告如下: -
多个服务按比例并发执行
如果在一个线程组中执行,设置多个服务并发比例为1:1:1:…想要按比例测试多个服务,则需要创建多个线程组,创建方法同之前创建的线程组,只不过在线程组的线程数选项中设置不同,线程组1,2…的线程数比例即为所想要的比例。在此之前需要先右键测试计划添加一个HTTP请求默认值(HTTP Request Defaults),设置访问的服务器IP地址,端口号,协议等。
示例:八个服务同时启动,包括用户登录,查看个人信息,获得一张舰船图片,获得所有舰船
照片,修改用户信息,获得所有国家,获取搭载关系,获取被搭载关系。
聚合报告如下:
当不需要多个线程组同时存在运行时,可以右键关闭(Disable)不需要的线程组。 -
保持登录状态,多个服务并发执行
-
在进行多服务按比例并发执行时,需要保持登录状态,所以在跨线程组调用变量时,要先将登录后服务器返回的JSESSIONID设置为全局变量。
1) 设置全局变量用到的函数为__setProperty(),调用全局变量的函数为__property()。首先打开函数助手,输入需要的值点击生成按钮即可生成对应的脚本代码。所以可以得到设置全局变量的脚本代码为KaTeX parse error: Expected group after '_' at position 2: {_̲_setProperty(ne…{JSESSIONID},)};调用全局变量的代码为 {__property(newjsessionid,)}。
2) 右键登录的HTTP请求,新建正则表达式提取器,从服务器返回的响应信息头中 利用正则表达式JSESSIONID=(.*); Path=/获取JSESSIONID。
3) 在登录所在的线程组新建BeanShell Sampler,将设置全局变量的脚本代码写进去。
4) 在需要用到全局变量的HTTP请求所在线程组建立HTTP Cookie管理器,用来传递 JSESSIONID,使用方式如下图。其中域是要填写服务器的IP地址,表示访问该IP地址的服务都将使用此缓存。
参考博客:
jmeter如何设置全局变量以及调用方法 https://blog.****.net/r455678/article/details/53576182?utm_source=blogxgwz1JMeter的惯用函数使用-字符串相关 https://www.cnblogs.com/qmfsun/p/5945310.html
示例:
用户登录后,对分类型查询所有设备,装备内码列表和国家列表三个服务进行压力测试。
(以上,比较乱,整合了很久之前的报告,在过程中出现的错误没有截图保存,写此博客只是想记录一下,测试也没有很深入。)