性能测试-JMeter分布式测试及其详细步骤

news2024/11/17 22:38:49

性能测试概要

性能测试是软件测试中的一种,它可以衡量系统的稳定性、扩展性、可靠性、速度和资源使用。它可以发现性能瓶颈,确保能满足业务需求。很多系统都需要做性能测试,如Web应用、数据库和操作系统等。

 

性能测试种类非常多,有些概念也很相近:

  • Load Testing
  • Baseline Testing
  • Smoke Testing
  • Stress Testing
  • Soak Testing
  • Endurance Testing
  • Capacity Testing
  • Longevity Testing
  • Peak Testing
  • Spike Testing
  • Volume Testing
  • Capacity Tests
  • Reliability Testing
  • Scalability Testing

性能测试的工具

同样,性能测试的工具也非常多:

  • Apache JMeter
  • HP LoadRunner
  • Gatling
  • Blazemeter
  • k6
  • NeoLoad
  • TestComplete
  • Silk Performer
  • Rational Performance Tester
  • Apica LoadView
  • AppDynamics
  • Dynatrace
  • New Relic

很难说哪个工具是最好的,这取决于你的需求和预算。如果你想要开源易用的,那JMeter是一个不错的选择。如果你想要一个商用的工具,不妨试试LoadRunner和NeoLoad。重要的一点是,没有任何一款工具可以应对所有性能测试,很多时候我们需要组合使用。

JMeter的分布式测试

我将在本文详细介绍JMeter的分布式测试,我们经常会通过它来做性能测试。

在分布式测试角色中,我们需要一个控制节点Controller,还有多个工作节点Workers。如果你想你的请求增加,那可以通过不断增加工作节点来实现。Controller控制Workers,但它不跑具体的测试案例。Workers是连接目标系统来做具体测试的。

整个系统架构大概如下:

Worker可以在不同的服务器上,所以叫分布式,也因此可以利用多台电脑的资源来模拟足够的请求。

详细步骤

我将一步步介绍如何使用JMeter分布式测试来做性能测试,大致架构如下:

 Controller我放在Mac上跑,Workers我是通过两台Ubuntu服务器来跑,要注意它们的IP是在同一内网上的。目标系统为了省事,我直接请求 Bing, stackoverflow, QQ。

Step 1: 安装JDK

Apache JMeter是用Java写的,运行它需要Java运行环境。在Ubuntu安装如下:

sudo apt install openjdk-11-jdk

Stpe 2: 下载Apache JMeter

去官网的 download page 下载最新的JMeter包apache-jmeter-5.5.zip,然后解压:

unzip apache-jmeter-5.5.zip

所有节点都需要下载安装。

Controller的位置如下:

/Users/larry/Software/apache-jmeter-5.5

Workers的位置如下:

home/larry/software/apache-jmeter-5.5

你不必位置和我一样,我列出来是为了与后面的命令对应上。

Step 3: 准备测试的JMX文件

JMeter把所有的测试信息都存放在jmx文件中,打开工具写测试案例如下:

然后定义整个测试怎么跑,这里定义的是使用8个线程,60秒的热身和120秒的持续时长:

文件我放在这:

$ ls /Users/larry/Software/apache-jmeter-5.5/projects/pkslow
performance-test.jmx

我的案例只是Controller需要这个jmx文件,Worker是不需要的。它们可以通过RMI来交互。

Step 4: 启动Workers

要先启动Workers,以服务器模式来启动,启动后不会执行什么测试,它会等待与它连接的Controller和指令:

  • Worker 1:
$ /home/larry/software/apache-jmeter-5.5/bin/jmeter-server -Dserver.rmi.ssl.disable=true -Djava.rmi.server.hostname=192.168.50.171
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.50.171:41709](local),objID:[-2af2edf6:1882245cfde:-7fff, 1980465993472976097]]]
  • Worker 2:
