需求描述

需求是这样的:执行某次压测任务时,压测涉及的前端接口,要求携带一个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输入框中,如下

这里需要注意两点:

  1. File Name 输入的脚本文件所在路径,可以是相对路径(相对于JMeter bin目录),也可以是绝对路径(建议将脚本所在目录参数化,这样,一改全改,避免在不同环境执行jmx脚本时,因为脚本路径不一样需要多处修改脚本路径)
  2. 如果File Name 输入脚本路径,下面Script输入框中输入的代码将不再被执行(上述示例为验证此观点,特别在输入框中添加了日志打印代码,发现该日志打印代码未被执行)

JMeter 基于脚本实现代码共享的更多相关文章

  1. JMeter脚本java代码String数组要写成String[] args,不能写成String args[],否则报错。

    JMeter脚本java代码String数组中括号要写在类型关键字后面,不能写在变量名后面.

  2. 基于脚本的modelsim自动化仿真笔记

    这里记录一下基于脚本的modelsim自动化仿真的一些知识和模板,以后忘记了可以到这里查找.转载请标明出处:http://www.cnblogs.com/IClearner/ . 一.基本介绍 这里介 ...

  3. Jmeter使用自定义编写代码

    原文地址:http://blog.csdn.net/li_ok/article/details/1487685 我们在做性能测试时,有时需要自己编写测试脚本,很多测试工具都支持自定义编写测试脚本,比如 ...

  4. Jmeter自定义编写Java代码调用socket通信

    一.前言 最近需要测试一款手机游戏的性能,找不到啥录制脚本的工具,然后,另外想办法.性能测试实际上就是对服务器的承载能力的测试,和各种类型的手机客户端没有啥多大关系,手机再好,服务器负载不了,也不能够 ...

  5. 自定义编写jmeter的Java测试代码

    我们在做性能测试时,有时需要自己编写测试脚本,很多测试工具都支持自定义编写测试脚本,比如LoadRunner就有很多自定义脚本的协议,比如"C Vuser","JavaV ...

  6. (1)jmeter录制脚本(使用代理的方式)

    (1)jmeter录制脚本(使用代理的方式) jmeter 2018年07月09日 17时27分24秒 很多APP使用badboy是无法录制的,这种情况下需要使用chrome或Firefox,如果能联 ...

  7. Windows/Linux 代码共享,开发者称此举使Linux有了更差的结局

    英特尔近期披露了 Linux 图形驱动程序相关的一些细节并指出,英特尔的图形驱动程序现在已在 Windows/Linux 之间共享约 60% 的代码库,90~100% 的性能. 针对此事,红帽公司的高 ...

  8. 项目分布式部署那些事(1):ONS消息队列、基于Redis的Session共享,开源共享

    因业务发展需要现在的系统不足以支撑现在的用户量,于是我们在一周之前着手项目的性能优化与分布式部署的相关动作. 概况 现在的系统是基于RabbitHub(一套开源的开发时框架)和Rabbit.WeiXi ...

  9. Jmeter 录制脚本

    Jmeter中有2种方法可以录制脚本.  不过我个人非常不推荐录制脚本,录制的脚本混乱,需要再次加工才能使用. 像我这么精通HTTP协议的人. 一直都是使用Fiddler来抓包,然后自己写脚本. 无论 ...

  10. node相关--代码共享

    代码共享问题: 是否值得在两个环境中运行同一份代码: //看项目 依赖的API是否在两个环境中都有或有替代: 浏览器提供的标准API:XMLHttpRequest.WebSocket.DOM.canv ...

随机推荐

  1. 排查Python卡慢神器

    如果遇到Python正在运行中的进程卡住,找不到原因.可以试试以下工具方法, 对于python就像jstack对于java一样. 法一 使用pystack-debugger 安装方式如下: yum i ...

  2. Java 对象的揭秘

    前言 作为一个 Java 程序员,我们在开发者最多的操作要属创建对象了.那么你了解对象多少?它是如何创建?如何存储布局以及如何使用的?本文将对 Java 对象进行揭秘,以及讲解如何使用 JOL 查看对 ...

  3. SQL 分析与优化神器,验证了真相定律

    引言 今天要分享的是一个 SQL 语句分析的神器,它是一个基于 Soar 的开源 sql 分析与优化的 Web 图形化工具.我们在平常分析 SQL 语句,使用最多的方式就是 Explain 工具.了解 ...

  4. Android OpenMAX(三)高通OMX组件实现基础

    上一节了解了OMX组件实现的基础内容,这一节我们以高通OMX实现为例,简单看看如何实现一个OMX组件.本节代码参考自: omx_core_cmp.cpp qc_omx_component.h omx_ ...

  5. 基本定时器TIM6实现精确延时

    1.基本定时器的特点 (1).16位自动重装载累加计数器 (2).16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为1-65536之间的任意数值 !!!注意基本定时器只有向上计数模式,不要被 ...

  6. 高德面试:为什么Map不能插入null?

    在 Java 中,Map 是属于 java.util 包下的一个接口(interface),所以说"为什么 Map 不能插入 null?"这个问题本身问的不严谨.Map 部分类关系 ...

  7. 使用 JavaScript 脚本来进行复杂的查询改写

    有这么一个需求: 网关里怎样对跨集群搜索进行支持的呢?我想实现: 输入的搜索请求是 lp:9200/index1/_search 这个索引在 3 个集群上,需要跨集群检索,也就是网关能否改成 lp:9 ...

  8. 蓝屏rtux64w10.sys

    蓝屏rtux64w10.sys 环境: WIN10 +  Realtek USB RTL8156B 2.5G网卡 表现: 局域网复制时,间隔性速度变为0,多次后,最终蓝屏. 解决方法: 更新驱动. 地 ...

  9. CM 停用 Parcel 异常

    在将Doris集成到CM时,第一次打的包存在问题,想更新下,停用.删除Parcel时出现了问题卡住了,一直显示75%.无奈换了名称和版本,分配.激活,然后又卡在了75%,点开后,发现是同一台机器.其a ...

  10. Spring扩展——@Import注解

    引言 在Spring中有许多Enable开头的注解,比如以下常见注解 @EnableTransactionManagement @EanbleAsync @EnableCache @EnableAsp ...