LoadRunner调用JS加密后登录实现
说明
使用LoadRunner调用javascript,实现加密登录信息后,提交并登录。
本例使用LoadRunner 2020 社区版。
测试网站登录流程
测试网站采用了SM4对称加密,每次GET请求登录页面时,生成随机密钥。把用户名和密码进行加密,密文POST到后端进行验证。
启用web_js_run
如下图所示,首先下载了加密脚本sm4.js并导入到额外文件中。
依次选择运行时设置-Internet协议-首选项-启用运行Javascript代码。
检查点(web_reg_find)中文支持
在调试过程中发现,web_reg_find有点问题,经过查询资料(https://www.cnblogs.com/zjn-20161215/p/8603468.html),使用lr_convert_string_encoding进行编码,并将编码内容存入变量。
// 将查找目标转为utf8编码,放在变量test_find中 lr_convert_string_encoding("退出系统", LR_ENC_SYSTEM_LOCALE, LR_ENC_UTF8, "text_find"); // 将test_find内容变为string,存在变量find中 lr_save_string(lr_eval_string("{text_find}"),"find"); web_reg_find("Search=Body", "Text={find}", LAST);
调用JS
web_js_run调用的代码中可以使用TruClient函数。
TruClient函数 | 等效VuGen函数 |
---|---|
LR.advanceParam | lr_advance_param |
LR.setParam | lr_save_string |
LR.getParam | lr_eval_string |
LR.log | lr_debug_message |
LR.userDataPoint | lr_user_data_point |
LR.freeParam | lr_free_parameter |
// 调用JS,加密数据。js文件导入【解决方案-额外文件】,LR.getParam是web_js_run中读取变量的方法 web_js_run( "Code=window.sm4.encrypt(LR.getParam('username') + LR.getParam('loginKey') + LR.getParam('password'), LR.getParam('loginKey'));", "ResultParam=cipherText", SOURCES, "File=sm4.js", ENDITEM, LAST);
完整内容
参数配置
完整脚本
代码很简单
#include "web_api.h" Action() { lr_start_transaction ("登录OA"); /*----获取key,开始----*/ // 设置正则提取规则 web_reg_save_param_regexp( "ParamName=loginKey", "RegExp=var k.*?=.*?\"(.*?)\";", "Ordinal=1", SEARCH_FILTERS, LAST); //lr_output_message(lr_eval_string("{loginKey}")); // 访问页面,可以参数化直接用{} web_url("getLogin", "URL={uri}/login.html", "TargetFrame=", "Resource=0", "Referer={uri}", "Snapshot=t1.inf", "Mode=HTTP", LAST); /*----获取key,结束----*/ /*----登录,开始----*/ // 调用JS,加密数据。js文件导入【解决方案-额外文件】,LR.getParam是web_js_run中读取变量的方法 web_js_run( "Code=window.sm4.encrypt(LR.getParam('username') + LR.getParam('loginKey') + LR.getParam('password'), LR.getParam('loginKey'));", "ResultParam=cipherText", SOURCES, "File=sm4.js", ENDITEM, LAST); //lr_output_message(lr_eval_string("{cipherText}")); // 检查点 不支持中文的解决办法 // 将查找目标转为utf8编码,放在变量test_find中,注意正则表达式的转义字符 lr_convert_string_encoding("退出系统", LR_ENC_SYSTEM_LOCALE, LR_ENC_UTF8, "text_find"); // 将test_find内容变为string,存在变量find中 lr_save_string(lr_eval_string("{text_find}"),"find"); web_reg_find("Search=Body", "Text={find}", LAST); // 提交数据,登录 web_submit_data("postLogin", "Action={uri}/login.html", "Method=POST", "TargetFrame=body", "RecContentType=text/html", "Referer={uri}/login.html", "Snapshot=t2.inf", "Mode=HTML", ITEMDATA, "Name=ticket", "Value={cipherText}", ENDITEM, LAST); /*----登录,结束----*/ lr_end_transaction ("登录OA", LR_AUTO); return 0; }
以上就是LoadRunner调用JS加密后登录实现的详细内容,更多关于LoadRunner JS加密登录的资料请关注脚本之家其它相关文章!
相关文章
js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器
本文实现了利用JS保存页面中文本框内容到本地,并另存为指定文件扩展名与编码类型,兼容IE,chrome,火狐等浏览器2018-02-02
最新评论