阐明

应用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.advanceParamlr_advance_param
LR.setParamlr_save_string
LR.getParamlr_eval_string
LR.loglr_debug_message
LR.userDataPointlr_user_data_point
LR.freeParamlr_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;}