首页 > 系统相关 >超实用 JMeter BeanShell Sampler 教程

超实用 JMeter BeanShell Sampler 教程

时间:2024-12-27 21:11:09浏览次数:5  
标签:log vars FailureMessage BeanShell 测试 Sampler JMeter

超实用 JMeter BeanShell Sampler 教程

宝子们,今天咱继续深挖 JMeter 里超厉害的 BeanShell Sampler,这次多来点实际工作中的例子,让你彻底搞懂它!

一、这是个啥玩意儿?

BeanShell Sampler 就像是 JMeter 的一个秘密武器,能让你用 Java 代码给测试计划 “开外挂”。当 JMeter 自带的功能没法满足那些奇奇怪怪的测试需求时,它就派上用场了。把它想象成一个万能的工具箱,你可以在里面自由发挥,编写代码让 JMeter 变得超级智能。

二、咋把它弄出来用呢?

在 JMeter 里找到你的线程组,然后右键点它,依次选 “添加”“取样器”“BeanShell Sampler”,这样它就出现在你的测试计划里啦。接着呢,在它的 “Script” 那块地方,就可以开始施展你的编程魔法了。

三、那些好用的内置宝贝

  1. log 小助手:这可是你的测试贴心小秘书。log.info("宝子们,这里一切正常哦!") 能把测试过程中的重要信息记录下来,比如某个步骤顺利完成啦。要是遇到问题,log.error("哎呀,出错啦!") 会马上把错误详情记好,方便你追踪问题根源。像你测试一个文件上传功能,成功上传后就 log.info("文件上传成功,撒花!"),要是上传失败,log.error("文件上传失败,原因可能是……"),后面详细写上你猜测的原因,这样排查问题就容易多了。
  2. vars 神奇口袋:用来存放各种测试要用的变量。vars.get("用户名") 就像是从口袋里掏出之前放进去的用户名。要是你想更新或新增变量,就用 vars.put("新变量名", "变量的值")。比如说,你从数据库里查询到一个用户的积分是 100,就可以 vars.put("用户积分", "100"),后续测试中涉及到积分相关的操作就能直接用这个变量了。
  3. prev 时光机:能让你看到之前发生的请求情况。prev.getResponseDataAsString() 就像是穿越回上一个请求,把那个请求的回复内容拿过来看个究竟。prev.getResponseCode() 呢,就是查看上一个请求的状态码,是成功的 200,还是出错的 404 之类的。例如,你刚发了一个查询用户信息的请求,用 prev.getResponseDataAsString() 就能检查返回的用户信息是不是完整准确,如果返回的是乱码或者数据缺失,那就得找找问题了。
  4. Failure 和 FailureMessage 小警钟:当测试出现状况时,把 Failure 设为 true,就相当于拉响了警报。然后 FailureMessage 就是在警报响起时,详细说明哪里出问题了。比如你在验证一个支付接口,结果支付成功的提示没出现,你就可以 Failure = true; FailureMessage = "支付成功提示未显示,可能支付流程有问题哦!"

四、实际工作中的应用场景

  1. 电商系统中的价格计算与验证
    • 在电商平台的测试中,商品价格会根据不同的促销活动、用户等级、优惠券等因素而变化。假设我们有一个测试场景,要验证不同等级的用户在使用特定优惠券购买特定商品时,最终支付价格是否正确。
    • 首先,通过其他组件(如 CSV Data Set Config)获取用户等级、商品原价、优惠券金额等数据。然后在 BeanShell Sampler 中,根据这些数据进行价格计算。例如:
// 获取用户等级
String userLevel = vars.get("userLevel");
// 获取商品原价
double originalPrice = Double.parseDouble(vars.get("originalPrice"));
// 获取优惠券金额
double couponAmount = Double.parseDouble(vars.get("couponAmount"));

double finalPrice = 0.0;
if ("vip".equals(userLevel)) {
    // VIP 用户享受额外 8 折优惠
    finalPrice = (originalPrice - couponAmount) * 0.8;
} else {
    finalPrice = originalPrice - couponAmount;
}

// 将计算出的最终价格设置为变量,供后续请求使用
vars.put("finalPrice", Double.toString(finalPrice));

