记一次通过json参数化做复杂参数接口自动化过程
请求参数如下
这种复杂的参数体,最好通过将每个字段拆分成不同的子请求体,然后在请求的时候进行组装,上图的每个字段都可以单独拆分出来一个请求,最后可以拼接出不同的业务流程。
先将请求json放置到本地,将需要参数化的值使用${}声明为一个变量
引入需要的jar包
<!-- yaml文件解析-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
<!-- csv文件解析-->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-csv</artifactId>
</dependency>
通过Jackson typereference 泛型读取相关文件
读取json文件并替换变量
// 活动名称
public static HashMap<String,Object> getActivityName(String activityName){
MapperUtil<HashMap<String,Object>> mapperUtil = new MapperUtil<>();
HashMap<String, Object> activityNameMap = mapperUtil.getReadValue(
"src/main/resources/data/basic-parameter/activityName.json");
log.info("读取的活动名称相关json"+activityNameMap);
HashMap<String, Object> newActivityName = new HashMap<>();
activityNameMap.forEach((
(s, o) -> { // 遍历value以 { 和} 结尾的值
log.info("未转换前" + o);
if (Objects.nonNull(o)) {
String value = o.toString();
if (value.startsWith("${") && value.endsWith("}")) { //获取到的结果为: ${activityName}
String value1 = StringUtils.stripStart(value, "${"); // 去掉${--> activityName}
String value2 = StringUtils.stripEnd(value1, "}"); // 去掉} -->activityName
if ("activityName".equals(value2)) {
o = activityName;
}
}
}
newActivityName.put(s, o);
}
));
log.info("遍历后"+activityNameMap);
return newActivityName;
}
因为json中有值为null的参数,使用fastjson转换时,需要加 WriteMapNullValue
String jsonString = JSONObject.toJSONString(bodyDepart, WriteMapNullValue);