前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JMeter 基于脚本实现代码共享

JMeter 基于脚本实现代码共享

作者头像
授客
发布2023-09-26 08:38:05
1480
发布2023-09-26 08:38:05
举报
文章被收录于专栏:授客的专栏授客的专栏

需求描述

需求是这样的:执行某次压测任务时,压测涉及的前端接口,要求携带一个userName请求头,该请求头值为实际用户名经过DES加密后,再采用Base64加密后的值,为此,编写了一段加密代码,发送请求前,对用户名进行加密,并将加密结果存储为变量。最后将代码添加到 JSR233采样器中,如下

DES加密代码

代码语言:javascript
复制
import java.util.Base64;
import javax.crypto.Cipher;
import java.security.Key;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;


def encryptUsername(userName) {	
	String keyStr = 'jPQQqFT3lwg=' //  
	
	DESKeySpec dks = new DESKeySpec(keyStr.getBytes('UTF-8'));  
	SecretKeyFactory keyFactory = SecretKeyFactory.getInstance('DES');  
	Key key = keyFactory.generateSecret(dks); 
	        
	Cipher cipher = Cipher.getInstance('DES');
	cipher.init(Cipher.ENCRYPT_MODE, key); 
	
	byte[] encodedBytes = cipher.doFinal(userName.getBytes()) 

	def encodedString = Base64.getEncoder().encodeToString(encodedBytes);
	return encodedString
}

vars.put("userName", encryptUsername(vars.get('tsUserName')))
log.info('userName in script:' +vars.get("userName")) # 非调试时注释掉

此外,还有一些接口,在发送请求前,需要先请求通用配置类接口(比如获取组织结构树),以获取接口入参所需数据,也是采用类似如上的方法,即通过添加(前置)JSR233采样器。

按以上做法,即将代码编写在JSR233采样器中本身是没有问题的,问题在于相同的代码,被放在了n个采样器中(为了适配需求,比如不同页面的接口要求放在不同线程组中,配置不同的并发用户数,或者请求好些接口前都需要执行这份代码),这样当这份代码因为存在缺陷需要修改时,将需要修改n个地方,非常的繁琐。

解决方法

咋样避免上述的这种情况呢?我们可以将脚本文件化--将脚本放在一个文件中,而不是放在界面Script输入框中,如下

这里需要注意两点:

  1. File Name 输入的脚本文件所在路径,可以是相对路径(相对于JMeter bin目录),也可以是绝对路径(建议将脚本所在目录参数化,这样,一改全改,避免在不同环境执行jmx脚本时,因为脚本路径不一样需要多处修改脚本路径)
  2. 如果File Name 输入脚本路径,下面Script输入框中输入的代码将不再被执行(上述示例为验证此观点,特别在输入框中添加了日志打印代码,发现该日志打印代码未被执行)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求描述
  • 解决方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档