Jmeter多用户token使用问题

背景

在测试的时候,经常会有模拟用户登录,拿到用户 token 后再去请求接口的场景。

这个模拟用户登录就会分为两种,一种是单用户,另一种是多用户。

日常自动化测试的时候可能一个用户对应 n 个用例就可以满足大多数场景;

如果是在压力测试的场景下面,可能就会略显单调,也无法满足一些真实业务场景。

对于单用户的情况下,和我们常规的多接口有依赖的测试其实没什么太大的差别。

所以这里主要讲的是多用户产生多个 token 的情况。

下面来看一个具体的例子来了解一下。

场景接口

在这里的话,只有两个接口,一个是登录拿 token,一个是有 token 才能请求的。

下面是各接口定义

登录接口

请求:


POST http://localhost:8532/MultiToken/LoginContent-Type: application/json{"UserName":"catcherwong-1","Password":"123"}

响应:

{"code":0,"msg":"ok","data":"catcherwong-1-token"}
业务接口

请求:

  1. GET http://localhost:8532//MultiToken/do?account=xxx

  2. Content-Type: application/json

  3. token: catcherwong-1-token

响应:

{"code":0,"msg":"ok","data":"catcherwong-1-token"}

登录接口处理

登录接口属于预请求,所以我们一般会选择把它放在 setUp 线程组里面。

我们需要准备一个 csv 文件,里面用来存放需要登录的用户名和密码。

接下来就是把这个 csv 配置好,定义了两个变量 account 和 pwd

 然后是把登录的 HTTP 请求配置好:

 由于后面要用到 token,所以要先把 token 提取出来,这里用的是 JSON Extractor。

到这里就要开始注意了!!!!

由于我们会有多个用户进行登录,但是这一个提取操作每次都会把 token 赋值到 access_token 这个变量上面,是覆盖的操作。

换句话就是说,每登录一个用户,这个 access_token 的值就会是最后一个登录的用户的 token,。

换个思路,每次它会覆盖,那么把这些 token 存到一个地方,然后业务接口去这个地方取就可以了。

如果没有用户登录这一步,给的直接是 token,那么我们也是直接把这个 token 放到 csv 文件里面,然后让 jmeter 去循环使用里面的 token。

那么要做的东西其实就很确定了,就是在提取到 token 后,把这个 token 写到一个 csv 文件里面。

要想做到这一步,需要在登录接口后面加一个后置的处理。

 


String p1 = System.getProperty("user.dir");String p2 = System.getProperty("file.separator");String p3 = "user_token.csv";String path = p1 + p2 + p3;FileWriter fileWriter = new FileWriter(new File(path), true);BufferedWriter writer = new BufferedWriter(fileWriter);writer.append(vars.get("accout")+","+vars.get("access_token")+"\n");writer.close();fileWriter.close();

这段代码的意思是,把用户名和提取到的 access_token 写进到 csv 文件里面,这个文件在的位置是 jmeter 的目录。

这里是对文件路径做了处理,可以适配所有操作系统的。不会出现说指定了一个 windows 系统的路径,然后放到 linux 系统下面就跑不了了。

还有最重要的一个是,要修改 setUp 线程组的属性,把循环次数改成 3 。因为前面的 csv 文件里面有 3 个用户,这样它才会触发三次登录。

业务接口处理

业务接口要放到正常的线程组里面,独立于 setUp 线程组。

前面提到,登录后会有一个 csv 文件,所以这里第一个要做的是把 csv 配置好。

 

上面的截图用的是 ${__P(user.dir,)}${__P(file.separator,)}user_token.csv 这个文件路径,这个在本地环境的 Jmeter 是可以通过的,不过在一些云服务上面是不行的,如阿里云 PTS 。

这里可以忽略前面的路径,直接填写 user_token.csv 即可,填这两个,得到的文件路径是一样的,一个是绝对路径一个是相对路径。

然后就是配置 HTTP 请求了

 

PS:不要忘记把请求头也配置了,这里就不截图了。

这里试跑两次,可以发现业务请求的接口,它的 token 请求头每次都是不一样的,在交替变化,这个是符合预期的。

但是会发现生成 csv 文件里面的数据会重复,没有自动清理掉上一次产生的数据。如果上一次产生的 token 过期了,那么用了这些过期的 token === 凉凉。

 所以这里还有必要加一步 tearDown 线程组,每次跑完脚本把这个文件删除掉。


String p1 = System.getProperty("user.dir");String p2 = System.getProperty("file.separator");String p3 = "user_token.csv";String path = p1 + p2 + p3;log.info("准备删除文件:" + path);File file = new File(path);if (!file.exists()) {log.info("删除文件失败:" + path + "不存在!");} else {file.delete();}

这个时候跑脚本就基本没什么问题了。

 

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

MySQL集群高可用架构之MySQL InnoDB Cluste

今天我将详细的为大家介绍Centos 7.5 基于 MySQL 5.7的 InnoDB Cluster 多节点高可用集群环境部署的相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!! 一、MySQL InnoDB Cluster 介…

RK3568平台(音频篇)音频ALSA框架

一.ALSA框架简介 ALSA表示先进linux声音架构(Advanced Linux Sound Archiecture),它由一系列的内核驱动、应用程序编程接口(API)以及支持linux下声音的应用程序组成、 ALSA项目发起的原有是linux下的声卡驱动&#x…

PAT A1016. 最短路径

题意 有N个结点围成一个圈,相邻两个点之间的距离已知,且每次只能移动到相邻点。然后给出M个询问,每个询问给出两个数字A和B即结点编号(1≤A,B≤N),求从A号结点到B号结点的最短距离。样例解释 如图3-2所示,共有5个结点,…

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探…

薄冰英语语法学习--名词1

