jmeter接口测试应用

一.jmeter下载

安装jmeter:
地址https://jmeter.apache.org/download_jmeter.cgi
下载 【apache-jmeter-XXX. zip 】解压缩,运行bin目录下的jmeter.bat或者在bin目录地址栏输入cmd打开命令行,输入jmeter,打开jmeter图形化界面

jmeter有很多插件在lib目录下,需要时可直接下载到lib目录下安装使用

二.jmeter核心元件

● 测试计划:测试起点,所有组件的容器,一般是这个项目的名称

● 线程组:代表一定数量的用户,发送请求

● 取样器:向服务器发送请求的最小单元,就是每一个接口请求

● 逻辑控制器:结合取样器实现一些复杂的逻辑(常用循环控制器),例如做csv数据驱动时,需要使用循环处理器读取csv文件的数据,文件里有几组数据就循环几次

● 前置处理器:在请求之前的工作(例如设置用户参数)

● 后置处理器:在请求之后的工作,主要是处理响应数据,(json提取器(登录成功之后提取token值)、正则表达式提取器)

● 断言:判断请求是否成功(响应断言、大小断言、json断言)

● 定时器:负责请求时间的延时间隔,常用的有固定、高斯、随机

● 配置元件:配置信息(http请求默认值、http信息头管理器(如果参数是json格式传参,必须要添加这个设置)、用户定义的变量)

● 监听器:收集结果(查看结果树、汇总报告、聚合报告)

各大元件的执行顺序

配置元件>前置处理器>定时器>取样器>后置处理器>断言>监听器

元件的作用域:jmeter所有原件都是依赖取样器运行
逻辑控制器只会对其下面的子节点生效,
如果父节点不是取样器,那么作用域就是当前元件的父节点下的所有节点

三.各元件应用

1.取样器:

就是发送http请求的信息,包括请求url,请求方法、请求参数,与postman添加request请求一样

2.配置元件

http请求默认值:一般同一个项目所用的服务器地址和ip是一致的,还包括所有接口都要使用的公共参数,可以给线程组添加一个这样一个配置元件,设置ip地址,将参数都添加到这个http请求默认值的参数中,那么这个线程组下面的所有请求都能够使用这个http请求默认值,只需要根据每个接口使用到的资源地址不同再在后面进行拼接即可

http请求默认值:项目涉及测试环境和生产环境时,可以添加两个http请求默认值,他们的服务器地址不同,需要时切换使用

http信息头处理器:post请求的参数格式如果是json格式,那么必须要设置请求头中content-type的值为application/json,可以给单个请求增加http信息头处理器

3.用户定义的变量 使用(可以在测试计划、线程组和取样器分别设置用户变量的值)

在接口中,有些变量存在重复使用的情况,例如账号、密码、登录后获取的token值,可以使用【配置元件】-用户定义的变量进行配置,在需要用到变量的地方,使用${变量名}使用

4.断言 --json path提取器

接口返回信息后,可以使用json path提取器进行提取,使用自带的json path表达式尝试提取

想要提取响应结果里面的msg值,使用$.msg获取,如果想要获取data里面的token值,使用$.data.token获取

将获取到的token值赋值给变量token,【后置处理器】--json提取器

在需要用到token鉴权的接口直接使用${token}来使用token的值
通常情况下,将 Token 放在请求头中时,对应的键名为 "Authorization"。常见的做法是将 Token 放在 "Authorization" 请求头的值中,通常以 "Bearer " 开头(由于项目设置原因,下面这个token是放在URL后面的)
headers = {
"Authorization": f"Bearer {token}"
}

5.csv数据驱动 (参数化)

csv数据文件设置(配置元件) 结合 循环控制器(逻辑控制器---适用于线程组) 使用,可以将csv文件中的数据依次给到用例
比如在测试注册/登录模块时,需要考虑很多账号和密码异常的情况:
1.账号正确+密码正确
2.账号不存在
3.账号为空
4.密码错误
5.密码为空
6.账号长度不符合
7.账号全部是数字/字母/含有特殊字符.........
这些非等价类可以用一个请求来执行完测试,就要用到csv数据驱动,使用循环控制器将文件的数据进行循环测试,每循环一次,就把文件里面每一行的参数给到测试用例执行
循环控制器,文件中有4组不同的账号和密码,那么就指定循环4次

