jmeter調用js文件,完成接口測試(base64加密)

目的:記錄下jmeter調用js文件,方便日後查看

描述:對於一些前臺的通過JS加密,如RSA加密,base64加密,可以通過直接調用js中方法完成接口測試

步驟

1.整理js文件到jmeter的bin目錄下,js文件要求:不要包含<script></script>,只需要有變量的聲明、方法的實現即可。

2.新建一個JSSR233 PreProcessor,選擇javascript語言

3.好了之後即可跑腳本了。

關鍵區域腳本

(1)加密查詢參數

//加載js文件
load("fdi_base64.js");

var sfzh = "${sfzh}";
var qry = "5,137,237|" + sfzh + "";
qry = encode64(qry);
//log.info("qry=" + qry);
vars.put("qry",qry);
vars.put("sfzh",sfzh);

(2)解密結果(因爲返回的結果是加密的,所有需要解密)

//加載js文件
load("fdi_base64.js");

var rsp = prev.getResponseDataAsString();//獲取服務器響應結果

//log.info("rsp=" + rsp);
var result = decode64(rsp);
//log.info("result=" + result);
vars.put("result",result);

(3)重置接口響應結果(美化)

String decodeResult = vars.get("result");

//解決編碼問題
public static String uRLDecoderString(String str) {
	String result = "";
	if (null == str) {
		return "";
	}
	try {
		result = java.net.URLDecoder.decode(str, "UTF-8");
	} catch (UnsupportedEncodingException e) {
		e.printStackTrace();
	}
	return result;
}

decodeResult = uRLDecoderString(decodeResult);
//log.info("解碼後:" + decodeResult);
prev.setDataEncoding("utf-8");
prev.setResponseData(decodeResult.toString());

vars.put("decodeResult",decodeResult);

(4)校驗結果:

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

String decodeResult = vars.get("decodeResult");

/**
 * 判定返回對象是否是一個json對象,需要在jmeter的lib/ext下引入jar包
 */
JSONArray jsonArray = null; 
public static boolean isJson(String str){
	try{
		JSONArray jsonArray= JSONArray.fromObject(str);
		return true;
	}catch(Exception e){
		return false;
	}
}

//public int getHuiYuanNum(){
//	JSONObject jsonObject = jsonArray.getJSONObject(0);
//	String errorCode = jsonObject.getString("Error");
//	if(errorCode.equals("1")){
//		
//	}else if(errorCode.equals("2")){
//	}
//}

if(!isJson(decodeResult)){
	Failure = true;
	FailureMessage = "接口響應結果:" + decodeResult + ",不是一個json數組,失敗的身份證號是:"+ vars.get("sfzh");
	
    //文件寫到本地
	FileWriter fw = null;
	BufferedWriter bf = null;
	try {
		fw = new FileWriter(new File("d:\\failedSFZH.txt"), true);//失敗的身份證號寫入文件
		bf = new BufferedWriter(fw);
		bf.write(vars.get("sfzh") + "\n");
		bf.flush();
	} catch (Exception e) {
		try {
			bf.flush();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		try {
			bf.close();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
	}
}else{
	Failure = false;
	ResponseMessage = decodeResult;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章