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;
}

 

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