csv数据文件设置,filename是文件的路径;变量名字是文件中的首行变量;要忽略首行,因为首行是变量名称

6.接口关联

网页需要在用户登录的前提下才能进行操作,即登录之后的操作需要带上登录成功以后返回的token值,使用json提取器将token的值提取出来,并且赋值给一个变量,在需要使用的地方用${变量名}引用,放在其他请求的参数中或者是拼接在url中-------json path

7.数据库数据驱动

jmeter连接数据库:配置元件----JDBC Connection Configuration,填写四项信息:

添加一个取样器JDBC Request,可以直接写sql语句

可将查询出来的值赋值给一个变量,在需要用到的地方${变量名}进行引用

8.jmeter断言

  • json断言:使用json path提取相关数据,对比预期结果
  • 响应断言:响应头,响应行信息
  • 持续时间断言:项目要求接口需要在xx ms内返回数据

补充

jmeter参数化的方式:

  • 用户定义的变量----配置元件【用户定义的变量】,作用范围是针对线程组
  • 用户参数------前置处理器【用户参数】
  • 逻辑控制器+CSV数据驱动----逻辑控制器+配置原件【csv数据驱动】,作用范围是针对取样器

jmeter连接数据库验证接口数据正确性:

jmeter连接数据库执行sql查询的数据定义为一个变量(例:username),在想要引用这个变量时${username}是无法使用的,sql是一个独立的语法结构,jmeter不知道sql执行后会返回几条数据,故jmeter会将我们自己定义的变量+jmeter自己生成的数字来生成这个变量名,我们要引用变量时,应该使用${username_1},可以添加调试取样器查看数据库返回的数据

如果需要测试登录接口,从数据库获取用户名和密码后,发现密码是加密的,我们引用账号和密码时,无法正常发送请求(这个问题还没找到方法解决?)

jmeter批量生成数据,插入数据库(20条):

步骤:
1.添加jdbc 数据库配置信息
2.添加循环控制器(循环次数20)
3.循环控制器子级添加计数器(从1开始递增),计数器变量设置为n
4.循环控制器子级添加jdbc request,Query Type选择update statement,写入insert 语句,例:insert into test_user(username,psssword) values("username_${n}","xxxxxx")

jmeter接口录制功能

操作步骤:
1.添加线程组,---录制
2.在测试计划中添加非测试元件--http代理服务器
3.打开电脑代理设置,手动--使用代理服务器,IP127.0.0.1,端口写一个没有占用的端口(例8900),http代理服务器端口填写8900,目标控制器选择录制线程组

启动http代理服务器,进行网页操作,线程组就会出现很多取样器,抓取接口成功,可以在取样器下看到请求数据、请求方法

jmeter函数使用---【函数助手】

在jmeter中,函数格式为:${}定义,${__函数名(参数)}使用

1.时间戳函数 ${__time(,)}当前时间戳,以毫秒展示,${__time(yyyy-MM-dd HH:mm:ss)}当前时间戳,以年月日 时分秒展示

2.随机数
${__Random(1,100)} 生成1-100的随机数

3.V函数,进行变量拼接
${__V(,)}

4.计数器n,在【配置元件】-【计数器】指定开始数,以及最大计数数值

jmeter生成测试报告

命令:jmeter -n -t[jmx文件名] -l [结果数据] -e -o [html报告文件]
-n 非GUI模式执行jmeter
-t 测试计划保存路径,jmx文件,以及文件名
-l 保存后生成的测试结果文件
-e 测试结束后生成测试报告
-o 存放报告的路径

posted @ 2024-04-13 21:11  cherish-github123  阅读(198)  评论(0编辑  收藏  举报