专业的编程技术博客社区

网站首页 > 博客文章 正文

jmeter组件介绍(jmeter常用组件)

baijin 2024-10-19 02:39:17 博客文章 8 ℃ 0 评论

jmeter执行顺序

  • 0、 配置元件(Config Element) 
  • 1、前置处理器(Pre Processors) 
  • 2、定时器(Timer) 
  • 3、取样器(Sampler) 
  • 4、后置处理器(Post Processors) 
  • 5、断言(Assertions) 
  • 6、监听器(Listener)
  • 逻辑控制器(controller)


1、线程组

进程:一个正在执行的程序就对应一个进程

线程:进程汇总的执行线索(一个进程有多个执行线索)

线程组:按照线程性质对线程进行分组

进程有多个线程组,线程组有对个线程


并发执行:多个线程同时执行,特点,执行结束顺序和线程的启动顺序不一致

顺序执行:按照线程的启动顺序挨个执行(测试计划中,独立运行每个线程组)

属性:

线程数:模拟用户数

时间值:在指定时间内启动所有线程。例如线程数为100,时间设定为10s,那么就是10s加载 100个线程,每秒启动的线程数=100/10=10;预热时间

循环数:单个用户访问的次数,-1表示永远

调度器-持续时间x: 在y秒后访问服务器,并且持续x秒(循环次数-1,永远)。会覆盖启动时间,结束时间

-启动时间y

调度器-启动时间x: 在M时开始访问,在N时结束

-结束时间y

2、同步定时器:所有线程启动完毕,再统一执行

属性1:一组用户数。同步定时器设置并发数==3,表示请求集合数量=3就释放一次线程(并发3个线程)

属性2:超时时间,0无限等待,慎用。若线程总数<集合点,会挂起(分多组并发,需整除)

同步定时器设置超时时间=5000(5s),表示时间到达5s后就释放一次已收到的线程,不论该请求数是否达到设置的值

3、内置函数:函数助手

_counter计数器

_random随机函数:左闭右闭

_time函数:将当前系统的时间转换成需要的格式,包括时间戳、年月日时分秒等格式

_timeShift函数:可以对当前系统时间进行加减操作

(1)对时间进行加减操作,需要使用首字母P

(2)要进行"天"的操作,需要使用字母D

(3)要进行"时分秒"的操作,需要使用字母T

__RandomDate函数:在指定的时间格斯范围内,随机生成一个时间

__RandomFromMultipleVars函数:在指定的几个参数值中,随机选取一个值。"源变量"

之间一定要用"|"符号进行分割。”源变量“需要添加到用户变量里边,在__RandomFromMultipleVars函数中引用他的变量名

__RandomString函数:在给定的"源字符串"中,随机选取指定长度的字符串,选取的每个字符可以相同

__jexl3函数:这个函数通常和if逻辑控制器一起使用,用来判断表达式是否达到预期再决定是否执行if控制器里面的逻辑

csvRead:和csv data set config类似,可以获取csv文件数据(执行多次使用循环次数),执行多次使用线程数,且设置路径时,必须是绝对路径

setproperty属性设置。将正则提取器的数据拿到,使用beanshell sampler执行函数,将值存共享空间。但不建议使用,生命周期长。跨线程组传值(独立线程组)

property属性获取。

3、逻辑控制器

IF 控制器:实现了代码中IF的功能,通过判断表达式的 True/False 来判定是否执行相应的操作

Loop Controller(循环控制器):如果同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的子节点运行的次数为两个数值相乘的结果。

While Controller(While控制器):表达式值为 “false” 时跳出循环,否则一直循环运行其节点下的元件;

Critical Section Controller(临界部分控制器):临界部分控制器相当于一个边范围控制器。

foreach控制器,左闭右开。变量前缀name,开始索引0,结束索引3,。循环name_01 name_02 name_03


Switch Controller(Switch控制器):

Include Controller(Include 控制器):filename路径的文件中包含有效测试片段,则正常执行

Include 控制器用来导入外部的测试片段(非完整的测试计划),被导入的测试计划有特殊要求,它不能有线程组,只能包含简单的控制器及控制器下的元件。相当于加了一个执行单元,一个封装了的业务操作单元,类似我们程序开发中的函数(方法)一样。

Interleave Controller(交替控制器)


Once Only Controller(仅一次控制器):在每个线程内,该控制器下的内容只会被执行一遍,无论循环多少次,都只执行一遍

Random Controller(随机控制器):随机控制器节点下的元件 随机运行一个,与交替控制器不一样的是节点下的元件运行顺序不定

Random Order Controller(随机顺序控制器):随机顺序控制器其节点下的原件 全部 随机执行 一遍 ,每个元件只执行一次


Runtime Controller(运行时间控制器):与线程组中的调度器的持续时间,效果一致

Module Controller(模块控制器):引用、调用 Module To Run 执行内容,引用范围为当前测试计划内的测试片段、逻辑控制器,被引用的逻辑控制器、测试片段可以为禁用状态,被引用后仍会被执行。

Transaction Controller(事务控制器):若事务控制器下的取样器多个,则需全部成功才算事务成功。

Transaction Controller 可将 Test Plan 中的部分组织成一个 Transaction,用于统计其响应时间、吞吐量等。该控制器范围内的所有处理时间都包含在这个时间中。

Recording Controller(录制控制器)

Simple Controller(简单控制器):适用于请求较多、需要分组的情况。


4、常量吞吐量定时器

模拟固定吞吐量的定时器。它可以控制测试计划中各个请求之间的时间间隔,以达到预期的吞吐量。