$ /home/larry/software/apache-jmeter-5.5/bin/jmeter-server -Dserver.rmi.ssl.disable=true -Djava.rmi.server.hostname=192.168.50.60
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.50.60:45337](local),objID:[18489452:1882246a88b:-7fff, 4749047852254882466]]]

注意: 可能会遇到java.rmi.RemoteException,如果你没指定参数:java.rmi.server.hostname.

$ ./software/apache-jmeter-5.5/bin/jmeter-server -Dserver.rmi.ssl.disable=true
May 15, 2023 5:43:16 PM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[127.0.1.1:33021](local),objID:[-7155c199:1881ecaf233:-7fff, -6972385484103483700]]]
Server failed to start: java.rmi.RemoteException: Cannot start. ubuntu is a loopback address.
An error occurred: Cannot start. ubuntu is a loopback address.

Step 5: 启动Controller

所有Workers就位后,就等主帅一声令下。启动时要指定jmx文件,报告生成的位置,还有Worker的IP,如下:

$ cd /Users/larry/Software/apache-jmeter-5.5/

$ ./bin/jmeter -n -t projects/pkslow/performance-test.jmx -l projects/pkslow/performance-test.csv -e -o projects/pkslow/Reports -Dserver.rmi.ssl.disable=true -R 192.168.50.171,192.168.50.60
Creating summariser <summary>
Created the tree successfully using projects/pkslow/performance-test.jmx
Configuring remote engine: 192.168.50.171
Configuring remote engine: 192.168.50.60
Starting distributed test with remote engines: [192.168.50.171, 192.168.50.60] @ May 16, 2023 10:37:31 PM CST (1684247851079)
Remote engines have been started:[192.168.50.171, 192.168.50.60]
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary +      1 in 00:00:02 =    0.7/s Avg:  1260 Min:  1260 Max:  1260 Err:     0 (0.00%) Active: 2 Started: 2 Finished: 0
summary +    111 in 00:02:31 =    0.7/s Avg:  4433 Min:    41 Max: 50474 Err:     4 (3.60%) Active: 15 Started: 16 Finished: 1
summary =    112 in 00:02:33 =    0.7/s Avg:  4405 Min:    41 Max: 50474 Err:     4 (3.57%)
summary +     64 in 00:00:19 =    3.3/s Avg: 25706 Min:    62 Max: 66745 Err:    31 (48.44%) Active: 0 Started: 16 Finished: 16
summary =    176 in 00:02:52 =    1.0/s Avg: 12151 Min:    41 Max: 66745 Err:    35 (19.89%)
Tidying up remote @ May 16, 2023 10:40:24 PM CST (1684248024629)
... end of run

更多信息可以查看 jmeter.log:

$ tail -f jmeter.log 
2023-05-16 22:40:29,956 INFO o.a.j.r.d.JsonExporter: Found data for consumer statisticsSummary in context
2023-05-16 22:40:29,957 INFO o.a.j.r.d.JsonExporter: Creating statistics for overall
2023-05-16 22:40:29,957 INFO o.a.j.r.d.JsonExporter: Creating statistics for other transactions
2023-05-16 22:40:29,957 INFO o.a.j.r.d.JsonExporter: Checking output folder
2023-05-16 22:40:29,958 INFO o.a.j.r.d.JsonExporter: Writing statistics JSON to /Users/larry/Software/apache-jmeter-5.5/projects/pkslow/Reports/statistics.json
2023-05-16 22:40:30,006 INFO o.a.j.r.d.ReportGenerator: Exporting data using exporter:'html' of className:'org.apache.jmeter.report.dashboard.HtmlTemplateExporter'
2023-05-16 22:40:30,007 INFO o.a.j.r.d.HtmlTemplateExporter: Will generate dashboard in folder: /Users/larry/Software/apache-jmeter-5.5/projects/pkslow/Reports
2023-05-16 22:40:30,142 INFO o.a.j.r.d.HtmlTemplateExporter: Report will be generated in: /Users/larry/Software/apache-jmeter-5.5/projects/pkslow/Reports, creating folder structure
2023-05-16 22:40:30,145 INFO o.a.j.r.d.TemplateVisitor: Copying folder from '/Users/larry/Software/apache-jmeter-5.5/bin/report-template' to '/Users/larry/Software/apache-jmeter-5.5/projects/pkslow/Reports', got message: /Users/larry/Software/apache-jmeter-5.5/projects/pkslow/Reports, found non empty folder with following content [/Users/larry/Software/apache-jmeter-5.5/projects/pkslow/Reports/statistics.json], will be ignored
2023-05-16 22:40:30,472 INFO o.a.j.JMeter: Dashboard generated

