You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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取样器

  1. 添加JSR223取样器(右键测试计划 -> 添加 -> 取样器 -> JSR223取样器)
  2. 在「语言」下拉框选择Groovy(Groovy调用系统命令更稳定)
  3. 在脚本框中填入以下代码,替换/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引擎并处理模块加载:

  1. 确保Java环境为GraalVM(普通OpenJDK不支持)
  2. 在JMeter的jmeter.properties中修改配置:
jsr223.engine=graal.js
graal.js.allow-all-access=true
graal.js.js-script-engine=Graal.js
  1. 手动将ethers.js打包成单文件,避免require调用,但这种方式兼容性问题较多,不建议用于生产场景。

内容的提问来源于stack exchange,提问作者Nitish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 01:14:59