一、HTTP请求
如图所示:
协议:填写http或者https协议即可
服务器地址:填写对应的服务器地址
内容编码:默认utf-8
注意:如果想要发送json数据可在消息体数据中进行发送且必须设置内容编码否则如上传数据中有中文会无法解析变为?
一个进程可以包含多个线程组,一个线程组可以包含多个线程
二、并发执行和顺序执行
当勾选此选项的时候即为安装线程组顺序执行,若不勾选则所有线程组并发执行
三、setuUp线程组和tearDown线程组
setuUp线程组:最先执行的线程组
tearDown线程组:最后一个执行的线程组
线程数:若是模拟100用户同时访问那么可直接在线程数中写100
Ramp-up:给系统的准备时间
循环次数:即每个线程执行几遍
调度器:在勾选之后,持续时间即代表该线程组执行多久。启动延时指的是线程组延时多少在执行
三、HTTP请求默认值
HTTP请求默认值即是为了省略重复的一些操作,可以把重复出现的值,在这个里面写就可以了,不同的单独设置
四、HTTP信息头管理器
上传json数据的时候需要在请求头处设置请求头为Json否则服务器无法识别
HTTP信息头可在测试计划右键-添加-点击配置元件-HTTP信息头
不同上传信息的文件设置不同的请求头
五、参数化
以下四种方式可以实现参数化:
1.用户定义的变量
2.CSV数据文件设置
3.用户参数
4.函数
1.用户定义的变量
用户定义的变量可在测试计划右键-添加-配置元件-用户定义的变量
在该界面可以将重复的繁琐的值存储在一个变量中,在使用的时候用${变量名}进行调用,实例如下
2.CSV文件(可批量操作数据)
CSV:逗号分隔值,是一种简洁且常见的数据格式
CSV参数化文件使用逗号隔开回车视作一条数据
CSV文件可在配置元件中找到,文件名即是文件路径(文件类型必须为utf-8),变量名称即是与CSV文件中的值对应的变量名称, 是否带引号也就是CSV的数据是否带引号 ,遇到文件结束后是否再次循环,执行之后是否停止线程
在实际应用的时候 直接使用${变量名}即可调用CSV文件中的值,但是值得注意的是,CSV文件中的值与jmeterCSV设置中的变量值需要个数对应,那么调用CSV设置的变量名即可调用文件中的值,同时需要将线程组的永远循环勾选,因为我们并不清楚CSV文件中有多少条数据,另外在涉及到字符串传输的时候切记调用变量的时候打上双引号,不然会直接上传上去,不会算做字符串
3.用户参数
用户参数可以在线程组-前置处理器-用户参数找到
名称代表上传值的key的值
用户代表对应值的数据
同时切记在HTTP请求的参数中使用${变量名}引用
用户有多少个就需要循环几次
4.函数
常用的函数:counter,random,time
counter:有两个参数ture或者是false,true代表每个用户有独立计数,false代表统一进行计数
random:设置最大值和最小值随机出现,包含最大值和最小值
time:无参就是生成时间戳(从1970年1月1日到现在的毫秒值),有参就是设置时间格式
可点击jmeter右上角的函数助手唤出菜单
六、直连数据库
1.导入包
- 下载好mysql的驱动包(mysql-connector-java-5.1.7-bin.jar),放到jmeter的lib目录下
- 选中测试计划,添加mysql驱动包
2.添加JDBC Connection Configuration
添加JDBC Connection Configuration(右键测试计划-->配置元件-->JDBC Connection Configuration),并配置数据库连接信息
- 参数解释如下:
- 注意 jdbc:mysql:必须存在
- DataBase URL: jdbc:mysql://192.168.88.130:3306/dataname?useUnicode=true&characterEncoding=utf-8
- 1)192.168.88.130:3306为数据库的地址和端口号;dataname为数据库名
- 2)useUnicode=true&characterEncoding=utf-8 指定字符的编码解码格式utf-8
- JDBC Driver Class : com.mysql.jdbc.Driver 此为mysql数据库的驱动
- Username: 数据库的登录用户名
- Password: 数据库的密码
3.添加jdbc并设置变量
添加线程组-->右键线程组-->添加jdbc request,并做好设置
4.添加Debug PostProcessor用于查看变量username值的获取
添加Debug PostProcessor用于查看变量phone值的获取,添加查看结果树并运行
若是想要将请求下来的数据作为参数传递给下一个请求的话那么可以使用 ForEach控制器(右键线程组-->逻辑控制器-->ForEach控制器)
- 参数解释:
- 输入变量的前缀:phone; 从之前的jdbc request设置的变量得知,我们要取的值为phone_1、phone_2、phone_3......,所以这里输入phone
- Start index for loop:0; 变量循环启动的索引,第一个元素起始索引+1
- End index for loop:6; 变量循环结束的索引。所以这里是取值phone_1、phone_2、...、phone_6
- 输出的变量名称:t_phone; 用于替换循环下的请求的变量
在之后的请求中直接使用${变量名}调用即可
七、断言
断言指的是对响应结果进行断言,一般常用的是响应文本和响应代码
响应断言
或者就可以添加两个条件即可
大小响应
响应信息的大小
八、逻辑控制器
1.if逻辑控制器
请求是必须在if控制器之下才可以生效的
调用变量判断该变量是否等于res,等于才会执行请求,不等于是不会执行请求的
2.foreach控制器
变量前缀,就是用户参数中的前面一样的名字
开始字段:指的是充第几个开始
结束字段:指的是到第几个借结束
输出变量名称:得出的变量名称
3.循环控制器
可以实现循环单个或者多个http请求,但是必须保证循环控制器是请求的父级
九、后置处理器
1.XPath提取器
需要选中才可以获取标签
XPATH query 指的是标签名,比如说想获取tittle标签的值,输入//tittle即可
匹配数字:0是随便拿一个,-1是全部都要,1是只拿第一个
缺省:意思就是如果没有找到的话默认写一个值
2.正则表达式
引用名称:就是变量名
正则表达式固定语法(.*?) ?是贪婪模式,如果加上他就会一直获取数据拿走,一般不要加
匹配数字:0随机,-1全部,1第一个,2第二个.....
缺省值:就是找不到的默认值
十、全局变量
可跨越线程组传值
在函数中找到对应的函数,属性名称就是自定义变量名,value就是你期望的值,可以使用${变量名}引用
之后需要在生成函数的线程组中增加一个BeanShell取样器,将生成的代码复制进去
最后需要在使用全局变量的线程组中,生成一个函数property,该函数中变量名需要和set_property中的变量名一致,之后直接生成复制就可以了
十一、高并发
首先在线程组中设置线程数为并发数,同时在HTTP请求之后添加同步定时器并将模拟用户组的数量设置和线程数一致。同步定时器的超时时间记得设置不然可能出现一直卡在那里的情况
在高并发的情况下使用聚合报告来查看结果
十二、高频率
QPS:每秒的请求数
在进行高频率测试的时候可以在监听器中用常量吞吐监听器,常量吞吐监听器中的目标吞吐量,就是使用每秒的请求数乘以60秒,之后线程设置为想要的次数