Jmeter笔记
2021年11月27日
一、Jmeter介绍
1.Jmeter重要组件:
1)配置元件---Config Element:
用于初始化默认值和变量,以便后续采样器使用。配置元件大其作用域的初始阶段处理,配置元件仅对其所在的测试树分支有效,如,在同一个作用域的任何采样器前。
2)前置处理器--- Pre Processors:
前置处理器会在采样器发出请求之前做一些特殊操作。如果前置处理器附着在某个采样器之下,那么它只会在该采样器运行之前执行。前置处理器通常用于在采样器发出请求前修改采样器的某些设置,或者更新某些变量的值(这些变量不在服务器响应中获取值)。
3) 计时器---Timer:
定时器会让作用域内的每一个采样器都在执行前等待一个固定时长,如果不设定这种延迟,JMeter可能会在短时间内产生大量访问请求,导致服务器被大量请求所淹没。如果为线程组添加了多个定时器,那么JMeter会将这些定时器的时长叠加起来,共同影响作用域范围内的采样器。定时器可以作为采样器或者逻辑控制器的子项,目的是只影响作用域内的采样器。
4) 采样器---sampler:
采样器告诉JMeter发送一个请求到指定服务器,并等待服务器的请求。采样器会按照其在测试树中的顺序去执行,还可以用逻辑控制器来改变采样器运行的重复次数。
5)后置处理器---Post Processors:
后置处理器会在采样器发出请求之后做一些特殊操作。如果后置处理器附着在某个采样器之下,那么它只会在该采样器运行之后执行。后置处理器通常被用来处理服务器的响应数据,特别是服务器响应中提取数据。
6)断言---Assertions:
用户可以使用断言来检查从服务器获得的响应内容。通过断言可以测试服务器返回的响应与测试人员的期望是否相符
7)监听器---Listener:
监听器提供了对JMeter在测试期间收集到的信息的访问方法。"图形结果"监听器会将系统响应时长绘制在一张图片之中。"查看结果树"监听器会展示采样器请求和响应的细节,还可以将测试数据导入到文件之中,以供后续分析。
8) 逻辑控制器---Controller:
逻辑控制器可以帮助用户控制JMeter的测试逻辑,特别是何时发送请求。逻辑控制器可以改变其子测试元件的请求执行顺序。
2.组件执行顺序:
测试计划的元素执行是有序的,通过以下方式执行:
1)–配置元件(Config Element)
2)–前置处理器(Pre Processors)
3)–定时器(Timer)
4)–取样器(sampler)
5)–后置处理器(Post Processors,只在有结果可用情况下执行)
6)–断言(Assertions,只在有结果可用情况下执行)
7)–监听器(Listener,只在有结果可用情况下执行)
3.组件作用域:
元件收集其作用范围的每一个sampler元件的信息并呈现,在jmeter中,元件的作用域是靠测试计划的的树型结构中元件的父子关系来确定的,作用域的原则是:
1).采样器(sampler):元件不和其它元件相互作用,因此不存在作用域的问题。
2).逻辑控制器(Logic Controller):元件只对其子节点中的取样器 和 逻辑控制器作用。
3).除采样器 和 逻辑控制器 元件外,其他6类元件,如果是某个sampler的子节点,则该元件只对其父子节点起作用。
4).除采样器和逻辑控制器元件外的其他6类元件,如果其父节点不是sampler ,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)。
二、设置固定参数
1.配置元件-CSV Data Set Config的设置
A、配置参数:
name中填写接口的参数名
value值填写${username}
2.数据库获取参数
A.不同数据库连接JDBC 的方法
mysql数据库:在jmeter的lib/ext目录下添加mysql-connection-java-5.1.26-bin.jar包
sql server 数据库:下载sqljdbc4.jar 放到 jmeter根目录的lib目录下
oracle数据库:将oracle数据的安装目录下面的\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar 放到jmeter根目录下的lib目录下
B.配置元件-JDBC Connection Configuration(配置数据库链接)
C.取样器(Sampler)-JDBC Request
获取参数时:value值填写${id_1}
3.用户定义的变量
A.添加前置处理器-用户参数
4.从函数获取变量
A.jmeter的函数获取,如__Random,__CSVRead,__StringFromFile,等;
B.具体调用方法如下:
方法的获取可以在jmeter如下位置找到${__Random(,,)}方法的第一个参数为随机数的下限,第二个参数为随机数的上限,第三个参数为储存随机数的变量名;${__CSVRead(,)}方法中第一个参数是文件名,第二个参数是文件中的列(列数从0开始);${__StringFromFile(,,,)}方法中第一个参数是文件名,${__StringFromFile(,,,)}方法中没有指定读取文件中的哪一列的参数,所以${__StringFromFile(,,,)}只能读取包含一列的文件
三.正则表达式获取参数
1.添加后置处理器-正则表达式
2.获取脚本
"id":(.+?),
3.正则常用规则
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。
【.】匹配任意字符
【*】匹配任意字符长度
【+】一次or多次
【?】遇到第一个匹配值即结束
数字:^[0-9]*$
零和非零开头的数字:^(0|[1-9][0-9]*)$
26个英文字母组成的字符串: ^[A-Za-z]+$
引用名称(Reference Name):Jmeter变量的名称,存储提取的结果;即下个请求需要引用的值、字段、变量名(例子中我提取的是SOCIAL_NO)
引用方法:引用方法:${引用名称}
正则表达式(Regular Expression):使用正则表达式解析响应结果,“()”表示提取字符串中的部分值,请不要使用“||”,除非你本身需要匹配这个字符。
下面是常用的正则表达式操作符:
模板(Template):从匹配的结果中创建一个字符串,这是通过正则表达式匹配出来的一组值,意为使用提取到的第几个值(可能有多个值匹配,因此使用模板);从1开始匹配,以此类推.
参数可以在取值模板组合使用,例如:“11-22”作为模板得到的值是使用“-”连接的第一个待匹配内容与第二个待匹配内容组合而成的字符串。
匹配数字(Match No):正则表达式匹配数据的结果可以看做一个数组,表示如何取值:0代表随机取值,正数n则表示取第n个值(比如1代表取第一个值),负数则表示提取所有符合条件的值。
缺省值:匹配失败时候的默认值;通常用于后续的逻辑判断,一般通常为特定含义的英文大写组合,比如:ERROR
四、设置全局变量
1.先获取变量:添加后置处理器-正则表达式
Set-Cookie: PHPSESSID=(.*); path=/
2.再设置全局变量:添加后置处理器-BeanShell PostProcessor
${__setProperty(QPHPSESSIDTG,${PHPSESSIDTG},)}
五、集合点
1.添加:定时器-同步定时器 Synchronizing Time
六、其他
1.模拟IP
X-Forwarded-For
${__Random(10,200,)}.${__Random(2,255,)}.${__Random(2,255,)}.${__Random(1,255,)}
2.固定定时器
定时器-固定定时器(用于等待时间)