// 发送购买请求后,检查响应中的实际支付价格是否与计算出的最终价格一致
String responseData = prev.getResponseDataAsString();
if (responseData.contains("实际支付价格:" + finalPrice)) {
    log.info("价格验证成功!");
} else {
    Failure = true;
    FailureMessage = "价格验证失败,实际支付价格与预期不符!";
    log.error(FailureMessage);
}
  1. 金融系统中的风险评估与交易限制
    • 在金融交易系统测试中,需要根据用户的信用评级、交易历史、账户余额等因素来评估风险,并对某些高风险交易进行限制或提示。例如,当用户的信用评级较低且交易金额超过其账户余额一定比例时,拒绝交易并返回相应提示。
// 获取用户信用评级
String creditRating = vars.get("creditRating");
// 获取账户余额
double accountBalance = Double.parseDouble(vars.get("accountBalance"));
// 获取交易金额
double transactionAmount = Double.parseDouble(vars.get("transactionAmount"));

if ("low".equals(creditRating) && transactionAmount > accountBalance * 0.8) {
    // 拒绝交易,设置响应信息
    vars.put("responseMessage", "交易被拒绝,由于信用评级低且交易金额过高。");
    Failure = true;
    FailureMessage = "高风险交易被拒绝,符合风险控制规则。";
    log.error(FailureMessage);
} else {
    // 交易正常,可继续进行其他操作
    log.info("交易风险评估通过,可继续执行。");
}
  1. 社交平台中的动态发布与权限验证
    • 在社交平台测试中,用户发布动态时,需要根据其账号状态(是否被封禁、是否实名认证等)以及动态内容是否符合平台规定(如是否包含敏感词)来决定动态是否能够成功发布。假设我们通过一个文本文件提供了敏感词列表,在 BeanShell Sampler 中检查动态内容是否包含敏感词。
// 获取用户动态内容
String postContent = vars.get("postContent");
// 假设从文件中读取敏感词列表并存储为数组(这里简化处理,实际可能需要更复杂的读取逻辑)
String[] sensitiveWords = {"敏感词 1", "敏感词 2", "敏感词 3"};

for (String word : sensitiveWords) {
    if (postContent.contains(word)) {
        // 动态包含敏感词,设置提示信息并阻止发布
        vars.put("errorMessage", "动态包含敏感词,发布失败。");
        Failure = true;
        FailureMessage = "动态发布因敏感词被拦截。";
        log.error(FailureMessage);
        break;
    }
}

if (!Failure) {
    log.info("动态内容合规,可继续发布流程。");
}

五、咋调试它呢?

  1. 日志输出:就像我们前面说的 log.infolog.error,你可以在代码里到处写上这些,把变量的值、执行到哪一步了这些信息都记下来。这样就像你在测试的路上放了很多小标记,要是出问题了,顺着标记就能找到问题在哪。比如在计算价格的代码里,你可以在每个计算步骤后加上 log.info("当前计算结果:" + 当前计算结果变量);,这样就能清楚地看到价格是怎么一步步算出来的。
  2. 启用调试模式:在代码里写上 debug(); 就像是给 JMeter 戴上了一个超级放大镜,它会把代码执行的每一个小细节都告诉你。不过这个放大镜太厉害,会让测试变慢,所以一般只有在你特别想知道代码到底咋跑的时候才用。
  3. 单步执行和变量值查看:用 debug("当前变量的值是:" + 变量名); 这样的代码,就像是你在代码执行的时候,让它停一下,看看某个变量现在是啥情况。比如说你在验证社交平台动态发布的代码里,在检查敏感词的循环中,加上 debug("当前检查的敏感词:" + word);,就能清楚地看到每个敏感词的检查情况。

宝子们,BeanShell Sampler 的潜力可大着呢!多在实际工作中用用这些例子,再根据自己的测试需求灵活修改代码,你就能轻松应对各种复杂的测试场景,让你的 JMeter 测试技能更上一层楼!

标签:log,vars,FailureMessage,BeanShell,测试,Sampler,JMeter
From: https://www.cnblogs.com/geekzone/p/18628802

