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

时间:2013-07-26 08:58:13

标签: javascript dynamic jmeter

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

我正在尝试登录Tableau报告服务器。

3 个答案:

答案 0 :(得分:1)

我在使用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是一个NEOLOAD变量管理器:)

&#34; doLoginID&#34;是我根据字符串创建的变量,服务器通过该字符串为您输入密码。这个字符串可以在LoginPage的源代码中找到。

&#34; crypted_Password&#34;是我为POST加密参数创建的变量。

RSAKey(),setPublic()和encrypt()包含在您访问登录页面时从服务器下载的.js文件中。我只是将这些文件包含在我的项目库中,然后就可以了。

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

答案 1 :(得分:0)

我也没有找到并回答这个问题,但我所做的是每次运行时都将 tableau_online_id workgroup_session_id Cookie放入用户变量中测试。

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

答案 2 :(得分:0)

您可以使用JMeter中的类似方法动态加密密码,例如JSR223 Sampler通过Mozilla RhinoOracle Nashorn提供JavaScript语言支持,因此您可以使用相同的JavaScript代码加密密码作为应用程序。

然而,从性能角度看JavaScript语言效率不高,如果你需要模拟数百个并发用户,那么你每秒必须执行数百次加密JavaScript可能会成为瓶颈,最好考虑使用使用JSR223 Sampler的groovy语言。有关详细说明,groovy引擎安装和脚本最佳实践的说明,请参阅Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For!指南。