Worker收到指令也会开始工作并打印一些简单的日志:

$ /home/larry/software/apache-jmeter-5.5/bin/jmeter-server -Dserver.rmi.ssl.disable=true -Djava.rmi.server.hostname=192.168.50.171
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.50.171:44621](local),objID:[4d13369d:18824fd059a:-7fff, 2287886479123818682]]]
Starting the test on host 192.168.50.171 @ 2023 May 16 22:37:31 HKT (1684247851980)
Warning: Nashorn engine is planned to be removed from a future JDK release
Finished the test on host 192.168.50.171 @ 2023 May 16 22:40:24 HKT (1684248024679)

Step 6: 结果和报告

整个测试跑完后,可以找到对应的结果:

$ ls -l /Users/larry/Software/apache-jmeter-5.5/projects/pkslow/
total 72
drwxr-xr-x  6 larry  staff    192 May 16 22:40 Reports
-rw-r--r--  1 larry  staff  23472 May 16 22:40 performance-test.csv
-rw-r--r--  1 larry  staff  10593 May 16 09:50 performance-test.jmx

在Reports目录下直接打开 index.html

其它提示

改变Worker的端口

Worker的默认端口是1099,但它是可以改变的,有些时候也必须改变,如设置的防火墙,或者需要在同一台Server启动多个Worker。具体命令如下:

$ /home/larry/software/apache-jmeter-5.5/bin/jmeter-server -Dserver.rmi.ssl.disable=true -Djava.rmi.server.hostname=192.168.50.60 -Dserver_port=1984

当然,Controller也要同步调整自己的命令:

$ ./bin/jmeter -n -t projects/pkslow/performance-test.jmx -l projects/pkslow/performance-test.csv -e -o projects/pkslow/Reports -Dserver.rmi.ssl.disable=true -R 192.168.50.171:1984,192.168.50.60:1984

使用nohup来跑测试

性能测试有时需要跑很长时间,建议使用nohup模式来运行:

$ nohup ./bin/jmeter -n -t projects/pkslow/performance-test.jmx -l projects/pkslow/performance-test.csv -e -o projects/pkslow/Reports -Dserver.rmi.ssl.disable=true -R 192.168.50.171:1984,192.168.50.60:1984 &
[1] 81248

指定结果时添加时间

这样很清晰知道是什么时候开始跑的,也避免目录存在报错。

$ nohup ./bin/jmeter -n -t projects/pkslow/performance-test.jmx -l projects/pkslow/performance-test."$(date +%F.%T)".csv -e -o projects/pkslow/Reports-"$(date +%F.%T)" -Dserver.rmi.ssl.disable=true -R 192.168.50.171:1984,192.168.50.60:1984 &

不过这样也要注意定期清理不需要的结果,以免占用硬盘空间。

总结

性能测试是非常重要的,而Apache JMeter开源又好用,可以在项目中使用起来。

最后:这里有我建立的一个专门交流软件测试方面问题的学习群,里面也有很多大公司的技术大牛。很多时候,技术大牛的几句话就会让我们醍醐灌顶,少浪费时间,如果想要多跟有经验的人学习,就找我加入我的软件测试交流群,以后有工作的内推机会都相互推荐一下,毕竟我们是关系社会。

