Jmeter关联,断言,参数化

news2024/11/23 18:25:51

 

一、关联

常用的关联有三种

1.边界提取器

2.JSON提取器

3.正则表达式提取器

接下来就详细讲述一下这三种的用法

这里提供两个接口方便练习

登录接口

接口名称:登录

接口提交方式:POST

接口的url地址:https://admin-api.macrozheng.com/admin/login

接口入参:

name 类型 是否必填 参数描述

username string 是 用户名

password stirng 是 密码

headers:Content-Type string  application/json

响应的参数:

{"code":200,"message":"操作成功","data":{"tokenHead":"Bearer ","token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImNyZWF0ZWQiOjE3MjY3Mjc3NjM5NTgsImV4cCI6MTcyNzMzMjU2M30.-jcV7TaKsVFfFumm1SkiH6fCtDGWpxkquJ-_LHbpY-XDvmN7o1w7V7HE20p7AjFBCAgeOYMSxUmk84hYL9mpcA"}}

查找接口

 接口名称:用户搜索

接口的提交方式:GET

接口的url地址:https://admin-api.macrozheng.com/admin/list?pageNum=1&pageSize=10&keyword=mac

接口入参:

name 类型 是否必填 参数描述

pageNum int   否 页数

pageSize int   否 每页显示的条数

keyword string           是 关键词

headers: Authorization string Bearer eyJhbGciOiJIUzUxM

·响应数据:

{"code":200,"message":"操作成功","data":{"pageNum":1,"pageSize":10,"totalPage":1,"total":1,"list":[{"id":4,"username":"macro","password":"$2a$10$Bx4jZPR7GhEpIQfefDQtVeS58GfT5n6mxs/b4nLLK65eMFa16topa","icon":"https://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/icon/github_icon_01.png","email":"macro@qq.com","nickName":"macro","note":"macro专用","createTime":"2019-10-06T07:53:51.000+00:00","loginTime":"2020-02-03T06:55:55.000+00:00","status":1}]}}

边界提取器

先对登录进行操作,因为后面的用户搜索我们先对登录进行操作

新建一个线程组

然后添加HTTP请求改名为登录,我们看上面接口信息发现它是有响应头的

headers:Content-Type string   application/json

然后发现它是JSON类型的,JSON类型的我们就需要在消息体数据中写入我们提交的数据

接下来添加HTTP信息头管理器,我们我的头添加到里面

这时候我们可以添加一个查看结果树,来看看能否登录成功

我们能看到登录成功了里面也有我们要的token值(token值是我们下面执行查找接口的时候要用,因为他要先登录才能使用这个接口,不然返回信息中就会有“请先登录”)

然后在登录里面添加一个边界提取器

我们来解释一下这里面的内容(80%的情况下我们都用默认即可)

名称引用:根据自己需要命名即可

Apply to:是对那些起作用,一般都默认对父级起作用

主体:返回的所有内容

Body(unescaped):响应体,不带响应头

Body a Document:响应体单独放在一个外部.TXT文件中

信息头:响应头

Request Headers:请求头

URL:返回的URL地址

响应代码:状态码

响应信息:状态码后面的 "OK"

引用名称:我们随意命名即可,这里命名为token22
左边界:指的是我们要取值的左边的内容

右边界:指的是我们要取值的右边的内容

匹配数字:-1是指所有匹配到的值

                   0是所有匹配到的值中随机选择一个

                   1是第一个值

                   2是第二个指

                   ...........

(注意:如果只有一个值建议用1或者1,-1的话它是把所有值都放到了一个列表中,所以到时候即使你只有一个值,他也会显示两个,一个是token22=NONE,一个是token22_01=我们要的token值,想要用就得再提取一次)

缺省值:如果没有找到值就用一个默认值来替代,这里写null即可

然后我们添加一个调试器,看看结果有没有提取出来,可以看到我们的token22的值提取出来了

