LoadRunner調(diào)用JS加密后登錄實現(xiàn)
說明
使用LoadRunner調(diào)用javascript,實現(xiàn)加密登錄信息后,提交并登錄。
本例使用LoadRunner 2020 社區(qū)版。
測試網(wǎng)站登錄流程
測試網(wǎng)站采用了SM4對稱加密,每次GET請求登錄頁面時,生成隨機(jī)密鑰。把用戶名和密碼進(jìn)行加密,密文POST到后端進(jìn)行驗證。
啟用web_js_run
如下圖所示,首先下載了加密腳本sm4.js并導(dǎo)入到額外文件中。
依次選擇運(yùn)行時設(shè)置-Internet協(xié)議-首選項-啟用運(yùn)行Javascript代碼。

檢查點(diǎn)(web_reg_find)中文支持
在調(diào)試過程中發(fā)現(xiàn),web_reg_find有點(diǎn)問題,經(jīng)過查詢資料(https://www.cnblogs.com/zjn-20161215/p/8603468.html),使用lr_convert_string_encoding進(jìn)行編碼,并將編碼內(nèi)容存入變量。
// 將查找目標(biāo)轉(zhuǎn)為utf8編碼,放在變量test_find中
lr_convert_string_encoding("退出系統(tǒng)", LR_ENC_SYSTEM_LOCALE, LR_ENC_UTF8, "text_find");
// 將test_find內(nèi)容變?yōu)閟tring,存在變量find中
lr_save_string(lr_eval_string("{text_find}"),"find");
web_reg_find("Search=Body", "Text={find}", LAST);調(diào)用JS
web_js_run調(diào)用的代碼中可以使用TruClient函數(shù)。
| TruClient函數(shù) | 等效VuGen函數(shù) |
|---|---|
| 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 |
// 調(diào)用JS,加密數(shù)據(jù)。js文件導(dǎo)入【解決方案-額外文件】,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);完整內(nèi)容
參數(shù)配置

完整腳本
代碼很簡單
#include "web_api.h"
Action()
{
lr_start_transaction ("登錄OA");
/*----獲取key,開始----*/
// 設(shè)置正則提取規(guī)則
web_reg_save_param_regexp(
"ParamName=loginKey",
"RegExp=var k.*?=.*?\"(.*?)\";",
"Ordinal=1",
SEARCH_FILTERS,
LAST);
//lr_output_message(lr_eval_string("{loginKey}"));
// 訪問頁面,可以參數(shù)化直接用{}
web_url("getLogin",
"URL={uri}/login.html",
"TargetFrame=",
"Resource=0",
"Referer={uri}",
"Snapshot=t1.inf",
"Mode=HTTP",
LAST);
/*----獲取key,結(jié)束----*/
/*----登錄,開始----*/
// 調(diào)用JS,加密數(shù)據(jù)。js文件導(dǎo)入【解決方案-額外文件】,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}"));
// 檢查點(diǎn) 不支持中文的解決辦法
// 將查找目標(biāo)轉(zhuǎn)為utf8編碼,放在變量test_find中,注意正則表達(dá)式的轉(zhuǎn)義字符
lr_convert_string_encoding("退出系統(tǒng)", LR_ENC_SYSTEM_LOCALE, LR_ENC_UTF8, "text_find");
// 將test_find內(nèi)容變?yōu)閟tring,存在變量find中
lr_save_string(lr_eval_string("{text_find}"),"find");
web_reg_find("Search=Body",
"Text={find}",
LAST);
// 提交數(shù)據(jù),登錄
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);
/*----登錄,結(jié)束----*/
lr_end_transaction ("登錄OA", LR_AUTO);
return 0;
}以上就是LoadRunner調(diào)用JS加密后登錄實現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于LoadRunner JS加密登錄的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
競態(tài)條件Race condition及如何避免的三種方案詳解
這篇文章主要為大家介紹了競態(tài)條件Race condition及如何避免的三種方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10

