1.1loadrunner介绍
1.2:jmeter介绍
相同点:
都能模拟大量用户
都能支持多协议(常见的协议都支持)
都有监控及分析报表功能
不同点:
2.jmeter功能概要
2.1汉化
2.2修改主题![](https://img-blog.csdnimg.cn/0005a0fe1a98460ca35f754bdadfb775.png)
3.jmeter元件和组件
3.1元件的基本介绍
3.2组件的基本介绍
3.3元件的作用域
4.jmeter使用案例
4.1线程组
作用:线程组就是控制jmeter用于执行测试的一组用户
位置:右键点击"测试计划"-->添加-->线程(用户)-->线程组
4.2特点
模拟多人操作
线程组可以添加多个,多个线程组可以并行或者单行
取样器和逻辑控制器必须依赖线程组才能使用
线程组下可以添加其它元组下组件
4.3线程组的分类
普通线程组,常用的线程组,可以看做是一个虚拟用户组,线程组中每一个线程都可以理解为一个虚拟用户
setup线程组:一种特殊类型的线程组,可用于执行预测试操作.
teardown线程组:一种特殊类型的线程组,可用于执行测试后工作
5.http请求
作用:向服务器发送http和https请求
位置:进入线程组-->右键-->添加->取样器-->http请求
6.监听器
作用:监听器可以动态的监控jmeter测试执行的过程,实时查看测试结果
位置:在线程组>>添加>>监听器>>聚合报告/查看结果树
聚合报告
7.jmeter参数化
7.1jmeter介绍
本质:是用参数的方式代替脚本中的固定的测试数据
实现方式:文件定义的方式/数据库的方式/定义变量
7.2:jmeter参数化
参数化测试:把测试数据组织起来,用不同的测试数据调用相同的测试方法.
jmeter中常见的参数化方式:
7.3用户定义的变量
作用:定义全局变量
位置:测试计划>>线程组>>配置元件>>用户定义的变量
7.4用户参数
作用:针对同一组参数,当不同的用户来访问时,可以获取到不用的值
位置:测试计划>>线程组>>前置处理器>>用户参数
7.5csv数据文件设置
作用:让不同用户在多次循环时,可以取到不同的值
位置:线程组>>配置原件>>csv数据文件设置
保存文件格式是txt
断言正确
保存文件格式是csv
7.6函数参数化
作用:计数函数,一般做执行次数统计使用
方式一:counter函数
位置:选项>>函数注释对话框>>_counter
方式二:CsvRead函数
操作:选项>>函数注释对话框>>_CsvRead
方式三:randomstring函数
操作:选项>>函数注释对话框>>_randomstring
8.jmeter断言
8.1断言
让程序判断预期结果和实际结果是否一致
常见断言响应断言./json断言/xpath断言/持续断言
8.2响应断言
作用:对http请求的任意格式的响应结果进行判断
位置:测试计划>>线程组>>htpp请求>>右键添加断言>>响应断言
8.3json断言
作用:对http请求的json的响应结果进行判断
位置:测试计划>>线程组>>http请求>>右键添加断言>>json断言
8.4xpath断言
定义:xpath基于xml的树状结构,提供在数据结构树中寻找节点的能力
位置:测试计划>>线程组>>http请求>>右键添加断言>>xpath断言
区别:响应断言(使用任何的返回类型)
json断言(只适用于json的返回类型)
xpath断言针对返回信息为xpath的数据类型进行断言
8.5断言持续时间
作用:检查http请求的响应时间是否超出要求返回
位置:测试计划>>线程组>>http请求>>右键添加断言>>持续时间断言
9.jmeter关联
9.1为什么使用关联
9.2关联
当请求之间有依赖关系,比如请求的入参是另一个请求返回的数据,这时候就需要用关联处理
常见的关联
正则表达式提取器 --提取任意格式的数据
json提取器 --提取html格式的数据
xpath提取器 --提取json格式的数据
9.3正则表达式
就是一个公式,或者是一套规则,使用这套规则可以从任意字符串中提取想要的数据内容
公式格式:左边界(匹配符号)有边界:可以提取出想要获取的数据内容.:是通配符,可以代表任意字符(除换行回车)*:代表前面的字符出现0或者多次.*匹配规则:找到左边界值后,往右查找有边界,找到最后面的有边界,中间的所有的数据都被记录下来?:代表非贪婪匹配,找到左边界后,往右查找匹配走边界,只要右匹配的右边界就停止继续查找;再次查找左边界的右边界公式格式:左边界(.*?)有边界<title>(.*?)</title><title>百度一下,你就知道</title>
案例:
结论:
通过一个正则表达式可以提取出多组数据,每组数据设置对应的左边界和有边界即可
每一组数据又可以由一个或者多个值
作用:针对任意格式的响应数据进行提取
位置:线程组>>添加>>后置处理器>>正则表达式提取器
案例:我们以手机号码归属地返回的归属地传递第二个接口查询所属地的天气情况
![](https://img-blog.csdnimg.cn/b7901a8b3adb49049669a6a7a9993487.png)
9.4json提取器
json提取器 :就是json表达式提取数据,从返回格式是json中提取想要的数据内容位置:线程组>>添加>>后置处理器>>json 提取器
9.5:xpath提取器
9.6:jmeter属性
为什么使用jmeter属性
当有关联关系的两个请求在同一线程组中时,可以使用三种提取器的变量来实现数据传递
jmeter属性的配置函数
![](https://img-blog.csdnimg.cn/661d82ae65224371aa57d818968e0275.png)
案例
![](https://img-blog.csdnimg.cn/c30212b05ff1427598ac4d22a8113d4c.png)
将提取的数据设置属性,保存在beanshell采样器中,全局使用
在第二个线程组中的接口去引用
十:jmeter直连数据库
10.1:直连数据库的场景
10.2配置
10.2.1:添加Mysql的驱动jar包
方式1:在测试计划面板点击‘游览’按钮,将jdbc驱动添加进来
Variable Name:连接池名称。JDBC Request会通过此名称来获取连接池的配置,名称可以随意填写,但是最好具体实际的业务意义,方便理解和记忆。其他的可以默认,可以根据实际情况来调节优化性能。Database URL:数据链接url,格式:jdbc:mysql://localhost:3306/host注释:数据库的ip地址+端口/数据库名(查询数据库端口号show global variables like 'port')jdbc:mysql://127.0.0.1:3306/mydb2?serverTimezone=UTC& allowMultiQueries=trueJDBC Driver Class:驱动器名称。固定:com.mysql.jdbc.DriverUsername:用户名Passowrd:密码添加一个JDBC Request。
![](https://img-blog.csdnimg.cn/357adbb5a4d64a6ead9cdccd64fbdc4e.png)
![](https://img-blog.csdnimg.cn/542f7a51a68b4594b0027237e2f919b5.png)
Updata Statement:更新语句支持测试非select语句,并且支持测试多条,若其中夹杂select语句,自动忽略,若第一条语句为select语句,报错Callable Statement:所有语句只要语法正确,任何语句,再多的条数都能支持Prepared Select Statement:预编译查询语句。(长时间执行效率更高,支持占位符)Prepared Update Statement:预编译更新语句。(同上)Commit (立即提交)Rollback(回滚)
![](https://img-blog.csdnimg.cn/ee7b460bc9b14cd4932cb984e406d71a.png)
Parameter values:参数值。参数化sql语句中的值Paramter types:参数类型。数据库的参数你可以去查看一下。这里是varchar类型。Variable names:变量名字,也就是将筛选出来的值放在变量里面。例如这三列数据分为放在变量:A,B,C中(实际操作中命名一定要有实际意义)。Result variable name:存储变量名。将整个结果存储在变量中。取名:rsQuery timeouts :超时时间。
十一:逻辑控制器
11.1作用
逻辑控制器:可以按照设置的逻辑控制取样器的执行顺序
11.2常见的逻辑控制器
如果if控制器
循环控制器
ForEach控制器
11.2.1:if控制器
作用:
if控制器来控制它下面的测试元素是否运行
位置:
测试计划>>线程组>>逻辑控制器>>如果if控制器
参数介绍
练习
![](https://img-blog.csdnimg.cn/38b4155714504a90b37e497b8ad8c5c5.png)
第一个if控制器中添加条件
第二个if控制器中添加条件
![](https://img-blog.csdnimg.cn/8565bced20cb49ff992bcc4833af9cd9.png)
11.2.2:循环控制器
作用
通过设置循环次数,来实现循环发送请求
位置
测试计划>>线程组>>逻辑控制器>>循环控制器
参数讲解
控制的作用域不同:线程组控制的是线程组下的所有的请求,循环控制器是该控制器下的所有请求
如果线程组循环次数为M,循环控制器循环次数为N
11.2.3:ForEach控制器
作用
一般和用户定义变量或者正则表达式提取器一起使用,读取返回结果中一系列相关的变量值
位置
测试计划>>线程组>>逻辑控制器>>循环控制器
其中name的数据可以来源于用户定义的变量,命名规则是变量名_数字/正则表达式提取器的数据
![](https://img-blog.csdnimg.cn/4b0202cce7a4425ebb22ec7d33bfdaf4.png)
用户定义变量维护数据
ForEach数据维护
引用
十二:定时器
12.1:同步定时器
定义
同步定时器:堵塞线程(积累一定的请求),当在规定的时间内达到一定的线程数量,这些线程会在同一个时间点一起释放,瞬间产生很大的压力
提示:在jmeter中叫做同步定时器,在loadrunner中叫集合点
位置
测试计划>>线程组>>http>>定时器>>Synchronzing Timer
参数讲解
12.2:常数吞吐量定时器
作用
让jmeter按指定的吞吐量执行,以每分钟为但单位
位置
测试计划>>线程组>>http请求>>定义器>>Constant Throughput Timer
参数讲解
案例:
使用场景
需要被指定的吞吐量发送请求时,可以使用常数吞吐量定时器
规定好每个用户每分钟发送的请求数
12.3:固定定时器
作用
固定定时器:定时器负责定义请求之前添加延迟间隔
位置
测试计划>>线程组>>http请求>>定时器>>固定定时器
参数讲解
十三:jmeter分布式
![](https://img-blog.csdnimg.cn/6c8ffe8d75e04d8b8c5716444e1d271b.png)
分布式的注意事项
关闭防火墙所有的控制机,代理机,服务器都在同一个网络上所有机器的jmeter和Java版本都必须一致关闭RMI中的SSL开关
![](https://img-blog.csdnimg.cn/8803e67c3c5141e3acc64f37ba4ca6be.png)
十四:html测试报告
![](https://img-blog.csdnimg.cn/aca27422c4a74b2d99e42fb59c9516d7.png)