最后,绵薄之力.
感谢每一个认真阅读我文章的人,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

资料获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,关注公众号:一个心态巨好的朋友 即可自行领取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/545516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入学习《c语言函数》

&#x1f4d5;博主介绍&#xff1a;目前大一正在学习c语言&#xff0c;数据结构&#xff0c;计算机网络。 c语言学习&#xff0c;是为了更好的学习其他的编程语言&#xff0c;C语言是母体语言&#xff0c;是人机交互接近底层的桥梁。 本章学习函数。 让我们开启c语言学习之旅吧…

Mybatis管理数据库

快速入门 使用idea工具操作数据库使用Mybatis查询所有用户数据第一步创建springboot工程&#xff0c;数据库表user&#xff0c;实体类User第二步&#xff0c;引入Mybatis的相关依赖&#xff0c;配置Mybatis&#xff08;数据库连接信息&#xff09;第三步&#xff0c;编写sql语句…

Jmeter工具+ant+jenkins实现持续集成

jmeterantjenkins持续集成 一、下载并配置jmeter 首先下载jmeter工具&#xff0c;并配置好环境变量&#xff1b;参考&#xff1a; jmeter默认保存的是.jtl格式的文件&#xff0c;要设置一下bin/jmeter.properties,文件内容&#xff0c;保存jmeter.save.saveservice.output_f…

关于华为云负载均衡ELB健康检查显示离线的排查问题及解决办法

由于项目中经常涉及到检修升级操作&#xff0c;在进行检修升级时&#xff0c;服务就需要停止一段时间&#xff0c;检修结束后重启&#xff0c;在此期间相关的功能页面都将无法访问。甲方反馈&#xff0c;需要停止服务的检修工作暂时不予执行。因此&#xff0c;为了不耽误系统的…

低代码搭建制造管理系统,你要知道的哪些事~

随着数字化转型的推进&#xff0c;制造业也逐渐意识到数字化转型的重要性。数字化转型不仅可以提高制造业的效率和品质&#xff0c;还可以降低成本和提高客户满意度。在数字化转型中&#xff0c;低代码搭建制造管理系统是一种比较有效的方式。本文将介绍低代码搭建制造管理系统…

深入篇【C++】类与对象:再谈构造函数之初始化列表与explicit关键字

深入篇【C】类与对象&#xff1a;再谈构造函数之初始化列表与explicit关键字 Ⅰ.再谈构造函数①.构造函数体赋值②.初始化列表赋值【<特性分析>】1.至多性2.特殊成员必在性3.必走性&#xff1a;定义位置4.一致性5.不足性 Ⅱ.explicit关键字①.隐式类型转化②.作用 Ⅰ.再谈…

Spring Cloud Alibaba 集成 sentinel ,sentinel控制台不能检测到服务,但是在命令行配置启动参数就能看到服务

问题背景 Spring Cloud Alibaba 集成 sentinel &#xff0c;sentinel代码写的限流降级的功能都是好的&#xff0c;但是sentinel控制台不能检测到服务&#xff0c;在程序启动时配置JVM启动参数&#xff08;-Dcsp.sentinel.dashboard.serverlocalhost:18080 -Dproject.namename-…

分公司的负责人要如何承担责任

一、分公司的负责人要如何承担责任 1、分公司的负责人不需要承担责任&#xff0c;因为没有法人资格&#xff0c;没有独立的财产权。根据相关法律规定&#xff0c;分公司的债务由总公司承担连带责任&#xff0c;当然可以先由分公司的全部财产承担。 2、法律依据&#xff1a;《…

小白量化《穿云箭集群量化》(9)用指标公式实现miniQMT全自动交易

小白量化《穿云箭集群量化》&#xff08;9&#xff09;用指标公式实现miniQMT全自动交易 在穿云箭量化平台中&#xff0c;支持3中公式源码运行模式&#xff0c;还支持在Python策略中使用仿指标公式源码运行&#xff0c;编写策略。 我们先看如何使用指标公式源码。 #编程_直接使…

