Jmeter接口测试
一、接口是什么?
前后端数据交互的规范
二、接口测试实现流程?
1.定位资源服务器(URL)
2.模拟用户提交数据
3.检查响应内容是否符合预期
三、接口测试分类
1.web接口测试(B/S),又可分为:
a.服务器接口—本公司实现的接口
b.第三方接口—其他公司实现的接口
2.模块接口(C/S)
四、接口测试工具—Jmeter
4.1、术语解释
a.进程:一个正在运行的程序就是一个进程
b.线程:进程中的执行线索(一个进程有多个执行线索,如电影播放时有音频和视频两个线程同时运行)
c.线程组:按照线程性质对线程进行分组
4.2、线程组的执行顺序
a.并发执行:不勾选“独立运行每个线程组”,则线程组执行顺序随机,每次运行结果不一样
其中线程组1的线程数是2,线程组2的线程数是3
第一次执行结果:
第二次执行结果
b.顺序执行:勾选独立运行每个线程组,按顺序执行完线程组1,再执行线程组2
第一次执行结果:
第二次执行结果:
4.3、如何参数化
1.方法一,使用配置元件中的CSV DATA SET CONFIG
2.方法二,使用前置处理器中的用户参数
3.方法三,用户定义的变量
4.方法四,使用工具中的函数助手
4.4、数据库测试
1.第一步,JDBC Connection Configuration数据库连接配置
2.第二步,发送JDBC请求,查询数据库
使用取样器DebugSampler查看赋值后的变量取值
4.5、关联
1.方式一:JDBC请求,将结果赋值给变量,然后调用变量(4.4已介绍)
2.方式二:Xpath提取器
3.方式三:正则表达式提取器
五、函数
5.1、__setProperty与__property函数(一般成对使用)
1.需求:线程组2中访问搜狗时需要使用线程组1中访问百度返回的title作为关键字
以下是错误做法,因为普通变量不可以跨线程组访问
正确做法:
第一步:用正则表达式提取线程组1中访问百度返回的title,赋值给myTitle
第二步:通过__setProperty()函数创建共享变量
先用函数助手找到这个函数,并生成调用格式
然后使用BeanShell取样器调用该函数。(函数不调用则不会执行)
第三步:通过__property()函数获取共享变量的值
先用函数助手找到这个函数,并生成调用格式
然后在需要使用该共享变量的地方进行调用
执行结果:
5.2、__counter()函数
示例:有两个用户,每个用户循环访问百度10次
第一种:使用全局计数器__counter(FALSE,)
第二种:每个用户有自己的计数器__counter(TRUE,)
5.3、__ramdom()函数
功能:生成随机数
示例:线程组设置线程数为1,循环10次
5.4、__time()函数
功能:获取当前时间,并格式化
示例:
5.5、__CSVRead()函数
功能:读取CSV文件指定列的数据
示例:线程数设置为3,循环次数为1
执行结果:
六、集合点
6.1、固定定时器
功能:发送请求前等待固定时间
6.2、同步定时器
功能:实现并发,可设置集合到多少个线程后再同时发送请求,还可以设置超时时间
示例:
执行结果:
前5个用户的请求时间相同
后5个用户的请求时间相同
七、分布式
什么是分布式?
组成:1台主控机+N台压力机
主控机:安装了Jmeter、jmeter.properties文件中有配置压力机的地址、编写测试脚本
压力机:安装了Jmeter
示例:由于只有一台机器,所以实现一个伪分布式,主控机和压力机都在同一台机器上,但是设置的端口都不一样
第一步、新建两个文件夹,压力机1和压力机2, 并将Jmeter的安装包复制到这两个文件夹中
第二步、配置压力机1和压力机2的端口,,分别打开各自的jmeter.properties文件修改端口(主控机无需修改,启动Jmeter时会自动分配一个端口,若压力机也不修改端口号,则启动压力机的JMETER时可能会出现端口冲突)
压力机1的端口设置为8888
压力机2的端口设置为9999
第三步,在主控机的jmeter.properties文件中设置压力机1和压力机2的地址
第四步、启动压力机1和压力机2的Jmeter服务,启动前需修改jmeter.properties文件中的server.rmi.ssl.disable=true,否则启动会报错
启动后如下图
第五步、在主控机下远程启动,启动前需修改jmeter.properties文件中的server.rmi.ssl.disable=true,否则远程启动会报错
执行结果:
压力机1
压力机2
主控机
八、元件执行顺序