栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

四十一、java发送请求-接口数据函数表达式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

四十一、java发送请求-接口数据函数表达式

java发送请求-接口数据函数表达式 解决方案 step1:修改Excel接口案例Req_data数据格式 思路

借鉴jmeter函数表达式,故Req_data用${__函数名(参数1,参数2)}表示

表达式
Functions函数表达式备注
Time${__Time(,)}时间戳
${__Time(YMDHMS,)}年月日时分秒 格式:2050-10-01 13:00:00
${__Time(YMD,)}年月日 格式:2050-10-01
${__Time(HMS,)}时分秒 格式:13:00:00
${__Time(yyyyMMddHHmmss,)}年月日时分秒 格式:20501001130000
${__Time(yyyyMMddHHmmssSS,)}年月日时分秒毫秒 格式:20501001130000123
${__Time(yyyy,)}
${__Time(MM,)}
${__Time(dd,)}
${__Time(HH,)}
${__Time(mm,)}
${__Time(ss,)}
${__Time(SS,)}毫秒
Random${__Random(1,min,max)}1代表随机整数 情况1:min=0,max>0 随机范围是[min,max) 情况2:min>0,max>0 随机范围是[min,max)
${__Random(2,)}2代表随机boolean值
${__Random(3,min,max)}3代表随机Float值 情况1:min=0,max>0 随机范围是[0,max) 情况2:min>0,max>0 随机范围是[min,max+min)
${__Random(4,min,max)}4代表随机Double值 情况1:min=0,max>0 随机范围是[0,max) 情况2:min>0,max>0 随机范围是[min,max+min)
${__Random(5,length)}5代表随机String值 注:length>=1
UUID${__UUID(,)}生成1个唯一的UUID字符串
Md5${__Md5(key,)}得到key的md5值
step2:TestRun.java代码处理Req_data函数表达式 思路

TestRun.java流水线

—> PatternUtil.java类 handlerReqDataOfFunc(String reqData)方法—>

​1.正则表达式提取funcName,funcParam

2.利用funcName映射autotest工程对应的funcName类,再据此类对funcParam处理并返回value

​3.据value进行替换

step3:开发funcName对应的类(step2-2引入) step4:开发funcName与类的映射关系 step5:开发step2-2和step2-3 方案流程图 代码 TestRun.java
//处理函数表达式的reqData,增加在发送请求前
reqData = PatternUtil.handlerReqDataOfFunc(reqData);
PatternUtil.java
//初始化正则表达式
private static String funcRegex = "\$\{\_\_(\w+)\(([\w,]+)\)\}";
//函数表达式处理
public static String handlerReqDataOfFunc(String reqData) throws Exception {
    //建立规范
    Pattern p = Pattern.compile(funcRegex);
    Matcher m = p.matcher(reqData);
    //匹配结果
    while(m.find()) {
        String group = m.group();
        String funcName = m.group(1);
        String[] funcParam = m.group(2).split(",");

        //得到函数表达式对应的值并进行替换
        if (MapperClassUtil.isFunc(funcName)) {
            String value = MapperClassUtil.getValue(funcName, funcParam);
            reqData = StringUtil.replaceStr(reqData, group, value);
        }
    }
    return reqData;
}
Function.java
public interface Function {
	
	String getFunc();
	String execParam(String[] args);
}
Md5Function.java
public class Md5Function implements Function{

	public String getFunc() {
		return "Md5";
	}
	
	public String execParam(String[] args) {
		if(args.length == 1) {
			return DigestUtils.md5Hex(args[0]);
		}
		return null;
	}
}
RandomFunction.java
public class RandomFunction implements Function{

	public String getFunc() {	
		return "Random";
	}
	
	public String execParam(String[] args) {
		
		if("1".equals(args[0])) {
			int min = Integer.valueOf(args[1]);
			int max = Integer.valueOf(args[2]);
			return String.valueOf(RandomUtil.getRandomInt(min, max));
		}else if ("2".equals(args[0])) {
			return String.valueOf(RandomUtil.getRandomBoolean());
		}else if ("3".equals(args[0])) {
			Float min = Float.valueOf(args[1]);
			Float max = Float.valueOf(args[2]);
			return String.valueOf(RandomUtil.getRandomFloat(min, max));
		}else if ("4".equals(args[0])) {
			Double min = Double.valueOf(args[1]);
			Double max = Double.valueOf(args[2]);
			return String.valueOf(RandomUtil.getRandomDouble(min, max));
		}else if ("5".equals(args[0])) {
			return RandomUtil.getRandomString(Integer.valueOf(args[1]));
		}
		return null;
	}

}
TimeFunction.java
public class TimeFunction implements Function{

	public String getFunc() {
		return "Time";
	}
	
	public String execParam(String[] args) {
		if(args.length == 0) {
			return String.valueOf(DateTimeUtil.getTimeImpl());
		}else if("YMDHMS".equals(args[0])) {
			return DateTimeUtil.getDateTime();
		}else if("YMD".equals(args[0])) {
			return DateTimeUtil.getDate();
		}else if("HMS".equals(args[0])) {
			return DateTimeUtil.getTime();
		}else {
			return DateTimeUtil.getPatternDateTime(args[0]);
		}
	}
}
UUIDFunction.java
public class UUIDFunction implements Function{

	public String getFunc() {
		return "UUID";
	}

	public String execParam(String[] args) {
		if(args.length == 0) {
			return UUID.randomUUID().toString().replace("-", "");
		}
		return null;
	}

}
MapperClassUtil.java
public class MapperClassUtil {
	
	private static Map> funcMap= new HashMap<>();
	
	private MapperClassUtil() {};
	
	static {
		//关键词和类建立映射关系,存储到Map中
		try {
			//得到父接口Function
			Class function = Class.forName("com.youceedu.interf.functions.Function");
			
			//得到父接口Function路径
			String pk = function.getPackage().getName();
			String classPath = function.getClassLoader().getResource(pk.replace(".", "/")).getPath();
			
			//打开路径,得到类
			for (File file : new File(classPath).listFiles()) {
				
				String className = file.getName().substring(0, file.getName().length()-6);
				Class c = Class.forName(pk + "." + className);
				
				//阻止Function.class进funcMap
				if(!function.equals(c) && function.isAssignableFrom(c)) {
					Function funcObj = (Function) c.newInstance();
					String funcName = funcObj.getFunc();
					funcMap.put(funcName, funcObj.getClass());
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
    //得到函数表达式计算后的值
	public static String getValue(String funcName, String[] args) throws Exception {
		return funcMap.get(funcName).newInstance().execParam(args);
	}
	
    //判断funcMap是否包含funcName
	public static Boolean isFunc(String funcName) {
		return funcMap.containsKey(funcName);
	}
}    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/643478.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号