JMeter 5.5中运行依赖ethers库的JavaScript代码问题求助
在JMeter 5.5中运行依赖ethers.js的JavaScript代码
为什么找不到BSF取样器?
JMeter 5.5已移除BSF取样器,官方从3.1版本起就推荐用JSR223取样器作为所有脚本类取样器的统一替代方案,涵盖原BSF、BeanShell等组件的功能。
解决方案:通过JSR223取样器调用Node.js执行ethers.js代码
ethers.js属于Node.js生态库,直接在JMeter内置JS引擎中运行会遇到模块加载问题,最可靠的方式是让JMeter调用本地Node.js环境执行脚本:
步骤1:准备独立Node.js脚本文件
将你的代码保存为token-transfer.js,替换API_URL和PRIVATE_KEY为实际值:
const ethers = require('ethers'); const provider = new ethers.JsonRpcProvider('你的API_URL'); const myPrivateKey = '你的PRIVATE_KEY'; const myWallet = new ethers.Wallet(myPrivateKey, provider); const amount = 100; async function transferTokens(){ const transaction = await myWallet.sendTransaction({ to: '0x7de3280c66ecee8f4cbd8fb78850229d8f10d22f', value: ethers.parseEther(amount.toString()), }); await transaction.wait(); console.log('交易哈希:', transaction.hash); } transferTokens().catch(err => console.error('交易失败:', err));
步骤2:安装ethers依赖
在脚本所在目录打开终端,执行:
npm install ethers
步骤3:在JMeter中配置JSR223取样器
- 添加JSR223取样器(右键测试计划 -> 添加 -> 取样器 -> JSR223取样器)
- 在「语言」下拉框选择Groovy(Groovy调用系统命令更稳定)
- 在脚本框中填入以下代码,替换
/path/to/your/token-transfer.js为脚本的实际路径:
def nodePath = "node" // 如果node不在系统PATH里,填完整路径比如"C:\\Program Files\\nodejs\\node.exe" def scriptPath = "/path/to/your/token-transfer.js" def process = "${nodePath} ${scriptPath}".execute() process.waitFor() // 打印脚本输出和错误信息 log.info("脚本输出:" + process.in.text) if (process.err.text) { log.error("脚本错误:" + process.err.text) }
备选方案:使用GraalVM JS引擎直接运行(不推荐,复杂度高)
若不想依赖外部Node.js环境,需配置JMeter使用GraalVM JS引擎并处理模块加载:
- 确保Java环境为GraalVM(普通OpenJDK不支持)
- 在JMeter的
jmeter.properties中修改配置:
jsr223.engine=graal.js graal.js.allow-all-access=true graal.js.js-script-engine=Graal.js
- 手动将ethers.js打包成单文件,避免
require调用,但这种方式兼容性问题较多,不建议用于生产场景。
内容的提问来源于stack exchange,提问作者Nitish
相关产品推荐
相关产品推荐

