记一次通过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);
名称已经被参数

 

posted @ 2022-07-24 17:42  成子吃橙子  阅读(94)  评论(0编辑  收藏  举报