Jmter基础知识

JMeter的安装步骤和基础知识,自行百度
jmeter下载和安装(Windows环境下)
   前置条件:安装JDK,配置JDK环境变量。
  JMeter下载地址:https://jmeter.apache.org/download_jmeter.cgi。
  一般启动:解压,bin目录下的jmeter.bat即可启动(避免在有空格的路径中安装Jmeter,可能导致远程测试出现问题)。
  服务器模式启动:jmeter-server.bat。允许在远程节点上以服务器模式运行JMeter,并通过JMeter GUI来控制(分布式压力测试)

JMeter工作原理
  jmeter作为web服务器和浏览器之间的代理,以便捕获浏览器请求和web服务器的响应,容易的生成性能测试脚本,并利用性能测试脚本模拟真实用户对web服务器的访问压力。

脚本生成方式:
(自己编写)性能测试脚本通过模拟多线程对服务器(web服务器、应用服务器、数据库服务器)进行访问压力测试。
(脚本录制)浏器通过代理方式录制测试脚本对服务器(web服务器、应用服务器、数据库服务器)进行访问压力测试。我一般使用badboy工具录制
基础知识:
Bin目录下:jmeter.bat是windows的启动文件,双击可以打开jmeter运行,也可以通过双击jmeterw.cmd文件来启动,这样不会启动那个命令提示符的小黑框,由于我的安装目录权限问题,所以每次我都是右击–以管理员身份运行
1、测试计划:
测试计划是jmeter测试脚本的根节点,关于整个测试脚本的一些基础设置,可以在测试计划中设定,例如用户定义变量。一个完整的测试计划,会包含一个或多个线程组、逻辑控制器、采样器、监听器、定时器、断言和配置元件
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191206164814424.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RBTkdKVUFOVE9MWQ==,size_16,color_FFFFFF,t_70
Thread group(线程组):
通常添加使用的线程,一般一个线程组可看做一个虚拟用户组,其中每个线程为一个虚拟用户
在这里插入图片描述
线程属性-线程数:设置发送请求的用户数目 ,即并发数。
线程属性-Ramp-Up Period(in second):线程间的时间间隔,单位是秒。即所有线程在多少时间内启动。
线程属性-循环次数:请求的重复次数,如果选择后面的forever(默认),那么 请求将一直继续,如果不选择forever,而在输入框中输入数字,那么请求将重复指定的次数,如果输入1,那么请求将执行一次. (这里应该是指每个线程数,循环的次数)
调度器配置-持续时间:测试计划持续多长时间,会覆盖结束时间。
调度器配置-启动延迟:测试计划延迟多长时间启动,会覆盖启动时间。
Http相关:
信息头管理,http默认请求,httpcookie管理器
在这里插入图片描述
点击线程组添加配置元件→ CSV Data Set Config
在这里插入图片描述
对应的Http请求可以引用参数
在这里插入图片描述
查看结果树和聚合报告
在这里插入图片描述
在这里插入图片描述
Label:每个 JMeter 的 element (例如 HTTP Request )都有一个 Name 属性,这里显示的就是 Name 属性的值
#Samples:表示你这次测试中一共发出了多少个请求,如果测试计划模拟10个用户,每个用户迭代10次,这里就会显示100
Average:平均响应时间 — 默认情况下是单个 Request 的平均响应时间,当使用了事务控制器时,也可以以事务为单位显示平均响应时间
Median:中位数,也就是 50 %用户的响应时间
90% Line: 90 %用户的响应时间
Min:最小响应时间
Max:最大响应时间
Error%:错误率,本次测试中出现错误的请求的数量 / 请求的总数
Throughput:吞吐量 —— 默认情况下表示每秒完成的请求数( Request per Second )
KB/Sec:每秒从服务器端接收到的数据量


常用组件
测试计划:用来描述一个性能测试,所有内容都是基于测试计划的。相当于LR中的测试场景。可以添加扩展jar包。
线程组:LR中的虚拟用户组。(相当于LR中的action),包括普通线程组,setup thread group,teardown thread group几种。
  setup thread group:可用于执行预操作,这些线程的行为完全像一个正常的线程组元件,类似LR中的init。
  teardown thread group:可用于执行测试后动作,这些线程的行为完全像一个正常的线程组,类似LR中的end。
测试片段(Test Fragment):一种特殊的线程组,在测试树上与线程组处于同一层级,与线程组不同的是它不被执行,除非他是一个模块控制器或者是被控制器引用时才会被执行。它是一个辅助的组件,在此节点下几乎可以放置任何JMeter测试组件,但它一般不会被运行。他的作用如下(1)在脚本开发过程中可以用来备份元件;(2)TestFragment下的元件可以被模块控制器调用,我们可以利用它来模块化请求(把一个业务封装成一个方法供复用)供模块控制器调用。访问路径:测试计划→Test Fragment
工作台:它也不能直接参与运行,功能有:(1)在运用JMeter录制http协议脚本时就用到它,我们可以在它下面建立一个http代理服务器原件(HTTP代理服务器),设置代理信息然后进行录制访问路径:工作台→添加→非测试元件;(2)设置HTTP镜像服务器(HTTP Mirror Server);(3)显示当前JMeter属性信息(属性显示);(4)备份脚本,特别是我们在脚本调试过程中可以把它作为一个元件暂存区。
配置元件:提供对静态数据的支持。配置元件仅对所在测试分支有效。“用户定义的参数”会在测试初识阶段执行,无论它处于测试树的哪个位置,为了便于理解,建议放在线程组的开始部分。
HTTP授权管理器:辅助进行服务器监控测试。
HTTP cookie管理器:Session维护(每次反复清除cookies?不清除则第二次运行时还是处于登录状态)。
HTTP消息头管理器:消息头管理。
HTTP请求默认值管理器:请求默认值管理。
用户定义的变量:全局变量,不论放在任何地方都是全局参数。
定时器:用于设置等待时间,模拟用户习惯,类似于LR中的“思考时间”。如果需要在测试计划中某个位置添加暂停,可以使用“Test Action”采集器。
前置处理器:用于在实际的请求发出前对即将发出的请求进行特殊处理。只有sampler存在时才有意义。
后置处理器:对sampler发出请求后得到的服务器响应进行处理,类似LR中的关联。只有sampler存在时才有意义。
jmeter响应乱码问题处理:在http请求后面添加一个后置处理器,写入脚本:prev.setDataEncoding(“utf-8”)。
断言:检查测试中得到的数据是否符合预期,一般用于设置检查点,保证性能测试过程中的数据是否和预期一致。
beanShell断言。
响应断言
监听器:对测试结果数据进行处理和可视化展示。收集测试树中相同或更低级别测试元件的数据。
控制器
  Jmeter中有两种控制器:取样器(sampler)和逻辑控制器,用这些元件来驱动处理一个测试。