接下来创建用户搜索HTTP请求,看到接口信息上依旧是有头信息,我们就添加上一个HTTP头信息管理器

Bearer后面跟的是我们的token值,我们需要把提取的token放他的后面,提取后的使用方法就是

${}  里面写我们定义的名字        ${token22}

接下来就可以运行了,我们添加查看结果树,查看结果,可以看到我们成功关联了并且成功返回信息

(我没有演示用户搜索里面的值,上面的接口文档写了是提交keyword,这里不演示了

JSON提取器

跟边界提取器一样,不过这次新建的的是JSON提取器

其他值都跟边界提取器一样,这里只介绍JSON Path experssions

我们可以看到这里token是在data里面的,所以提取JSON数据时我们要一层一层的提取

所以就写$data.token,或者写$..token也可以

使用方法跟边界提取器一样,不再过多赘述

正则表达式提取器

接下来是正则表达式提取器

添加一个正则表达式提取器

看这里面的东西,其他东西跟上面两个都一样

正则表达式:token里面的值是我们要的,我们就把需要的值用括号代替

 . 代表匹配一个任意字符

+ 表示一次或多次

?表示不要太贪婪,在找到第一个匹配项后停止

*  表示贪婪,找到多个匹配项

一般 (.+?)和(.+*)能够满足我们80%的使用场景

模板:如果有多个表达式,输入几就是代表用第几个表达式这里要第一个就是$1$

使用方法与前两个一样,在头部添加名字即可

我们也可以添加多个正则表达式,用$$选取就行了

三种关联方式差不多就讲完了,不过还有一种夸线程关联

跨线程关联

这里面涉及的东西就优点多了,一点一点说

先添加一个BeanShell后置处理程序

这里面可以写代码,这里写的都是java代码,原因是Jmeter是Java开发的,不会写也没关系,Jmeter也知道我们不悔写,所以提供的有工具 "函数助手"

 我们找到setProperty,写入我们的值

这里的Valur of property填的是我们提取的token值,我命名叫token2042,生成后会有这个函数字符串,我们复制过来直接放进BeanShell后置处理程序中

 然后再需要使用关联值的地方使用

依旧打开函数助手,找到property,填入我们在BeanShell中命名的 user_token,生成后复制出来放到HTTP信息头中

 最后运行,看到我们成功跨线程关联了

二、断言

有时候我们需要断言来判断是否正确,是我们想要返回的信息,我们就添加断言,

这里说三种常用的断言方式

响应断言

JSON断言

断言持续时间

响应断言

右键添加响应断言

我们看到里面的内容测试字段我们依旧默认即可,添加一个文本

意思是如果返回的信息中有 "成功" 两个字就说明我们得到想要的信息了或者测试通过了

我先随便改成两个字,运行展示一下断言失败什么样子的

可以看到断言信息中说没有 “待测二” 这个信息,所以断言没通过

JSON断言

添加一个JSON断言

Assert JSON Path exists这里面写的是我们要断言的信息,比如这里我们要断言JSON返回信息中msg后面的内容,写上 ".$msg" 注意前面有个  "."  少写这个会报错

Expected Value中写我们断言的信息,这里直接模拟断言不通过的情况

执行

他说在msg中没有找到“chenggong”,所以断言失败

断言持续时间

我们可以给一个时间,只要在这个时间内返回了信息说明断言成功,这是来测试接口的性能,就是返回信息的速度,一般行业标准不超过1.5S就可以了

依旧是右键添加,里面填入时间即可,单位是毫秒,这里我写小一点来看失败是什么结果

执行

可以看到直接就说反应时间太长,不应该超过100毫秒

三种常用的断言就这些,一般JSON断言用的最多

三、参数化

当我们有一批数据需要进行测试的时候就用参数化的方法,jmeter也有几种参数化的方法

前置处理器中的用户参数

使用配置元件中csv data setconfig

使用csvread函数实现

用户参数

我们添加一个用户参数

我们首先参数化我们的Value值

在名称中输入我们的Key值(这个可以自己定义一个)在用户里写要定义的值(第一个是登录里面的用户名,第二个是密码)

同样可以参数化我们的Key值,如下

由于我们上面添加了三个用户,我们就来带线程组中设置三个人操作,也就是线程数调成3

最后执行即可

csv data setconfig

添加一个csv data setconfig元件

里面第一个先上传我们的外部数据,可以是.txt和.csv

变量名根据自己需要更改

忽略首行:这个是看你外部数据,如果外部数据里面你写了yhmpwd,ukey,pkey这些值,选True忽略第一行就行,如果你没写就选择False

分隔符写 “,”  

剩下的默认即可

跟上面一样替换掉提交的Key值和Value值执行

csvread函数

还有一种函数可以实现参数化,不过不推荐用,上面两种已经够用了

我们打开函数助手

csv文件列号说的是你这个文件中的哪一列的数据,0就是第一列,我们看到第一列是username,第四列就是3

按照这种方法添加我们去执行就可以了

下一篇讲一下Jmeter常用的一些函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2168762.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

部署Tomcat服务

一、部署过程 1. 节点规划 节点IP 主机名 节点 192.168.20.20 tomcat Tomcat 2. 基础环境配置 2.1. 修改主机名 [rootlocalhost ~]# hostnamectl set-hostname tamcat [rootlocalhost ~]# bash 2.2. 关闭防火墙 [roottamcat ~]# systemctl stop firewalld [roott…

嵌入式单片机底层原理详解

前言 此笔记面向有C语言基础、学习过数字电路、对单片机有一定了解且尚在学习阶段的群体编写,笔记中会介绍单片机的结构、工作原理,以及一些C语言编程技巧,对于还停留在复制模板、copy代码阶段的读者会有比较大的帮助,待学习完成后可以独立完成几乎所有单片机的驱动开发。 …

macOS安装MySQL教程, 2024年9月26日更新, 亲测有效, 附有百度网盘下载链接

下载: https://dev.mysql.com/downloads/mysql/ 选第一个 DMG版本的. 这一步可能需要登录一下, 比较麻烦, 一会儿我传到百度网盘, 文末发百度网盘的链接. 点击下载按钮, 会弹出下载提示. 开始下载了, 很慢. 复制链接地址, 使用迅雷下载. 稍微快点. 我传到了百度网盘: 通过网…

Java List类

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:Java 目录 👉🏻List1. 接口与实现2. 特性3. 常用方法4. 示例代码5. 遍历6. 线程安全 👉🏻List Java的 List …

【含文档】基于Springboot+微信小程序 的高校社团管理小程序(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

菱形继承、菱形虚拟继承、菱形继承中多态问题、菱形虚拟继承中多态问题

菱形继承以及菱形继承中的多态问题 一、对象模型(一)菱形继承 & 菱形虚拟继承(一)菱形继承中多态 & 菱形虚拟继承中多态 二、总结 本文主要叙述菱形继承、菱形虚拟继承、菱形继承中多态、菱形虚拟继承中多态,这…

JavaWeb 13.HTTP协议

和自己的情绪共处,永远保持乐观 —— 24.9.26 一、HTTP简介 HTTP 超文本传输协议 (HTTP-Hyper Text transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出&a…

STL之vector篇(下)(手撕底层代码,从零实现vector的常用指令,深度剖析并优化其核心代码)

文章目录 1.基本结构与初始化1.1 空构造函数的实现与测试1.2 带大小和默认值的构造函数1.3 使用迭代器范围初始化的构造函数(建议先看完后面的reserve和push_back)1.4 拷贝构造函数1.5 赋值操作符的实现(深拷贝)1.6 析构函数1.7 begin 与 end 迭代器 2. …

jQuery——层次选择器

1、层次选择器:查找子元素,后代元素,兄弟元素的选择器。 ancestor descendant:在给定的祖先元素下匹配所有的后代元素 parent > child:在给定的父元素下匹配所有的子元素 prev next:匹配所有紧接在…

每日一练:二叉树的右视图

199. 二叉树的右视图 - 力扣(LeetCode) 一、题目要求 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,…

超详细的 pytest教程 之前后置方法和 fixture 机制

前言 这一篇文章专门给大家讲解pytest中关于用例执行的前后置步骤处理,pytest中用例执行的前后置处理既可以通过测试夹具(fixtrue)来实现,也可以通过xunit 风格的前后置方法来实现。接下来我们一起看看如何具体使用。 一、xunit 风格的前后置方法 1、函数用例的前…

基于STM32的智能家庭安全监控系统

目录 引言项目背景环境准备 硬件准备软件安装与配置系统设计 系统架构关键技术代码示例 传感器数据采集摄像头监控与数据处理实时报警功能实现应用场景结论 1. 引言 智能家庭安全监控系统使用嵌入式设备,如STM32微控制器,来实时监控家庭环境。通过集成…

[教程]如何在iPhone上启用中国移动/联通/电信RCS消息

目前 苹果已经在 iOS 18 中带来 RCS 富媒体消息的支持,该消息基于网络传递,用户可以通过 RCS 免费将消息发送到其他 iPhone 或 Android 设备。在苹果面向测试版用户推出的 iOS 18.1 Beta 版中,中国网络运营商包括中国移动、中国联通、中国电信…

文献笔记 - Ground effect on rotorcraft unmanned aerial vehicles: a review

这篇博文是自己看文章顺手做的笔记 只是简单翻译和整理 仅做个人参考学习和分享 如果作者看到觉得内容不妥请联系我 我会及时处理 本人非文章作者,文献的引用格式如下,原文更有价值 摘要—— 收集和讨论小型多旋翼无人机受地面效应的影响,…

阿b的弹幕如何获取?这个可以帮到你!

弹幕 前几天,做了一个b站弹幕的爬取,只需要输入一个bv号,就可以查看这个视频的弹幕,并且提供了一种可以写入到文件的方法。但是有人反应,这种使用仍然非常困难,应该提供一个更加友好的用户界面。 因此本期…

共享单车轨迹数据分析:以厦门市共享单车数据为例(八)

副标题:基于POI数据的站点综合评价——以厦门市为例(三) 什么是优劣解距离法(TOPSIS)? 优劣解距离法(Technique for Order Preference by Similarity to Ideal Solution,简称TOPSI…

借用连接2-得到主库或从库池子连接

二、借用连接--AbstractRoutingDataSource类 目的:基于look up data,然后从目标数据源借用连接 注look up key确定走主 or 从数据库连接池代码开发: 1.定义子类继承AbstractRoutingDataSource,并覆写determineCurrentLookupKey方…

Vue3+Element-UI Plus登录静态页

<script setup> import {reactive, ref} from "vue";const formRefref() const formModelreactive({username:,password: }) const formRulesreactive({username:[{required:true,message:请输入账号,trigger:blur}],password:[{required:true,message:请输入密…

深圳前湾地铁附近的13元一份的工地盒饭

因为深圳前海这边有很多工地&#xff0c;所以也存在很多的工地餐厅。发现价格出奇统一&#xff0c;都是13元一份。主打一个量大管饱还下饭&#xff0c;每次都吃得有些撑。前海写字楼下的底商也很多打工人的干饭餐厅&#xff0c;但是工作餐均价都要30。如果不在餐厅吃&#xff0…

高通AI应用程序开发3:网络模型(一)

1. 支持的网络模型 Qualcomm神经处理SDK支持下表所列的网络模型。 有关支持的运行时和单个图层类型的限制和约束的详细信息&#xff0c;请参阅 限制 。 GPU运行时中支持的所有层对两种GPU模式都有效&#xff1a;GPU_FLOAT32_16_HYBRID和GPU_FLAAT16。GPU_FLOAT32_16_HYBRID-…