我用来教我自己3岁的小孩的。 有特殊的情况,暂时先不用管,3岁小孩,只用全部按非特殊情况算就ok了,以后长大了,遇到问题了,再微调一下。先解决百分之90的问题。 一般的复数,直接加s 特殊的词尾…

海南云亿商务咨询有限公司抖音电商服务领军企业

在数字化浪潮席卷全球的今天,电商行业已成为推动经济发展的重要引擎。而抖音,作为短视频领域的佼佼者,其独特的商业模式和庞大的用户群体,为电商行业带来了前所未有的机遇。海南云亿商务咨询有限公司,正是把握这一时代…

Java中的并发编程问题与解决方案

Java中的并发编程问题与解决方案 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨Java中的并发编程问题及其解决方案。随着多核处理器的普及和应用…

使用 JavaScript 的 SpeechRecognition API 实现语音识别

在现代的 Web 开发中,语音识别已经成为一个非常有用的功能。通过浏览器提供的 SpeechRecognition API,我们可以在网页上实现语音输入的识别功能。本文将介绍如何使用 JavaScript 和 SpeechRecognition API 来实现简单的语音识别功能。 什么是 SpeechRec…

如何通过isAccessAllowed方法实现访问控制

如何通过isAccessAllowed方法实现访问控制 在Web应用开发中,确保用户的访问权限是至关重要的。本文将详细讲解一个自定义的 isAccessAllowed 方法是如何实现这一功能的。我们将逐步解析这段代码,并探讨它的安全性和实现细节。 相关框架和类简介 在开始…

gd32-DMA测试

1)内存到内存 uint8_t srcBuf[8] {0,1,2,3,4,5,6,7}; uint8_t dstBuf[8]; void DMA_M2M_Test(void) { //DMA0测试中,内存到内存不可以,不知道什么情况; // dma_multi_data_parameter_struct dma_init_parameter; // rc…

MySQL数据库练习----简易药品管理系统

CREATE TABLE user (userId int(11) NOT NULL AUTO_INCREMENT COMMENT 用户ID,userName varchar(255) NOT NULL COMMENT 用户名,account varchar(255) NOT NULL COMMENT 账号,password varchar(255) NOT NULL COMMENT 密码,createtime datetime NOT NULL COMMENT 创建时间,PRIM…

《C语言深度解剖》(20):动态内存管理中的易错点和避坑指南

🤡博客主页:醉竺 🥰本文专栏:《C语言深度解剖》 😻欢迎关注:感谢大家的点赞评论关注,祝您学有所成! ✨✨💜💛想要学习更多C语言深度解剖点击专栏链接查看&…

智能推荐系统:技术解析与实践指南

智能推荐系统:技术解析与实践指南 背景与挖掘目标 在互联网信息爆炸的今天,用户在海量内容中筛选感兴趣的信息变得日益困难。因此,搜索引擎结合推荐系统的模式应运而生。本章节将深入探讨推荐系统,其核心目标如下: …

Mybatis动态sql标签

动态SQL标签简介: MyBatis的一个强大的特性之一通常是它的动态SQL能力。如果你有使用JDBC或其他相似框架的经验,你就明白条件地串联SQL字符串在一起是多么的痛苦,确保不能忘了空格或在列表的最后省略逗号。动态SQL可以彻底处理这种痛苦。 Mybatis中实现动态sql的标签有&#x…

【Help】Ubuntu卸载原生版本python后图像化界面消失

1. 开机进入tty界面,登录账号和密码 2. ping www.baidu.com 检测网络连接 2.1 若出现菱形乱码,则修改语言位英文 LANG"en_US.UTF-8" LANGUAGE"en_US:en" 2.2 如果没有网络连接,则 查找可用wifi:nmcli dev …

【论文速读】|利用大语言模型实现现实世界代码的翻译:一项针对翻译到Rust语言的研究

本次分享论文:Towards Translating Real-World Code with LLMs: A Study of Translating to Rust 基本信息 原文作者:Hasan Ferit Eniser, Hanliang Zhang, Cristina David, Meng Wang, Maria Christakis, Brandon Paulsen, Joey Dodds, Daniel Kroeni…

Maven之介绍

目录 一、简介 (2)为什么学习Maven? 二、小结 一、简介 (1)Maven 是一个 Java 项目管理和构建工具。它可以定义项目结构、项目依赖,并使用统一的方式进行自动化构建,是Java项目不可缺少的工具…

《FFmpeg开发实战:从零基础到短视频上线》资源下载和内容勘误

资源下载 下面是《FFmpeg开发实战:从零基础到短视频上线》一书用到的工具和代码资源: 1、本书使用的FFmpeg版本为FFmpeg 5.1.2,也可在FFmpeg的github主页上下载最新的FFmpeg源码。 2、本书第12章使用的Android Studio版本为Android Studio D…

原装GUVCL-T10GD韩国GENICOM光电二极管紫外线传感器原厂代理商

深圳市宏南科技有限公司是韩国GenUV公司的原厂代理商,所售紫外线传感器均来自于原始生产厂商直接供货,非第三方转售。 GUVCL-T10GD 韩国GENICOM光电二极管光传感器 / 低亮度 / 紫外线 UV-C传感器 GUVCL-T10GD 采用基于氮化铟的材料 肖特基型 光电二极管…

Linux线程:基于环形队列RingQueue的生产消费者模型

目录 一、环形队列的概念及定义 二、POSIX信号量 三、RingQueue的实现方式 3.1RingQueue.hpp的构建 3.2Thread.hpp 3.3Main.cc主函数的编写 3.4Task.hpp function包装器的使用 一、环形队列的概念及定义 此处的环形队列并不是一个真正意义上的环,而是通过对容…