取样器:类似LR中的不同协议。包括FTP、HTTP、JDBC、Java object、JMS(Java 消息服务)、LDAP(轻量目录访问协议)、SOAP/XML-RPC、WebService(SOAP,主要涉及技术:XML、SOAP、WSDL、UDDI)。
 Webservice好处:跨防火墙通信,应用程序集成,B2B集成,软件和数据重用。
控制器:帮助用户控制jmeter测试逻辑,控制子元件请求执行顺序。包括两类,一类是用于控制sampler节点发送请求的逻辑顺序控制器,如if控制器,switch,runtime,循环控制器等。另一类是用来组织可控制sampler节点的,如事务控制器,吞吐量控制器等。
foreach控制器:该控制器只用于读取自定义变量值。 添加-用户自定义变量,变量命名格式:变量名_数字(从1开始计数)。其中:(1)变量前缀:自定义变量下划线前面的字符串;(2)取值范围,游标范围,从0开始计数。(3)输出变量名称:将每次得到的用户自定义变量存储到参数foreach参数中。
if控制器:类似变成语言中的if语句,根据给定表达式的值决定是否执行该节点下的子节点。
交替控制器:每次迭代时,顺序选取该节点下的一个子节点执行。选中ignore sub-controller blocks,表示该controller将其下的子controller当成单一元素处理,并允许每个子controller一次发出一个请求。
loop controller循环控制器:简单地为其下的子节点运行指定次数。
仅一次控制器:让testPlan中的某些内容在整个testplan执行期间对每个线程仅执行一次(如,每个线程仅需执行一次“登录”操作)。
随机控制器:每次执行时,从其子节点中随机选取一个来执行。
随机顺序执行控制器:每次执行时,按照随机产生的顺序执行旗下的所有子节点,与随机控制器不同之处在于,随机控制器只选择执行器所有子节点中的一个,而随机顺序执行控制器则按照随机顺序全部执行该controller下的所有子节点。
switch controller:类似switch函数,该controller根据给定的值n(可以使用参数)选择执行旗下的第n+1个子节点,switch controller只接受整数值,并且给定的值n是以0位基础的。
while controller:设置条件,根据条件进行循环控制。条件包括三种:(1)空:迭代执行controller下的所有子节点,直到最后一个子节点返回失败为止,非最后子节点失败,不会停止。(2)LAST,迭代执行controller下的所有子节点,直到最后一个子节点返回失败为止。同时,如果该controller上一个节点失败,则TestPlan在执行时不会进入该controller。(3)表达式:如果表达式的取值为FALSE,退出循环。表达式支持参数化设置。
事物控制器:会生成一个额外的采样器来测量其测试元素的总体时间,注意,时间包含该控制器范围内的所有处理时间,而不是采样器的时间。如果选中sample,事物采集器作为其下采样器的父采样器,否则,作为额外采样器添加在自采样器后面。
吞吐量控制器:允许用户设置被执行频率。
运行时长控制器:控制其下子测试元件允许运行的时长。(单位:秒)
模块控制器:
脚本编写
脚本录制(badboy,代理录制,fiddler录制)。
参数关联(正则表达式、Xpath(适合于返回XML响应)、jp@gc-JSON Path Extractor(适合于返回为json响应))。
调试(只跑需要调试的接口,其他接口禁用;增加断言进行结果判断;Debug sampler查看关联取值;查看结果树的regExp tester模式可以将中文乱码显示正确;HTML模式可以显示web页面)。
变量的提取(包括全局变量(包括IP、port、附件路径、CSV路径等,通常用用户定义的变量组件)、业务变量(通常使用用户参数组件,前置处理器—用户参数))。
脚本编写格式(规范化进行接口编写,调整可读性)(通常会将用户和服务器的一次交互(页面访问或者提交)请求放在一个简单控制器或者事物控制器中;根据用户操作也业务命名和编号)。

注意:

  1. 自己创建的数据自己删除,不要留垃圾数据(业务删除或数据库删除)。
  2. HTTP cookie管理器,注意作用域。
  3. 每个接口都需要增加断言,保证结果正确性。
  4. 相同的响应放在一个简单控制器中,所有的应用尽量放在一个线程组中,特殊场景单独抽离成一个线程组。
  5. web自动化脚本用简单控制器,性能测试脚本用事物控制器。 用户定义变量,作用域为整个测试计划,是全局变量;线程组中用户参数组件。
  6. csv里面有特殊字符时,allow quoted data值设置为TRUE。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值