一,Jmeter工作原理
Jmeter
是通过线程组来驱动多线程运行测试脚本,对被测服务器发起请求。
二.jmeter的常用组件
1.,测试计划
一个测试场景和测试脚本的开始
2,.线程组
模拟用户的并发数
线程属性:
线程数:
10
Ramp-Up
时间(秒):
1
循环次数:永远
表示在
1
秒内,启动
10
个线程发送请求给服务器,
10
个用户请求发出后,再次启动
10
个线程,发送请求,无限
循环
……
调度器:
持续时间(秒):
120
表示脚本在
1
秒内启动
10
个线程发起请求,持续测试时间为
2
分钟
3. HTTP
取样器
用来发送和接收
http
请求消息,
URL
组成
=
协议
+
域名或
IP+
端口号
+
路径
4.
监听器
用来监听并展示结果,最常用的两个监听器:查看结果树和聚合报告
查看结果树:
由取样器结果
+
请求
+
响应数据
取样器结果:
Response code:200
,
http
状态码
Response message:OK
,响应信息
请求: 请求头 和请求体
响应数据: 响应头 和响应体
聚合报告
: 用来统计性能数据
5.
断言
用来比较预期结果和实际结果是否一致
Field to Test
:测试的字段
Text Response
:匹配从服务器返回的响应文本
Response Code
:匹配响应状态码
Response Message
:匹配响应信息。如:
OK
Response Headers
:匹配响应头
Request Headers
:匹配请求头
URL Sampled
:匹配
URL
链接,针对请求数据
Document(text)
:解析服务器响应文档的内容,如:
PDF, Offiffiffice
等文档中的内容,但会很耗内存,而且也
很容易解析失败,因此一般普通
http
请求不要选择这个
Ignore Status
:当我们要验证异常情况如
404
,
501
等
http
响应代码时,需要勾选
"ignore status"
,因为当
http
响应代码为
400,500
时,
Jmeter
默认这个请求是失败
Request Data
:匹配请求数据
Pattern Mactching Rules
:匹配的规则
Contains
:返回的结果包括所指定的内容,支持正则匹配
Matches
:根据指定内容进行匹配,支持正则匹配
Equals
:返回结果与所指定的内容一致,不支持正则表达式
Substring
:返回结果包括所指定结果的字符串,不支持正则匹配
Not
:非
Or
:或
注意:
1
、
“Equals”
和
“Substring”
模式是纯字符串,不支持正则表达式。
2
、
“
匹配
”
和
“Equals”
要
完全等于
字符串,或者字符串的正则表达式形式。
3
、
“
包含
”
和
“Substring”
只需要
包含
有模式字符串,而不必完全相等。
解决响应结果中乱码的方法
线程组
---->
后置处理器
---->bean shell postprocessor----->
输入:
prev.setDataEncoding("utf-8");
6.
参数化
将脚本中某些固定不变的值(常量)设置为一个变量、在脚本运行时变量会自动去读取文件中不同的数据,这个过程
称为参数化
1.
user defifined variables
:用户定义的变量
用户定义变量,一般用来实现全局变量参数化,
引用变量方法:
${
变量名
}
2.
CSV Data set confifig
:
CSV
数据文件设置
1
.
文件名:即参数化的文件
2
.
文件编码:通常采用
UTF-8
3
.
变量名称:参数的变量名,多个变量时,中间采用英文逗号分隔
4
.
忽略首行:读取文件时,是否需要读取
Excel
文件中的第一行数据
5
.
分隔符:
csv
文件默认为英文的逗号,也可以采用制表符
\t
6
.
是否允许带引号:读取文件时,是否允许值包含双引号,如果选择
Fasle
,取值的参数中有双引号,取值正常,如果选
择
True
,取值的参数中有双引号,影响取值
7
.
遇到文件结束符再次循环:线程组在运行过程中如果
csv
文件中的数据使用完,是否从头开始获取
csv
数据
8
.
遇到文件结束符停止线程:线程组在运行过程中如果
csv
文件中的数据使用完后,是否停止线程运行
9
.
共享线程模式:
所有线程:测试计划下所有的线程组,共同使用
csv
数据文件中的数据
当前线程组:测试计划下所有的线程组独立使用
csv
数据文件中的数据
当前线程:测试计划下所有的线程组每一次循环时所有的线程取值都相同
二. 关联
当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理,
Jmeter
可以
通过后置处理器中的正则表达式提取器来处理关联。
1.
自动关联
Http cookie manager
:自动把登录成功的
cookie
关联到后面的取样器,必须在同一线程组
2.
手动关联
正则表达式:通过一个表达式,从一堆数据中提取符合某一特征的数据
3.
跨线程组调用
cookie
,
sessionid
,
token
,需要使用的函数
${__setProperty(global_cookie,${cookie},)}
:
${cookie}:
登录成功后通过正则表达式提取得到的
cookie
值
global_cookie
:变量的名称
该函数的作用是将提取到的
cookie
值赋值给
global_cookie
,成为全局变量
${__property(global_cookie,,)}:
用于调用全局变量