JMETER是运行在JVM虚拟机上的,每个进程的开销比loadrunner的进程开销大,如果以进程的方式来运行每台负载机上的进程数量不会允许太多,当有大量并发时就需要大量的负载机,jmeter选择了以线程方式来运行。jmeter通过线程组来驱动多个线程运行测试脚本对被测服务器发起负载,每一个负载机上都可以运行多个线程组。jemter运行场景不仅可以再gui方式中完成,还可以运行命令行,而且命令行的运行方式对于负载机的资源消耗会更小。Jmeter基本原理是建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,可以通过监听来记录测试结果;
如果取样器中有参数化需求,可以通过配置元件或者前置处理器来完成;
如果取样器中有关联需求,可以通过后置处理器来完成;
如果要模拟负载场景,比如模拟多少用户,运动多长时间,可以通过线程组完成;
如果要模拟并发场景,可以通过定时器来完成;
如果要控制业务的执行逻辑,比如登录只运行一次,可以通过控制器来完成;
一:jmeter远程运行,远程运行架构图
1:控制机
运行多台jmeter负载机进行性能测试时,被选中作为管理机的那台机器就是控制机。控制机也可以参与脚本的运行,同时它也担负管理远程负载机指挥远程负载机运行工作,且收集远程负载机运行测试结果。
2:负载机
负载机就是向被测应用服务发起负载(请求)的机器。控制机同时也是一台负载机。jmeter负载机受控制机(jmeter负载机)的管理。与支持其他远程运行的测试工具一样,负载机受控制机管理首先要启动一个客户端程序(Agent:jmeter-server.bat),这样控制机才可以接管负载机。控制机会把运行的脚本隐蔽的发送到远程负载机,但是运行的测试脚本有参数文件或者依赖jar包时,控制机并不能把他们发送到远程负载机,这种情况就需要手动拷贝,也可以用工具实现自动拷贝。
3:远程运行逻辑
远程负载机首先启动agent程序,待控制机连接;控制机连接上远程负载机;控制机发送指令(脚本及启动命令)启动线程;负载机运行脚本,回传状态(包括测试结果);控制机收集结果并显示
二、Jmeter结构体系及运行原理:https://www.cnblogs.com/luihengk/p/6897955.html
把Jmeter的结构体系拆分为三维空间,如图:
X1~X5:是负载模拟的一个过程,使用这些组件来完成负载的模拟;
X1:选择协议,模拟用户请求,检查服务器响应是否正确,然后收集结果信息;
X2:完善测试脚本部分,包括参数化,关联等;
X3:控制测试脚本业务逻辑;
X4:集合点,模拟用户并发;
X5:用户数,一个线程代表一个用户;
Y1:可以理解为选择协议,包含负载模拟部分,负责模拟用户请求;
Y2:可以理解为检查点,结果验证部分,负责验证结果正确性;
Z:可以理解为监控器,负责结果的收集,监听器不仅可以放在线程组之内,也可以放在线程组之外;
Jmeter运行原理:
Jmeter基本原理是建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,可以通过监听来记录测试结果;
如果取样器中有参数化需求,可以通过配置元件或者前置处理器来完成;
如果取样器中有关联需求,可以通过后置处理器来完成;
如果要模拟负载场景,比如模拟多少用户,运动多长时间,可以通过线程组完成;
如果要模拟并发场景,可以通过定时器来完成;
如果要控制业务的执行逻辑,比如登录只运行一次,可以通过控制器来完成;
三、Jmeter科普:https://www.cnblogs.com/feifei-cyj/p/7746389.html
1、测试分类
从图中可以看出,性能测试在整个软件测试环节中占了50%的内容,比如负载测试、压力测试、性能测试、大数据量测试、恢复测试、内容泄露测试、竞品测试(比较测试)和可靠性测试。
2、性能测试流程
(1)业务学习:通过查看文档,手动操作系统来来了解系统性能;
(2)需求分析:分析系统非功能需求,圈定性能测试的范围,了解系统的性能指标;
(3)工作评估:工作量分解,评估工作量,计划资源投入;
(4)设计模型:圈定性能测试范围后,把业务模型映射成测试模型;
(5)计划编写:计划测试工作,在文档中明确列出测试范围、人力投入、持续时间、工作内容、风险评估、风险应对策略等;
(6)脚本开发:录制或者编写性能测试脚本;
(7)测试环境准备:性能测试环境准备包括服务器与负载机两部分,服务器是被测系统的运行平台,负载机是我们用来生产负载的机器,用来安装负载工具,运行测试脚本;
(8)测试数据准备:根据测试模型来准备被测系统的主数据与业务数据;
(9)测试执行
(10)缺陷管理:对性能测试过程中发现的缺陷进行管理;
(11)性能分析:对性能测试过程中暴露出来的问题进行分析,找出原因;
(12)性能调优:性能测试人员与开发人员一起来解决性能问题;
(13)测试报告:测试工作的重要交付文件,对测试结果进行报告,主要包括性能指标说明(tps、rt、cpu等);
性能测试主要交付件:
1 测试计划 2 测试脚本 3 测试程序 4 测试报告或者阶段性测试报告
(14)评审:对性能报告中的内容进行评审,确认问题,评估上线风险。
3、性能测试成功与失败要素
重点关注点:
1 评估系统,需求分析 2 场景设计、用例设计 3 测试执行、是否通过 4 性能诊断优化
(1)评估系统,需求分析
对性能测试进行需求分析,通常情况下测试人员会直接依赖需求人员或者项目经理的口述或者有缺陷的文档。实际上,大多数情况下我们测试人员需要自己来引导相关的运维人员和需求人员给出具体的需求数据,并对这些数据进行二次分析,得出我们真实的性能需求。
对于初次上线的系统,我们需要使用同行的系统数据,进行用户行为分析和商业数据结构的估算为前提,利用性能估算法推算。得到的负荷和响应时间数据可以被应用于验证所计划的模型的能力,并帮助做出对策。
对于已经上线的系统,我们可以通过运维人员获取TPS和时间的比例分布图、用户数和时间的分布图、数据库ER关系图、容量数据等,直接精确得出目前系统的用户行为和业务数据关系,进而得出我们需要的性能需求。
(2)场景设计、用例设计
(3)测试执行、是否通过--需要关注的指标
(4)性能诊断优化
4、不同角色看性能
技术部门一般有下面几种角色:开发、测试、架构师、运维人员、(系统管理员、DBA)
(1)黑盒测试的角度
黑盒测试只关心应用程序的单步响应时间,性能好坏就看应用时间多少,也就是数据流经过服务器、服务器集群经过网络传输后往返的时间总和。
(2)开发角度
1 架构合理性 2 数据库设计合理性 3 代码 4 系统内存的使用方式 5 系统线程使用方式 6 系统资源是否有恶性,不合理竞争
(3)系统管理员角度
1 硬件资源利用率 2 JVM 3 DB 4 系统是否支持7*24的服务 5 扩展性,兼容性,最大容量,可能的瓶颈
(4)性能测试的角度
1 服务器硬件的性能 2 根据需求和历史数据制定性能目标 3 建立性能通过模型 4 对开发代码框架和硬件框架进行性能分析 5 针对开发发布版本的基准测试 6 执行软件性能验收及稳定性测试 7 生产环境的配置及优化 8 制定性能测试的测试用例 9 制定性能测试的场景设计 10 协调各部门配合 11 特定的性能分析
5、性能测试相关术语
(1)负载:模拟一万五操作对服务器造成压力的过程,比如模拟100个用户进行发帖。
(2)性能测试(Performance Testing):模拟用户负载来测试系统在负载情况下,系统的响应时间,吞吐量等指标是否满足性能需求。
(3)负载测试(load Testing):在一定软硬件环境下,通过不断加大负载(不同虚拟用户数)来确定在满足性能指标情况下能够承受的最大用户数。这些性能指标包括:TPS(每秒事务数)、RT(事务平均响应时间)、CPU using(CPU利用率)、MEM using(内存使用率)等软硬件指标。
性能关注响应时间,负载表示这个系统能承受多大用户量
(4)配置测试(Configuration Testing):为了合理地调配资源,提高系统运行效率,通过测试手段来获取、验证、调整配置信息的过程。
(5)压力测试强度测试(Stress Testing):在一定软硬件环境下,通过高负载的手段来使服务器资源处于极限状态,测试系统在极限状态下长时间运行是否稳定,确定是否稳定的指示包括TPS、RT、CPU using、MEM using等。
(6)稳定性测试(Endurance Testing):在一定软硬件环境下,长时间运行一定负载,确定系统在满足性能指标的前提下是否运行稳定。一般我们会在满足性能要求的负载情况下加大1.5倍-2倍的负载量进行测试。
(7)TPS:每秒完成的事务数,通常指每秒成功的事务数,性能测试中重要的综合性性能指标。一个事务是一个业务度量单位,有时一个事务会包括多个子操作,为了统计方便,会把着多个子操作记为一个事务。
(8)RT/ART(Response Timeaverage response time):响应时间/平均响应时间,指一个事务花费多长时间完成,一般取平均响应时间。
(9)PV(page view):每秒用户访问页面的次数,此参数用来分析平均每秒有多少用户访问页面。
(10)Vuser虚拟用户(Virtual user):模拟真实业务逻辑步骤的虚拟用户,虚拟用户模拟的操作步骤都被记录在虚拟用户脚本里。Vuser脚本用语描述Vuser在场景中执行的操作。
(11)Concurrency并发,并发分为狭义和广义两类。狭义的并发,即所有用户在同一时刻作品同一件事情或者操作;广义的并发,即多个用户进行完全一样的操作。
(12)场景(Scenario):性能测试过程中为了模拟真实用户的业务处理过程,在loadrunner中构建的基于事务、脚本、虚拟用户、运行设置、运行计划、监控、分析等一系列动作的集合,称之为性能测试场景。场景中包含了待执行脚本、脚本组、并发用户数、负载生成器、测试目标、测试执行时的配置条件等。
(13)思考时间(Think Time):模拟真实用户在实际操作时的停顿间隔时间。也就是说,用户在进行操作时,每个请求之间的间隔时间。
(14)标准差(Std. Deviation):标准差越小,说明波动越小,系统越稳定。