通常在一个项目中,进行列表的数据查询时,都会发送GET的请求方式,在URL都带有查询条件的参数,而这些参数通常会被转码后才发送到服务器。在进行接口测试的时候往往会对请求参数进行参数化,而转码会带来参数化的复杂性,非常麻烦。
例如:
转码后发送到服务器的URL请求:http://tool.chinaz.com/login?/login?username=admin&password=admin
解码后还原的URL请求:http://tool.chinaz.com/login?username=admin&password=admin
1.为了解决URL的转码问题,在发送URL请求时,使用fiddler进行抓取发送的URL参数进行解码还原后,再进行拼接请求参数。
2.将拼接好的URL请求使用JAVA编写的代码进行转码,以JAVA文件的方式导出,提供给JMETER进行方法调用。
3.为Http Request添加JSR223 PreProcessor组件,该组件是在Http 请求之前调用JAR文件的JAVA代码的方法对参数进行转码处理。
3.将转码好的数据进行参数化提供jmeter引用。
package evmsc2.com;
import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder;
public class UrlCoder {
public String urlDecoder(String decodeUrlParm) {
String decoderStr = null; try { decoderStr = URLDecoder.decode(decodeUrlParm, "utf-8"); System.out.println("解码:" + decoderStr); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return decoderStr; }
public String urlEncoder(String encodeUrlParm) { String encodeStr = null; try { encodeStr = URLEncoder.encode(encodeUrlParm, "utf-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("编码:" + encodeStr); return encodeStr; }
}
将该文件的代码以JAR文件的格式进行导出后,放在JMETER目录的/lib/ext目录下
在测试计划中的Library以相对路径的方式引用JAR文件。
调用方法代码如下:
import evmsc2.com.UrlCoder; import evmsc2.com.DateTimeTool; String beginTime = vars.get("last_upload_time"); String vin = vars.get("vin"); String begin = new DateTimeTool().getSpecialDayAddOrBefore(beginTime,-5,0,1,1); String end = new DateTimeTool().getSpecialDayAddOrBefore(beginTime,0,0,1,1); String str = "{\"conditions\":[{\"name\":\"beginTime\",\"value\":\"" + begin + "\"}," + "{\"name\":\"endTime\",\"value\":\"" + end + "\"},{\"name\":\"vin\",\"value\":\"" + vin + "\"}]," + "\"sort\":[],\"start\":0,\"limit\":10}"; String url = new UrlCoder().urlEncoder(str); log.info(url); vars.put("parameter",url);
调用之前需要进行导入包和类,跟java的风格一样。str参数就是发送URL请求的参数,所以需要str进行转码。
String url = new UrlCoder().urlEncoder(str);该行代码进行调用JAVA的方法进行转码,返回转码后的数据。
vars.put("parameter",url);该行代码进行将转码后的数据封装在一个变量中,提供jmeter进行使用,以${变量名}的方式获取值。
根据JMETER获取变量值的方式${parameter},获得值后,发送请求。
在JMETER的View Reesults Tree中可以查看到发送求前参数被转码,完美解决该问题。
注意:如果对本博文有疑问或者有错误的地方可留言。