【2023秋招】每日一题:P1087-美团3-18真题 + 题目思路 + 所有语言带注释

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&…

【C生万物】 指针和数组笔试题汇总 (下)

欢迎来到 Claffic 的博客 &#x1f49e;&#x1f49e;&#x1f49e; &#x1f449; 专栏&#xff1a;《C生万物 | 先来学C》&#x1f448; 前言&#xff1a; 承接上文&#xff0c;继续进行指针和数组的练习。 目录 Part2:指针笔试题 1.做题 …

硬件系统工程师宝典(24)-----如何能够正确理解三极管?

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。上篇我们说到不同材质的磁珠&#xff0c;频率阻抗特性不同&#xff0c;根据磁珠的频率阻抗特性曲线&#xff0c;磁珠在低频时电感起作用&#xff0c;…

Java开源工具库使用之压测JMeter

文章目录 前言一、概念原理1.1 Jmeter 原理1.2 性能测试术语1.3 web项目性能标准 二、常用元件2.1 线程组2.2 取样器2.3 控制器2.4 定时器2.5 前置/后置处理器2.6 配置元件2.7 监听器 三、插件3.1 第三方插件3.2 录制插件 四、JSR223 脚本及函数4.1 JSR223 脚本4.2 函数变量 五…

职场难题:克服压力、提升自我能力,勇闯职场巅峰

在当今激烈的职场竞争中&#xff0c;职场难题时常出现&#xff0c;如何进行有效沟通、如何应对工作压力、如何提升职业能力等&#xff0c;这些问题都是需要克服的问题。作为一名在职场中求生存&#xff0c;求发展的职业人士&#xff0c;我们必须学会适应这些挑战&#xff0c;掌…

Java基础面试题突击系列1

&#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我不迷路 ❤️《java面试核心知识》突击系列&#xff0c;持续更新… &#x1f490; 面试必知必会学习路线&#xff1a;Java技术栈面试系列SpringCloud项目实战学习路线 &#x1f4dd;再小的收获x365天…

面了个 Java 实习生,小伙很优秀!

大家好&#xff0c;我是鱼皮&#xff0c;前几天给自己的公司面试了一位 Java 暑期实习生&#xff0c;候选人目前是大三。 整个过程我都录屏了&#xff0c;并且在征得候选人的同意后&#xff0c;把面试过程分享出来。一方面是希望对其他在学编程找工作的小伙伴有一些启发和参考…

强化学习代码规划之深度学习预备

现在到了自动编码器和解码器&#xff0c;同样&#xff0c;先练几遍代码&#xff0c;再去理解 import torch import torch.nn as nn import torch.utils.data as Data import torchvision import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matpl…

文心一言和ChatGPT最全对比

文心一言和ChatGPT都是基于深度学习技术的自然语言处理模型&#xff0c;有各自的优势和使用场景&#xff0c;无法简单地比较 ChatGPT 和文心一言哪一个功能更强大&#xff0c;它们各自具有优势和局限性&#xff0c;需要根据具体需求进行选择&#xff0c;以下一些具体对比&#…

HttpRunner 接口自动化测试进阶

这里我们介绍一下通过调试源码的方式来做接口测试&#xff1a; 1、获取源码 github下载或pycharm的git checkout功能去获取&#xff0c;这里直接下载 通过ide打开解压后的源码包 源码包含三层目录结构&#xff1a;docs帮助文档、httprunner核心库、tests自测文件 2、源码结…

小白量化《穿云箭集群量化》(8) 实盘核聚变氢弹策略

小白量化《穿云箭集群量化》&#xff08;8&#xff09; 核聚变策略 上一篇介绍了超级订单SuperOrder功能在股票上买入策略&#xff0c;这篇介绍MetaTrader5期货外汇的双向交易策略。 交易策略比较有名的是马丁策略&#xff0c;马丁策略是单向策略。 我们设计了双向策略原子弹策…