LoadRunner調(diào)用JS加密后登錄實現(xiàn)
說明
使用LoadRunner調(diào)用javascript,實現(xiàn)加密登錄信息后,提交并登錄。
本例使用LoadRunner 2020 社區(qū)版。
測試網(wǎng)站登錄流程
測試網(wǎng)站采用了SM4對稱加密,每次GET請求登錄頁面時,生成隨機密鑰。把用戶名和密碼進行加密,密文POST到后端進行驗證。
啟用web_js_run
如下圖所示,首先下載了加密腳本sm4.js并導入到額外文件中。
依次選擇運行時設置-Internet協(xié)議-首選項-啟用運行Javascript代碼。
檢查點(web_reg_find)中文支持
在調(diào)試過程中發(fā)現(xiàn),web_reg_find有點問題,經(jīng)過查詢資料(https://www.cnblogs.com/zjn-20161215/p/8603468.html),使用lr_convert_string_encoding進行編碼,并將編碼內(nèi)容存入變量。
// 將查找目標轉(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文件導入【解決方案-額外文件】,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,開始----*/ // 設置正則提取規(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文件導入【解決方案-額外文件】,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}")); // 檢查點 不支持中文的解決辦法 // 將查找目標轉(zhuǎn)為utf8編碼,放在變量test_find中,注意正則表達式的轉(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)的詳細內(nèi)容,更多關(guān)于LoadRunner JS加密登錄的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JSON stringify及parse方法實現(xiàn)數(shù)據(jù)深拷貝
這篇文章主要為大家介紹了JSON.stringify遞歸及JSON.parse有限狀態(tài)自動機實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08微信小程序 詳解Page中data數(shù)據(jù)操作和函數(shù)調(diào)用
這篇文章主要介紹了微信小程序 詳解Page中data數(shù)據(jù)操作和函數(shù)調(diào)用的相關(guān)資料,需要的朋友可以參考下2017-01-01TypeScript新語法之infer?extends示例詳解
這篇文章主要為大家介紹了TypeScript新語法之infer?extends示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08npm?start運行項目過程package.json字段詳解
這篇文章主要為大家介紹了npm?start運行項目過程package.json字段詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02基于JavaScript代碼實現(xiàn)微信掃一掃下載APP
有很多人在做微信的掃一掃下載。但是在微信更新之后微信將該功能給禁止掉了,也不能說是全面禁止吧,因為騰訊、微信是一家嘛,通過應用寶審核的應用好像還是可以通過掃一掃直接下載的,下面通過本篇文章給大家介紹微信掃一掃下載app的代碼片段,感興趣的朋友一起看看吧2015-12-12