JMeter 基于脚本实现代码共享
需求描述
需求是这样的:执行某次压测任务时,压测涉及的前端接口,要求携带一个userName请求头,该请求头值为实际用户名经过DES加密后,再采用Base64加密后的值,为此,编写了一段加密代码,发送请求前,对用户名进行加密,并将加密结果存储为变量。最后将代码添加到 JSR233采样器中,如下
DES加密代码
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输入框中,如下

这里需要注意两点:
File Name输入的脚本文件所在路径,可以是相对路径(相对于JMeter bin目录),也可以是绝对路径(建议将脚本所在目录参数化,这样,一改全改,避免在不同环境执行jmx脚本时,因为脚本路径不一样需要多处修改脚本路径)- 如果
File Name输入脚本路径,下面Script输入框中输入的代码将不再被执行(上述示例为验证此观点,特别在输入框中添加了日志打印代码,发现该日志打印代码未被执行)
JMeter 基于脚本实现代码共享的更多相关文章
- JMeter脚本java代码String数组要写成String[] args,不能写成String args[],否则报错。
JMeter脚本java代码String数组中括号要写在类型关键字后面,不能写在变量名后面.
- 基于脚本的modelsim自动化仿真笔记
这里记录一下基于脚本的modelsim自动化仿真的一些知识和模板,以后忘记了可以到这里查找.转载请标明出处:http://www.cnblogs.com/IClearner/ . 一.基本介绍 这里介 ...
- Jmeter使用自定义编写代码
原文地址:http://blog.csdn.net/li_ok/article/details/1487685 我们在做性能测试时,有时需要自己编写测试脚本,很多测试工具都支持自定义编写测试脚本,比如 ...
- Jmeter自定义编写Java代码调用socket通信
一.前言 最近需要测试一款手机游戏的性能,找不到啥录制脚本的工具,然后,另外想办法.性能测试实际上就是对服务器的承载能力的测试,和各种类型的手机客户端没有啥多大关系,手机再好,服务器负载不了,也不能够 ...
- 自定义编写jmeter的Java测试代码
我们在做性能测试时,有时需要自己编写测试脚本,很多测试工具都支持自定义编写测试脚本,比如LoadRunner就有很多自定义脚本的协议,比如"C Vuser","JavaV ...
- (1)jmeter录制脚本(使用代理的方式)
(1)jmeter录制脚本(使用代理的方式) jmeter 2018年07月09日 17时27分24秒 很多APP使用badboy是无法录制的,这种情况下需要使用chrome或Firefox,如果能联 ...
- Windows/Linux 代码共享,开发者称此举使Linux有了更差的结局
英特尔近期披露了 Linux 图形驱动程序相关的一些细节并指出,英特尔的图形驱动程序现在已在 Windows/Linux 之间共享约 60% 的代码库,90~100% 的性能. 针对此事,红帽公司的高 ...
- 项目分布式部署那些事(1):ONS消息队列、基于Redis的Session共享,开源共享
因业务发展需要现在的系统不足以支撑现在的用户量,于是我们在一周之前着手项目的性能优化与分布式部署的相关动作. 概况 现在的系统是基于RabbitHub(一套开源的开发时框架)和Rabbit.WeiXi ...
- Jmeter 录制脚本
Jmeter中有2种方法可以录制脚本. 不过我个人非常不推荐录制脚本,录制的脚本混乱,需要再次加工才能使用. 像我这么精通HTTP协议的人. 一直都是使用Fiddler来抓包,然后自己写脚本. 无论 ...
- node相关--代码共享
代码共享问题: 是否值得在两个环境中运行同一份代码: //看项目 依赖的API是否在两个环境中都有或有替代: 浏览器提供的标准API:XMLHttpRequest.WebSocket.DOM.canv ...
随机推荐
- 【C#】安装服务相关
判断C#写的服务版本:一般就是v2.0.50727和v4.0.30319这两个 Assembly currentAssembly = Assembly.LoadFile(filePath); var ...
- Jenkins自动化集成
gitlab连接Jenkins 创建token后 , 现在的网页上就会出现一个token: token只出现一次,注意保存 将这个token在Jenkins上配置,现在开始配置Jenkins Jenk ...
- minos 2.3 中断虚拟化——GICv2 管理
首发公号:Rand_cs 硬件肯定需要软件配合,这一节就来实战 GICv2 首先准备好 GICv2 手册:https://developer.arm.com/documentation/ihi0048 ...
- 剑指Offer-50.数组中重复的数字(C++/Java)
题目: 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为7 ...
- String Record
T1. P5840 算法:ACAM+BIT+树链剖分 自然地,我们会对 \(s_i\) 建 ACAM,然后建出一颗 fail 树. 此时我们考虑集合内加入一个新的字符串.每一个匹配到的点我们都会给从这 ...
- INFINI Labs 产品更新 | Easysearch 新增 kNN 搜索功能、Console 支持 LDAP 认证登录等
INFINI Labs 产品又更新啦~,包括 Easysearch v1.3.0.Gateway v1.16.0.Console v1.4.0.Agent v0.5.1.本次产品更新了许多实用新特性, ...
- NET8中增加的简单适用的DI扩展库Microsoft.Extensions.DependencyInjection.AutoActivation
这个库提供了在启动期间实例化已注册的单例,而不是在首次使用它时实例化. 单例通常在首次使用时创建,这可能会导致响应传入请求的延迟高于平时.在注册时创建实例有助于防止第一次Request请求的SLA 以 ...
- 跨域问题CORS笔记
CORS跨域问题 跨域问题简介 跨域资源共享(Cross-origin resource sharing, CORS)是用于让网站资源能被不同源网站访问的一种安全机制,这个机制由浏览器与服务器共同负责 ...
- ftl生成模板并从前台下载
1.生成模板的工具类 package com.jesims.busfundcallnew.util; import freemarker.template.Configuration; import ...
- 一文详解分布式 ID
前言 分布式系统中,我们经常需要对数据.消息等进行唯一标识,这个唯一标识就是分布式 ID,那么我们如何设计它呢?本文将详细讲述分布式 ID 及其生成方案. 一.为什么需要分布式 ID 目前大部分的系统 ...