1、環境准備:
LoadRunner11----->對應JDK1.6版本(32位)
LoadRunner12----->對應JDK1.7版本(32位)
(一)、JDK下載安裝完成后,配置環境變量:
1)、系統變量→新建 JAVA_HOME 變量 。 變量值填寫jdk的安裝目錄(例如:C:\Program Files (x86)\Java\jdk1.7.0_25)
2)、系統變量→尋找 Path 變量→編輯,在變量值最后輸入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
3)、系統變量→新建 CLASSPATH 變量,變量值填寫 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一點)
系統變量配置完畢,檢驗是否配置成功 運行cmd 輸入 java -version (java 和 -version 之間有空格)
若如圖所示 顯示版本信息 則說明安裝和配置成功。(紅色框中說明是32位版本)
(二)、下載java編寫工具idea
下載地址:https://www.jetbrains.com/idea/download/#section=windows,Community免費版
2、編寫java代碼,實例代碼以md5加密算法為例,實現登錄和獲取訂單列表的功能。
1)、使用idea工具,新建一個項目,命名為:myjavatest
2)、在該項目下,新建一個包,命名為:mytestMd5
3)、將java代碼拷貝到包下,最終目錄為:
4)、將lib文件夾引入,解決報錯問題:
1、選擇File文件,如下:
2、
3、添加之后的顯示:
4、將導入的Lib勾選:
5、至此,報錯信息已解決,可以直接調試、運行代碼。最終目錄結構:
3、將調試通過的文件,導出為jar。
1)、選擇File:
2)、
3)、
4)、
5)、進行構建:
6)、完成后,目錄文件夾下生成jar包文件:
4、在loadrunner中創建JavaVuser協議腳本:
1)、將調試好的java代碼拷貝到loadrunner中:
import lrapi.lr; //將包文件引入 import org.codehaus.jettison.json.JSONException; import org.codehaus.jettison.json.JSONObject; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.List; import java.util.Map; //引入MD5文件 import mytestMd5.MD5; //引入HttpClientRequest文件 import mytestMd5.HttpClientRequest; public class Actions { public int init() throws Throwable { return 0; }//end of init public int action() throws Throwable { // 定義登錄URL地址 String login_url = "http://******/mobile/api/user/login"; // 定義請求的參數 String login_data = "{\"mobile\":\"130********\",\"password\":\"123456\"}"; // 調用HttpClientRequest類里面的sendpost方法 //添加事物函數 lr.start_transaction("登錄"); String PostResult = HttpClientRequest.sendPost(login_url, login_data); System.out.println("登錄返回:"+ PostResult); JSONObject jsonobj = new JSONObject(PostResult); int status = (int) jsonobj.get("code"); //根據status返回值,判斷登錄事物是否成功 if(status == 0) { lr.end_transaction("登錄", lr.PASS); } else { lr.end_transaction("登錄", lr.FAIL); } System.out.println("code:" +status); //獲取token值 String token = (String) jsonobj.getJSONObject("data").get("token"); System.out.println("token:" +token); String modifypaypwd_url = "http://*********/mobile/api/user/resetpaypwd"; //調用md5類里面的getmd5code這個方法 String newPasswod = MD5.GetMD5Code("123456"); System.out.println("newPasswod:" +newPasswod); String modifypaypwd_data = "{\"token\":\""+token+"\",\"password\":\""+newPasswod+"\"}"; String PostMd5Result = HttpClientRequest.sendPost(modifypaypwd_url, modifypaypwd_data); System.out.println("PostMd5Result:" + PostMd5Result); return 0; }//end of action public int end() throws Throwable { return 0; }//end of end }
2)、設置RunTime Settings:
1、將lib文件下的包導入
2、將jdk目錄lib下的dt.jar、tools.jar導入
3、將構建完成的jar包導入
最終導入的文件如下:
3)、運行效果如下:
Starting iteration 1. Maximum number of concurrent connections per server: 4 [MsgId: MMSG-26989] Starting action Actions. Notify: Transaction "登錄" started. System.out: 登錄返回:{"code":0,"msg":"成功調用","data":{"id":443,"username":"test11","sex":1,"age":20,"mobile":"15989576517","email":"158000000011@test.com","gqid":"4000326","money":0.0,"pmoney":100.0,"createtime":1448868217000,"lasttime":1555392298486,"token":"TGBCHgxZMHv83Fu8HtizNy+5m1fVDGlnh/EO4TBvh7K97TNe1L9tEaJNlV/bCCrBxRU/jxaEwo/fQbjJJq9BrA==","identity":"7ca9dfc5987093f8"}} Notify: Notify: Transaction "登錄" ended with a "Pass" status (Duration: 0.5548). System.out: code:0 Notify: System.out: token:TGBCHgxZMHv83Fu8HtizNy+5m1fVDGlnh/EO4TBvh7K97TNe1L9tEaJNlV/bCCrBxRU/jxaEwo/fQbjJJq9BrA== Notify: System.out: newPasswod:e10adc3949ba59abbe56e057f20f883e Notify: System.out: PostMd5Result:{"code":0,"msg":"成功調用","data":{}} Notify: Ending action Actions. Ending iteration 1.
同樣的操作,獲取訂單列表代碼如下:
/* * LoadRunner Java script. (Build: _build_number_) * * Script Description: * */ import lrapi.lr; import org.codehaus.jettison.json.JSONException; import org.codehaus.jettison.json.JSONObject; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.codehaus.jettison.json.JSONObject; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.List; import java.util.Map; //引入testmd5.HttpClientRequest文件 import mytestMd5.HttpClientRequest; public class Actions { public int init() throws Throwable { return 0; }//end of init public int action() throws Throwable { // 定義登錄URL地址 String login_url = "http://********/mobile/api/user/login"; // 定義請求的參數 String login_data = "{\"mobile\":\"130********\",\"password\":\"123456\"}"; // 調用HttpClientRequest類里面的sendpost方法 //添加登錄事務函數 lr.start_transaction("登錄"); String PostResult = HttpClientRequest.sendPost(login_url, login_data); System.out.println("登錄返回:"+ PostResult); JSONObject jsonobj = new JSONObject(PostResult); int status = (int) jsonobj.get("code"); //根據status返回值,判斷登錄事務是否成功 if(status == 0) { lr.end_transaction("登錄", lr.PASS); } else { lr.end_transaction("登錄", lr.FAIL); } System.out.println("code:" +status); // 獲取token值 String token = (String) jsonobj.getJSONObject("data").get("token"); System.out.println("token:" +token); String tokenUTF8 = ""; // 進行URLcode try { tokenUTF8 = URLEncoder.encode(token, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } String get_url = "http://**********/mobile/api/order/getorders?"; String param = "offset=0"+"&"+"token="+token; // 把token替換成tokenUTF8 String Param = param.replace(token, tokenUTF8); //添加獲取訂單列表事務 lr.start_transaction("獲取訂單列表"); String GetResult = HttpClientRequest.sendGet(get_url, Param); System.out.println("GetResult:" + GetResult); JSONObject jsonbb = new JSONObject(GetResult); int statusbb = (int) jsonbb.get("code"); //根據statusbb返回值,判斷獲取訂單列表事務是否成功 if(statusbb == 0) { lr.end_transaction("獲取訂單列表", lr.PASS); } else { lr.end_transaction("獲取訂單列表", lr.FAIL); } System.out.println("code:" +statusbb); return 0; }//end of action public int end() throws Throwable { return 0; }//end of end }
運行結果如下:
Starting iteration 1. Maximum number of concurrent connections per server: 4 [MsgId: MMSG-26989] Starting action Actions. Notify: Transaction "登錄" started. System.out: 登錄返回:{"code":0,"msg":"成功調用","data":{"id":443,"username":"test11","sex":1,"age":20,"mobile":"15989576517","email":"158000000011@test.com","gqid":"4000326","money":0.0,"pmoney":100.0,"createtime":1448868217000,"lasttime":1555393646521,"token":"TGBCHgxZMHv83Fu8HtizNy+5m1fVDGlnh/EO4TBvh7K97TNe1L9tEaJNlV/bCCrBxRU/jxaEwo/fQbjJJq9BrA==","identity":"7ca9dfc5987093f8"}} Notify: Notify: Transaction "登錄" ended with a "Pass" status (Duration: 0.4899). System.out: code:0 Notify: System.out: token:TGBCHgxZMHv83Fu8HtizNy+5m1fVDGlnh/EO4TBvh7K97TNe1L9tEaJNlV/bCCrBxRU/jxaEwo/fQbjJJq9BrA== Notify: Notify: Transaction "獲取訂單列表" started. System.out: null--->[HTTP/1.1 200 OK] Notify: System.out: Date--->[Tue, 16 Apr 2019 05:47:26 GMT] Notify: System.out: Transfer-Encoding--->[chunked] Notify: System.out: Content-Type--->[application/json;charset=UTF-8] Notify: System.out: Server--->[Apache-Coyote/1.1] Notify: System.out: GetResult:{"code":0,"msg":"鎴愬姛璋冪敤","data":{"lists":[]}} Notify: Notify: Transaction "獲取訂單列表" ended with a "Pass" status (Duration: 0.1213).