一、测试计划
二、添加线程组
setUp线程组:执行测试计划时,在普通线程组前执行
tearDown线程组:执行测试计划时,在普通线程组后执行
线程组:普通线程组,组与组之间独立运行
示例:
线程设置
取样器错误后要执行的动作
继续:忽略错误,继续执行
启动下一进程循环: 忽略错误,线程当前循环终止,执行下一个循环。
停止线程:当前线程停止执行,不影响其他线程正常执行。
停止测试:整个测试会在所有当前正在执行的线程执行完毕后停止
立即停止测试:整个测试会立即停止执行,当前正在执行的取样器可能会被中断。
线程属性
线程数:并发测试,每个线程独立完成测试计划;常用与模拟对服务器的并发访问
Ramp-Up时间:启动所有线程数 所需要的的时间,上一个线程与下一个线程启动间隔时间=Ramp-Up时间/未总线程数 [仅在线程数>1时有效]
(示例:线程数5 Ramp-Up时间50 第二次线程在第一次线程启动10s后启动
循环次数:全部线程结束后的循环次数
Tips:压测qps - 线程数设置30,请求10s,再请求20s,再请求30s,分别看下吞吐量
调度器配置
调度配置:循环次数勾选 永远 时可以通过调度器控制线程执行时间
持续时间(秒):控制测试执行的持续时间(启动线程后的执行时间),以秒为单位。(循环次数 优先级高于 持续时间)
启动延迟(秒):控制测试在多久后启动执行(例:30s,则启动测试计划30s后执行此线程,循环次数永远时延迟后启动线程开始计算持续时间),以秒为单位。
三、添加参数变量的方法
说明:调试取样器:线程组- 右键 - 添加 - 取样器 - 调试取样器(常用来查看Jmeter运行前后 的参数值是否为预期数据)
1、用户参数:线程组 - 右键 - 添加 - 前置处理器 - 用户参数
运行效果:
2、随机变量:线程组 - 右键 - 添加 - 配置元件 - 随机变量
运行结果:
3、用户定义的变量:线程组 - 右键 - 添加 - 配置元件 - 用户定义的变量
4、CSV 数据文件设置:线程组 - 右键 - 添加 - 配置元件 - CSV 数据文件设置 (从本地文件(格式:.csv .txt等)读取)
运行结果:
5、BeanShell 设置变量
//设置变量 vars.put("case_id","case_00001");
执行结果
四、连接数据库
1、引用jar包
oracle :引用JDBC驱动jar包;ojdbc14.jar 放到lib/ext下
mysql :引用mysql驱动jar包; mysql-contentor-java-8.0.18.jar 放到lib/ext下
2、连接Oracle
添加 JDBC Connection Configuration(线程组--右键--添加--配置元件--JDBC Connection Configuration)并配置
Database URL:
oracle:jdbc:oracle:thin:@IP:端口/名称
mysql:jdbc:mysql:// 数据库IP:端口/名称
JDBC Driver Class:
Oracle:oracle.jdbc.driver.OracleDriver
mysql:com.mysql.jdbc.Driver;
3、添加JDBC Reques(线程组--右键--添加--取样器--JDBC Request)
运行结果
五、http请求
1、 http请求默认值
用于设置其作用范围内的所有HTTP的默认值,可被设置的内容包括HTTP请求的host、端口(不填写默认为80)、协议等
-
-
- 作用范围内,添加任一或多个http请求时可以省略web服务器的配置,获取默认值
-
- 作用范围内,如果其中http请求 有不一样的ip或端口时http请求中的配置值优先获取)
-
2、 HTTP信息头管理器
用于定制Sampler发出的HTTP请求的请求头的内容。不同的浏览器发出的HTTP请求具有不同的Agent,访问某些有防盗链的页面时需要正确的Refer...这些情况下都需要通过HTTP Header Manager来保证发送的HTTP请求是正确的
几种常见的信息头