相关文章

  • Jmeter自学【8】- 使用JMeter模拟设备通过MQTT发送数据
    今天使用jmeter推送数据到MQTT,给大家分享一下操作流程。一、安装JMeter参考文档:Jmeter自学【1】-Jmeter安装、配置二、安装MQTT插件1、下载插件我的Jmeter版本是5.6.3,用到的插件是:mqtt-xmeter-2.0.2-jar-with-dependencies.jar下载链接:https://pan.baidu.com/s/1mWgvSkX......
  • JMeter HTTP Request 采样器全面解析与实战指南
    《JMeterHTTPRequest采样器全面解析与实战指南》一、HTTPRequest采样器简介宝子们,JMeter里的HTTPRequest采样器可厉害啦,它就像是一个万能的网络小助手,能模拟各种各样的网页请求,不管是日常的网页浏览、网上购物,还是登录各种平台,它都能帮我们检测系统在这些操作下的性能......
  • JMeter JDBC 请求实战宝典
    《JMeterJDBC请求实战宝典》宝子们,今天咱就来唠唠JMeter里超厉害的JDBC请求,这玩意儿就像是数据库世界的神奇魔杖,能帮咱把数据库里的各种秘密(数据)都挖出来,还能对这些数据进行各种操作,不管是查查看、改一改,还是加点新东西、删点旧东西,它都能轻松搞定,而且还能告诉咱数据库在这......
  • JMeter 采样器超详细教程
    宝子们,今天咱就来好好唠唠JMeter里那些厉害的采样器,让你轻松拿捏性能测试和接口测试!一、采样器大集合先给宝子们来个采样器的“全家福”,让你们心里有个底:HTTP请求采样器:就像是个超级网购小能手,能模拟在网上各种逛店、买东西的操作,啥网页请求、接口调用,它都能轻松搞定,像你......
  • JMeter 线程组全家桶教程
    宝子们,今天咱就来唠唠JMeter里那些超重要的线程相关的玩意儿,学会了它们,你就能在性能测试的世界里“横冲直撞”啦!一、线程组——性能测试的主力军想象一下,你开了一家超级火爆的奶茶店,门口排着好多人等着买奶茶,这些人就相当于JMeter里的线程,而把这些人管理起来的队伍就是......
  • 轻松玩转 JMeter 测试计划组件
    轻松玩转JMeter测试计划组件宝子们,今天咱就来唠唠JMeter里那个超重要的测试计划组件,它可是整个性能测试的“指挥官”,把各种测试元素安排得明明白白。一、测试计划组件是个啥?有啥用?这个组件就像是一场大戏的总策划,它决定了整个测试的范围和目标。啥意思呢?就是说它规定了咱......
  • Jmeter的常用基础配置,看这一篇就够了~
    在使用Jmeter工具时,因为一些默认的背景颜色、字体图标大小等,导致操作并不是非常便利,因此需要掌握一些有必要的基础配置。本篇文章我们会讲到:修改主题外观颜色设置界面为中文全局调整界面字体大小分辨率等比缩放设置设置“消息体数据”、“Query数据”字体大小响应数据编......
  • 【软件测试】JMeter测试工具
    一、JMeter的安装配置:官网下载JMeter:ApacheJMeter-DownloadApacheJMeter  在上述网站中下载Binaries中的apache-Jmeter-5.6.3 tgz解压下载的Jmeter文件进入解压后文件夹的bin目录,直接在bin目录下打开ApacheJMeter.jar文件。二、举例:选择接口1进行HTTP-GET和HTTP-POS......
  • Jmeter 修改Sampler result 结果信息
    首先说一下,jmeter的Samplerresult是什么?Jmeter的Samplersresult是jmeter在向服务器发送请求后,接收到服务器响应的基本信息的展示,如sample的开始请求时间、发送的内容大小、基于协议的响应状态码和响应消息等信息。什么是基于协议的响应状态码和响应消息。比如http协议的状......
  • JMeter简介、基本组件、基本测试步骤
    一、JMeter简介定义JMeter是一款开源的性能测试工具,主要用于对软件应用程序进行负载测试、功能测试和性能测量。它是用Java语言编写的,因此可以在多种操作系统上运行,如Windows、Linux和MacOS等。用途性能测试方面:能够模拟大量用户并发访问系统,以此来评估系统在不同负载......