当前位置: 首页 > news >正文

Jmeter 从登录接口提取cookie 并 跨线程组调用cookie (超详细)

文章目录

  • 一、开始前的准备
  • 二、 业务场景介绍
  • 三、从登录接口提取cookies
  • 四、跨线程组调用cookies

一、开始前的准备

1、安装Jmeter,参考文章:JMeter 3.1 和JMeterPlugin的下载安装

2、设置配置文件使Cookie管理器保存cookie信息。
修改apache-jmeter-x.x.x/bin/jmeter.properties文件,把CookieManager.save.cookies设置为true,并去掉前面的注释#号

CookieManager.save.cookies=true   # false --> true

注意:修改完成后保存,退出,并重启jmeter。
在这里插入图片描述

二、 业务场景介绍

我们需要测试一个【访问产品列表】以及【访问产品需求】接口,该接口需要获取【登录】的cookie才能访问成功。
因此,我们需要先【登录】,从【登录】获取cookie后,保存到全局变量中,传递到【访问产品列表】、【访问产品需求】接口,以便接口能够调用成功。
但是考虑到【登录】接口,只需要调用一次即可。因此我们可以将【登录】放在【setUp 线程组】,其他业务接口:【访问产品列表】以及【访问产品需求】,放在【线程组】里面。

三、从登录接口提取cookies

1、在【测试计划】中添加一个【setUp 线程组】
在这里插入图片描述

2、在【setUp 线程组】中添加一个【HTTP请求】,更改名称为【登录接口】,输入【登录接口】的各项参数,包括请求方法,请求路径,请求参数等。
注意:服务器协议、域名,端口号,后面将配置在【HTTP请求默认值】中。
在这里插入图片描述

3、在【测试计划】下面添加一个【HTTP请求默认值】,全局管理请求的协议、域名。
在这里插入图片描述
4、在【测试计划】下面添加一个【HTTP信息头管理参数】,全局管理公共的请求头。
在这里插入图片描述
5、在【setUp 线程组】中为【登录接口】添加断言。可以根据实际业务场景,添加响应断言或者JSON断言均可。
在这里插入图片描述
6、在【测试计划】添加一个监听器【查看结果树】,用来查看接口的请求情况,方便了解接口调用是否正常。
在这里插入图片描述
7、测试请求,查看登录接口的Response body以及Response headers。
从Response headers中,我们可以找到我们需要提取的cookie,接下来我们就要用【正则表达式提取器】将cookie提取出来。
在这里插入图片描述
8、在【登录接口】下面添加一个【正则表达式提取器】,提取登录cookie,参考下图:
在这里插入图片描述

四、跨线程组调用cookies

1、在【登录接口】下面添加一个后置处理器【BeanShell 后置处理程序】,将提取到的cookie变成全局变量,方便跨线程组调用, 里面的脚本参考如下:

${__setProperty(全局变量名称, ${正则表达式提取器中提取的变量名称},)}
如:${__setProperty(cookies, ${login_cookies},)}

在这里插入图片描述

2、添加第二个线程组,同时添加【HTTP信息头管理器】,设置cookie为【BeanShell 后置处理程序】中的全局cookie。
语法参考:

名称:cookie
值:${__P(BeanShell 后置处理程序中设置的全局变量名称,)}例如:
名称:cookie
${__P(cookies,)}

在这里插入图片描述
3、添加业务接口【访问产品列表】、【访问产品需求列表】接口,及对应的响应断言。
在这里插入图片描述
4、其中,由于【登录】接口和【访问产品列表】、【访问产品需求列表】接口,不是同一个域名。我们可以在第二个【线程组】里面再添加一次【HTTP请求默认值】,设置服务器协议和域名。仅对第二个【线程组】生效。
在这里插入图片描述
5、如果涉及到一些变量,可以在【测试计划】内添加【用户定义的变量】,方便后续引用。
在这里插入图片描述

实际引用该变量时,采用如下格式书写:

${env_enterprise_identifier}

在这里插入图片描述

6、最后运行测试,可以发现接口全部请求成功啦~
在这里插入图片描述

相关文章:

  • 游戏本笔记本更换@添加内存条实操示例@DDR5内存条
  • Linux 基于HAProxy+KeepAlived实现
  • 安防监控视频汇聚平台EasyCVR启用图形验证码之后如何调用login接口?
  • linux入门级学习指南
  • docker-compose(mysql5.6、mysql8、neo4j3.5、redis)
  • Nodejs运行vue项目时,报错:Error: error:0308010C:digital envelope routines::unsupported
  • 自动化测试:Selenium中的时间等待
  • AD学习笔记
  • SPI机制详解
  • 学习JavaEE的日子 Day29 yield,join,线程的中断,守护线程,线程局部变量共享,线程生命周期
  • I.MX6ULL_Linux_系统篇(25) buildroot文件系统构建
  • C++自主点餐系统
  • WordPress Git主题 响应式CMS主题模板
  • python基本数据(如注释)
  • taro框架之taro-ui中AtSwipeAction的使用
  • 【Leetcode】101. 对称二叉树
  • [译]CSS 居中(Center)方法大合集
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Fabric架构演变之路
  • Go 语言编译器的 //go: 详解
  • js继承的实现方法
  • JS数组方法汇总
  • nodejs实现webservice问题总结
  • PaddlePaddle-GitHub的正确打开姿势
  • python docx文档转html页面
  • Redis中的lru算法实现
  • webpack4 一点通
  • 飞驰在Mesos的涡轮引擎上
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 工作手记之html2canvas使用概述
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端学习笔记之观察者模式
  • 如何用vue打造一个移动端音乐播放器
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 突破自己的技术思维
  • 译米田引理
  • Android开发者必备:推荐一款助力开发的开源APP
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #13 yum、编译安装与sed命令的使用
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (C++17) std算法之执行策略 execution
  • (SpringBoot)第七章:SpringBoot日志文件
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET企业级应用架构设计系列之应用服务器