Accept
作用: 浏览器端可以接受的媒体类型
例如: Accept: text/html 代表浏览器可以接受服务器回发的类型为 text/html 也就是我们常说的html文档,
Accept-Encoding
作用: 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法。例如:Accept-Encoding: zh-CN,zh;q=0.8
Accept-Language
作用: 浏览器申明自己接收的语言。
Connection
例如: Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接
例如: Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。
Host(发送请求时,该报头域是必需的)
作用: 请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的
例如: 我们在浏览器中输入:http://www.hzau.edu.cn
浏览器发送的请求消息中,就会包含Host请求报头域,如下:
Host:www.hzau.edu.cn
此处使用缺省端口号80,若指定了端口号,则变成:Host:指定端口号
Referer
当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,
服务器籍此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,
他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。
User-Agent
作用:告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本.
我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,
你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,
服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。
cookie
Cookie是用来存储一些用户信息以便让服务器辨别用户身份的(大多数需要登录的网站上面会比较常见),
比如cookie会存储一些用户的用户名和密码,当用户登录后就会在客户端产生一个cookie来存储相关信息,
这样浏览器通过读取cookie的信息去服务器上验证并通过后会判定你是合法用户,从而允许查看相应网页。
当然cookie里面的数据不仅仅是上述范围,还有很多信息可以存储是cookie里面,比如sessionid等。
Cache-Control
用来指定当前的请求/回复中的,是否使用缓存机制。
Content-Type
请求体的MIME类型 (用于POST和PUT请求中)
Expect
表示客户端要求服务器做出特定的行为
3、HTTP Cookie管理器
用于管理Test Plan运行时的所有Cookie。像Web浏览器一样存储和发送Cookie。如果您有HTTP请求并且响应包含cookie,则Cookie管理器会自动存储该cookie,并将其用于将来对该特定网站的所有请求。
JMeter检查收到的cookie是否对URL有效,这意味着不存储跨域cookie。
如果您有行为错误或希望使用跨域cookie,请定义JMeter属性“ CookieManager.check.cookies = false ”
如果收到的Cookie可以存储为JMeter线程变量。要将cookie保存为变量,请定义属性“ CookieManager.save.cookies = true ”
cookie名称在存储之前以“ COOKIE_ ” 为前缀 要恢复原始行为;(这可以避免意外损坏局部变量),请定义属性“ CookieManager.name.prefix = ”(一个或多个空格)。eg:引用变量时格式:$ {COOKIE_TEST}
您可以手动将Cookie添加到Cookie管理器;cookie将由所有JMeter线程共享
默认情况下,将忽略 具有空值的Cookie 。这可以通过设置JMeter属性来更改:CookieManager.delete_null_cookies = false。(这也适用于手动定义的cookie - 任何此类cookie将在更新时从显示中删除)
cookie名称必须是唯一的 - 如果第二个cookie使用相同的名称定义,则它将替换第一个cookie
1、手动添加cookie到Cookie管理器
运行结果
2、cookie设置为Jmeter线程变量
定义属性“ CookieManager.save.cookies = true ”
4、固定定时器
设定每个线程请求之前的等待时间(固定定时器的延时不会计入当前sampler 的响应时间里,但是会计入事务控制器的时间(相当于模拟用户的思考时间))
5、BeanShell 后置处理程序
编写代码时注意每行代码以分号结尾

FileWriter fstream=new FileWriter("D:\\testdata\\case.txt",true); BufferedWriter out=new BufferedWriter(fstream); out.write("打印数据" + vars.get("name_id")); out.close(); fstream.close();
6、响应断言
对某个请求的结果进行判定
··
六、响应中提取信息
1、正则表达式提取

正则说明: . 表示除“\r\n”之外的任意字符 * 表示匹配前面的子表达式任意次 + 表示匹配前面的子表达式1次或多次 ? 表示匹配前面的子表达式0次或1次 .*:贪婪匹配原则,即匹配到不能匹配为止 .*?:非贪婪匹配,即在匹配成功的情况下尽可能少的匹配
2、边界值提取
左边界数据尽量唯一,否则会提取到重复数值
运行结果
七、控制器
1、循环控制器
控制控制器下内容的循环次数
运行结果
2、if控制器
判断该控制器下的内容是否执行
运行结果
3、简单控制器
没有逻辑及运行判断校验,可当做分组、分类使用
4、仅一次控制器
在一个线程多次循环时,仅一次控制器中的内容只会执行1次
5、ForEach控制器
6、事务控制器
八 监听器
1、查看结果树
2、聚合报告
样本:请求的次数,计算公式是线程数*循环次数,如果线程组配置勾选了永远,那么就是你停止测试时实际发送的请求数 平均值:响应时间的平均用时,单位是毫秒。比如这里的平均响应时间是38毫秒 中位数:响应时间的中位数,单位是毫秒。 90%百分位:90%的响应时间小于该数值,单位是毫秒。这里有90%的响应时间小于22毫秒 95%百分位:含义和90%类似 99%百分位:含义和90%类似 最小值:本轮测试最小响应时间,单位是毫秒。 最大值:本轮测试最大响应时间,单位是毫秒。 异常%:本轮测试出现异常的请求比例。 吞吐量:可以理解为QPS,即是我们测试的接口处理请求的能力。比如这里是平均每秒可以处理2.2次请求 接收KB/Sec:响应数据的接收速率 发送KB/Sec:请求数据的发送速率

