阐明
应用 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;
}