目标吞吐量:20/秒*60=1200


基于计算吞吐量 (Calculate Throughput based on) :

  • 只有此线程(this thread only) : 控制每个线程的吞吐量,选择这种模式时,总的吞叶量为设置的target Throughput 乘以该线程的数。目标吞吐量*线程数
  • 所有活动线程(all active threads) : 设置的target Throughput 将分配在每人活跃线程上,每活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程。目标吞吐量。
  • 当前线程组中的所有活动线程 (all active threads in current thread group) : 设置的target Throughput 将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和all active threads 选项的效果完全相同。目标吞吐量。目标吞吐量。
  • 所有活动线程(共享) (allavtive threads (shared) ) : 与allactive threads的选项基本相同,唯一区别是,每人活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。目标吞吐量/所有活动进程。
  • 当前线程组中的所有活动线程(共享) (all active threads in current thread group (shared) ) : 与al active threads in currentthread group 基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。目标吞吐量/单线程组下所有活动线程。

5、吞吐量控制器

Throughput Controller(吞吐量控制器):用来控制其下元件的执行次数,并无控制吞吐量的功能,想要控制吞吐量可以使用 Constant Throughput Timer 。

1)Total Executions 模式:按数量执行。不勾选per user:吞吐量;勾选per user:线程数*吞吐量

2)percent Executions 模式:按百分比执行(1-100)。

per user

勾选:每个线程会单独计算执行频率

不勾选(默认):所有线程统一计算执行频率


吞吐量控制器的总吞吐量次数,不能大于外面线程组的总迭代次数;如果大于外面线程组的总迭代次数,以线程组迭代次数为准

6、参数化csv data set config:执行次数,循环数

用户参数:执行次数,线程数

用户定义的变量:一版存储全局使用的变量

参数化函数:执行次数,线程数

7、连数据库

1、加载jdbc驱动

拷贝驱动mysql-connector-java-5.1.26.jar包放到jmetr安装目录下或在jmeter中的测试计划中导入

2、连接数据库

配置JDBC connection configuration

3、添加JDBC

8、xpath提取器

XML Parsing Options:XML 解析选项;

use tidy:勾选后,解析 HTML 数据。不勾选,解析 XML 数据;

use namespaces:如果启用该选项,后续的 XML 解析器将使用命名空间来分辨;

validate XML:根据页面元素模式进行检查解析;

ignore whitespace:忽略空白内容;

fetch external DTDs:如果选中该项,外部将使用 DTD 规则来获取页面内容;


引用名称:使用Xpath表达式提取出来的数据,保存到引用名称设置的变量中

XPath query:填写XPath表达式的地方

匹配数字:

-1:匹配所有

0:随机选中一个数就

1:选中匹配数据列表中的第一个数字

N:选中第N个数字

缺省值:没有匹配到时的默认值

9、正则提取器

1)引用名称:下一个请求要引用的参数名称,如填写cid,则可用${cid}引用它

2)正则表达式:

():括起来的部分就是要提取的内容;

.:匹配任何字符串;

+:一次或多次;

?:非贪婪模式,尽可能少匹配,在找到第一个匹配项后停止;

*:贪婪模式,尽可能多的匹配

3)模板:用$ $引用起来,如果在正则表达式中有多个正则表达式,则可以是2 223 33等等,表示解析到的第几个值给title。如:1 11表示解析到的第1个值

4)匹配数字:0代表随机取值,1代表第一个值,-1代表取所有值,通常情况下填0

如果匹配到有多个值,引用时,变量需要以这样的格式openid_1 、{openId_2}…引用

5)缺省值:如果参数没有取得到值,那默认给一个值让它取


10、json提取器

1)字段结果Apply to应用范围:选默认的 main sample only 就行了

2)Names of created variables:接收提取值的变量名。多个变量用 ; 分隔,调用的时候,使用:${var}

3)JSON Path expression:json path 表达式,用来提取某个值。多个表达式用 ; 分隔

提取满足特定条件的变量值:$.data[?(@.name==“测试人员A”)].oid

提取多个变量值:$.data.contractList.[?(@.modifyBtn==‘2’)].[“contractId”,“contractNo”]

4)Match No.(0 for Random): 取第几个值。多个值用 ; 分隔,0:随机(默认), -1:所有,11(N):第1(N)个值,非必传,默认为0,随机取

5)Compute concatenation var(suffix_ALL): 如果匹配到多个值,则将它们都连接起来,不同值之间用 , 分隔,变量会自动命名为 _ALL

6)Default Values:缺省值,匹配不到值的时候取该值,可写error,多个值用 ; 分隔,非必传

11、beanshell取样器

beanshell执行标准java语句和表达式,另外包括一些脚本命令和语法。


beabshell常用的内置函数

JMeter中的BeanShell元素提供了许多常用的内置函数,以下是其中一些常用的内置函数:

  1. log(String message):在JMeter日志中打印一条消息。
  2. System.out.println(String message):将一条消息打印到控制台。
  3. vars.get(String variableName):获取JMeter变量的值。
  4. vars.put(String variableName, String value):设置JMeter变量的值。
  5. props.get(String propertyName):获取JMeter属性的值。
  6. props.put(String propertyName, String value):设置JMeter属性的值。
  7. prev.getResponseDataAsString():获取前一个请求的响应数据作为字符串。
  8. prev.getSampleLabel():获取前一个请求的标签。
  9. prev.isSuccessful():检查前一个请求是否成功。
  10. prev.getTime():获取前一个请求的响应时间。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表