1、Lable:Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值;
2、#Samples:表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100;【我的是用户有100,只迭代一次,因此也是100】
3、Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间;
4、Median:中位数,也就是 50% 用户的响应时间;
5、90% Line ~ 99% Line:90% ~99%用户的响应时间;
6、Min:最小响应时间;
7、Maximum:最大响应时间;
8、Error%:本次测试中出现的错误率,即 错误的请求的数量/请求的总数;
9、Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction ;
10、Received KB/src:每秒从服务器端接收到的数据量;
11、Sent KB/src:每秒从客户端发送的请求的数量。
3、图形结果
样本数目:总共发送到服务器的请求数.
最新样本:代表时间的数字,是服务器响应最后一个请求的时间.
吞吐量:服务器每分钟处理的请求数.
平均值:总运行时间除以发送到服务器的请求数.
中间值:时间的数字,有一半的服务器响应时间低于该值而另一半高于该值.
偏离:服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布.
拓展
查看异常原因
连接数据库遇到的问题
1、运行提示:Name for DataSoure must not be empty in JDBC Request
解决方法:检查JDBC Connection Configuration和JDBC Request下的:Variable Name Bound to Pool是否一致
2、运行提示:Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'
解决方法:检查或导入jar包( jar包只需要导入一次 )
ojdbc14.jar 或 ojdbc6-1.0.jar
3、错误代码解释
"100" : Continue "101" : witching Protocols "200" : OK "201" : Created "202" : Accepted "203" : Non-Authoritative Information "204" : No Content "205" : Reset Content "206" : Partial Content "300" : Multiple Choices "301" : Moved Permanently "302" : Found "303" : See Other "304" : Not Modified "305" : Use Proxy "307" : Temporary Redirect HTTP 400 - 请求无效 HTTP 401.1 - 未授权:登录失败 HTTP 401.2 - 未授权:服务器配置问题导致登录失败 HTTP 401.3 - ACL 禁止访问资源 HTTP 401.4 - 未授权:授权被筛选器拒绝 HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败 HTTP 403 - 禁止访问 HTTP 403 - 对 Internet 服务管理器 (HTML) 的访问仅限于 Localhost HTTP 403.1 禁止访问:禁止可执行访问 HTTP 403.2 - 禁止访问:禁止读访问 HTTP 403.3 - 禁止访问:禁止写访问 HTTP 403.4 - 禁止访问:要求 SSL HTTP 403.5 - 禁止访问:要求 SSL 128 HTTP 403.6 - 禁止访问:IP 地址被拒绝 HTTP 403.7 - 禁止访问:要求客户证书 HTTP 403.8 - 禁止访问:禁止站点访问 HTTP 403.9 - 禁止访问:连接的用户过多 HTTP 403.10 - 禁止访问:配置无效 HTTP 403.11 - 禁止访问:密码更改 HTTP 403.12 - 禁止访问:映射器拒绝访问 HTTP 403.13 - 禁止访问:客户证书已被吊销 HTTP 403.15 - 禁止访问:客户访问许可过多 HTTP 403.16 - 禁止访问:客户证书不可信或者无效 HTTP 403.17 - 禁止访问:客户证书已经到期或者尚未生效 HTTP 404.1 - 无法找到 Web 站点 HTTP 404 - 无法找到文件 HTTP 405 - 资源被禁止 HTTP 406 - 无法接受 HTTP 407 - 要求代理身份验证 HTTP 410 - 永远不可用 HTTP 412 - 先决条件失败 HTTP 414 - 请求 - URI 太长 HTTP 500 - 内部服务器错误 HTTP 500.100 - 内部服务器错误 - ASP 错误 HTTP 500-11 服务器关闭 HTTP 500-12 应用程序重新启动 HTTP 500-13 - 服务器太忙 HTTP 500-14 - 应用程序无效 HTTP 500-15 - 不允许请求 global.asa Error 501 - 未实现 HTTP 502 - 网关错误