如何在jmeter中捕获使用javascript创建的动态值

如何在jmeter中捕获使用javascript创建的动态值,javascript,dynamic,jmeter,Javascript,Dynamic,Jmeter,我正在尝试运行JMeter脚本,但在登录时失败。原因是,密码使用RSA算法加密,也就是使用javascript加密。因此,录制时保存的密码无法工作,我无法获取加密密码的动态值,因为它正在使用JMeter不支持的javascript进行加密。由于在运行时使用javascript,我不能使用正则表达式查看响应数据,因为这不是响应的一部分 我正在尝试登录Tableau reporting server。我也没有找到答案,但每次运行测试时,我都会将Tableau\u联机\u id和工作组会话\u idc

我正在尝试运行JMeter脚本,但在登录时失败。原因是,密码使用RSA算法加密,也就是使用javascript加密。因此,录制时保存的密码无法工作,我无法获取加密密码的动态值,因为它正在使用JMeter不支持的javascript进行加密。由于在运行时使用javascript,我不能使用正则表达式查看响应数据,因为这不是响应的一部分


我正在尝试登录Tableau reporting server。

我也没有找到答案,但每次运行测试时,我都会将Tableau\u联机\u id工作组会话\u idcookies放在用户变量中


因此,我首先使用浏览器登录,并使用变量将这些cookie设置为JMeter cookies。

我在使用NEOLOAD时也遇到了同样的问题,因此我在Auth POST之前包含了以下脚本

// Get variable value from VariableManager
var doLoginIDString = context.variableManager.getValue("doLoginID");
if (doLoginIDString==null) {
    context.fail("Variable 'doLoginID' not found");
}

logger.debug("doLoginIDString="+doLoginIDString);

var rsa = new RSAKey();
rsa.setPublic(doLoginIDString,'10001');
var res = rsa.encrypt('<USER_PASSWORD>');
logger.debug("encrypted_var= "+res);
if (res) {
     context.variableManager.setValue("crypted_Password",res);
}
//从VariableManager获取变量值
var doLoginIDString=context.variableManager.getValue(“doLoginID”);
if(doLoginIDString==null){
失败(“未找到变量“doLoginID”);
}
debug(“doLoginIDString=“+doLoginIDString”);
var rsa=new RSAKey();
rsa.setPublic(doLoginIDString,'10001');
var res=rsa.encrypt(“”);
logger.debug(“加密的_var=“+res”);
如果(res){
context.variableManager.setValue(“加密的_密码”,res);
}
VariableManager是一个新加载变量管理器:)

“doLoginID”是我创建的一个变量,它基于一个字符串,该字符串由服务器传递给您,以便您用密码进行编码。此字符串可以在LoginPage的源代码中找到

“crypted_Password”是我为后加密参数创建的变量

RSAKey()、setPublic()和encrypt()包含在访问登录页面时从服务器下载的.js文件中。我只是将这些文件包含到我的项目库中,它就起作用了


我不知道与JMeter是否相同,但希望这能帮助您了解需要做什么。

您可以在JMeter中使用类似的方法动态加密密码,例如,通过或提供JavaScript语言支持,因此您可以使用与应用程序相同的JavaScript代码加密密码

但是,从性能的角度来看,JavaScript语言效率不是很高,如果您需要模拟数百个并发用户,那么您将不得不执行数百次加密,每秒JavaScript可能成为瓶颈,最好考虑使用JSR223采样器使用Groovy语言。有关groovy引擎安装和脚本编写最佳实践的详细说明,请参阅指南