一、参数优化场景

  • 执行用例时,调用方法所需的参数太多,看起来很冗余,通过把参数封装为类对象,那么传一个对象作为参数就可以
  • 一个类中多个/所有方法会共用一些参数,把参数提取出来,初始化时候赋值
  • 实际跑接口自动化时候,很多的接口参数都会变化,我们需要去找一个统一的参数维护的地方,而不是参数的维护放到具体的方法中,方便跑不同参数的自动化脚本,方便维护

二、参数优化实践

  • 具体方法中的参数封装为类

参考:java如何把接口自动化的传参封装为类,实现多用例封装调用-CSDN博客

  • 执行测试用例时,预先需要的环境信息/需要的公有信息需要封装

进一步封装,可以把环境信息放到单独的文件去读取,cookie信息通过方法去获取(此处未实践) 

  • 通过当前类的get方法给private的变量赋值,其他需要private变量的方法可以用this.变量name直接使用
  • 比如:在查询方法中查询到数据,从返回的response中解析取得id,把在查询方法中,把id赋予删除时要使用的private类变量,删除时可以用到,在删除方法中,参数传递删除的id(用get方法获取到当前id)

 三、示例

若是参数比较大,可以把参数放到文件中进行读取(此处未处理)

package TestCase;

import Model.createDataModel;
import Model.deleteDataModel;
import Model.searchDataModel;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import okhttp3.*;

import java.io.IOException;


public class newDataPlus {

    private String cookie ;
    private String Url ;
    private String deleteId="";

    public newDataPlus(String cookie, String url) {
        this.cookie = cookie;
        this.Url = url;
    }

    public void setDeleteId(String deleteId) {
        this.deleteId = deleteId;
    }

    //添加数据
    public void addData(createDataModel createDataModel) throws IOException {
        String jsonStr=createDataModel.getJsonStr();
        //此为jsonstr变更变量的起点,把ci_name用变量代替
        // 创建ObjectMapper实例
        ObjectMapper objectMapper = new ObjectMapper();

        // 解析JSON字符串
        JsonNode rootNode = objectMapper.readTree(jsonStr);

        // 获取requestBody字段(它是一个字符串形式的JSON)
        String requestBodyStr = rootNode.get("requestBody").asText();

        // 解析requestBody为JsonNode
        JsonNode requestBodyNode = objectMapper.readTree(requestBodyStr);

        // 获取data对象
        ObjectNode dataNode = (ObjectNode) requestBodyNode.get("data");

        // 替换ci_name的值
        dataNode.put("ci_name", createDataModel.getRelacedTitle());

        // 将修改后的requestBodyNode转换回字符串
        String updatedRequestBodyStr = objectMapper.writeValueAsString(requestBodyNode);

        // 更新根节点的requestBody字段
        ((ObjectNode) rootNode).put("requestBody", updatedRequestBodyStr);

        // 将整个JSON转换回字符串
        String updatedJsonStr = objectMapper.writeValueAsString(rootNode);
        //如上为jsonStr变更变量的结束

        //创建请求对象
        OkHttpClient client = new OkHttpClient();

        //创建请求body的对象
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), updatedJsonStr);
        //构建请求
        Request request = new Request.Builder()
                .header("Accept-Encoding", "gzip, deflate, br")
                .header("Accept", "*/*")
                .header("Accept-Language", "zh-cn;q=0.8")
                .header("Connection", "keep-alive")
                .header("Multi_Language", "true")
                .header("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36")
                .header("appName", "dosmdp")
                .header("data_channel", "CMDB")
                .header("language", "zh_CN")
                .header("operate_type", "PC")
                .header("operationInfo", "")
                .header("Cookie", this.cookie)
                .post(requestBody)
                .url(String.format("%s/cmdb/api/v2/cmdb/ci/create",this.Url))
                .build();

        //执行请求
        Response response = client.newCall(request).execute();

        //获取响应信息
        String response_data = response.body().string();

        //输出请求结果
        System.out.println("新增response为:" + response_data);

        //解析json
        ObjectMapper mapper = new ObjectMapper();
        JsonNode jsonnode = mapper.readTree(response_data);

        //输出msg与mainSysId
        System.out.println("message:" + jsonnode.get("message"));
        System.out.println("id为:" + jsonnode.get("data").get("traceId"));

        String dataId = jsonnode.get("data").get("traceId").asText();

        if (jsonnode.get("message").asText().equals("请求成功")) {
            System.out.println("请求成功");
            System.out.println("新建数据id为:" + jsonnode.get("data").get("traceId"));
//            this.createDataId= jsonnode.get("data").get("traceId").asText();
        } else {
            System.out.println("新增执行失败!");
        }

        //关闭响应资源
        response.close();
        System.out.println("==============================这是新增接口=================================");

    }

    //查询数据
    public void search (searchDataModel searchDataModel) throws IOException {
         //创建请求对象
        OkHttpClient client =new OkHttpClient();

        //构建请求参数
//        String json = "{\"columnViewNames\":[],\"conditionColumnQuery\":[],\"primaryIds\":[],\"sortRules\":[],\"viewId\":\"bfd7dfc79fa84eaea9be535f1208acb4\",\"conditionFixedFilter\":[],\"currentPage\":1,\"pageSize\":100,\"useListDefSortRules\":true}";
        String json = searchDataModel.getJsonStr();
        //创建请求body的对象
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), json);
        //构建请求
        Request request = new Request.Builder()
                .header("Accept-Encoding","gzip, deflate, br")
                .header("Accept","*/*")
                .header("Accept-Language","zh-cn;q=0.8")
                .header("Connection","keep-alive")
                .header("Multi_Language","true")
                .header("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36")
                .header("appName","dosmdp")
                .header("data_channel","CMDB")
                .header("language","zh_CN")
                .header("operate_type","PC")
                .header("operationInfo","")
                .header("Cookie", this.cookie)
//                 .header("Content-Type","application/json")
                .post(requestBody)
                .url(String.format("%s/dosm/api/v2/lowcode/recordList/getData",this.Url))
                .build();

        //执行请求
        Response response = client.newCall(request).execute();

        //获取响应信息
        String response_data = response.body().string();

        //输出请求结果
        System.out.println("查询response为:"+response_data);

        //解析json
        ObjectMapper mapper = new ObjectMapper();
        JsonNode jsonnode =mapper.readTree(response_data);

        //输出msg与mainSysId
        System.out.println("msg:"+jsonnode.get("msg"));
        System.out.println("第一条数据id:"+jsonnode.get("data").get("records").get(0).get("mainSysId"));

        if(jsonnode.get("msg").asText().equals("成功")){
            System.out.println("查询执行成功");
            System.out.println("第一条数据id为:"+jsonnode.get("data").get("records").get(0).get("mainSysId"));
        }else{
            System.out.println("查询执行失败!");
        }

        this.setDeleteId(jsonnode.get("data").get("records").get(0).get("mainSysId").asText());
        //关闭响应资源
        response.close();

        System.out.println("============================这是查询接口=============================");
//        return jsonnode.get("data").get("records").get(0).get("mainSysId").asText();
    }

    public void deleteData(deleteDataModel deleteDataModel) throws IOException {
        OkHttpClient client =new OkHttpClient();

        //this.deleteId=this.searchDataId;

        //构建请求参数
//        String jsonStr = "{\"uri\":\"/api/v2/lowcode/recordList/batchRemoveRecords\",\"method\":\"POST\",\"requestBody\":\"{\\\"viewId\\\":\\\"bfd7dfc79fa84eaea9be535f1208acb4\\\",\\\"primaryIds\\\":[\\\"168724DE15B14E408184848F2C6C5BD0\\\"]}\"}";
        String jsonStr= deleteDataModel.getUrl();
        ObjectMapper mapper = new ObjectMapper();

        // 解析外层JSON
        JsonNode outerJson = mapper.readTree(jsonStr);
        ObjectNode outerObject = (ObjectNode) outerJson;

        // 解析requestBody中的JSON
        JsonNode requestBodyNode = mapper.readTree(outerJson.get("requestBody").asText());
        ObjectNode requestBodyone = (ObjectNode) requestBodyNode;

        // 创建新的primaryIds数组
        ArrayNode newPrimaryIds = mapper.createArrayNode();
//        newPrimaryIds.add(this.deleteId);
        newPrimaryIds.add(deleteDataModel.getReplaceKey());


        // 替换primaryIds
        requestBodyone.set("primaryIds", newPrimaryIds);
        // 更新外层JSON的requestBody
        outerObject.put("requestBody", requestBodyone.toString());

        System.out.println(outerObject.toString());


        //创建请求body的对象
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), outerObject.toString());
        //构建请求
        Request request = new Request.Builder()
                .header("Accept-Encoding","gzip, deflate, br")
                .header("Accept","*/*")
                .header("Accept-Language","zh-cn;q=0.8")
                .header("Connection","keep-alive")
                .header("Multi_Language","true")
                .header("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36")
//                .header("appName","dosmdp")
                .header("data_channel","CMDB")
                .header("language","zh_CN")
                .header("operate_type","PC")
                .header("operationInfo","")
                .header("Cookie", this.cookie)
//                 .header("Content-Type","application/json")
                .post(requestBody)
                .url(String.format("%s/cmdb/api/v2/cmdb/ci/del",this.Url))
                .build();

        //执行请求
        Response response = client.newCall(request).execute();

        //获取响应信息
        String response_data = response.body().string();

        //输出请求结果
        System.out.println("删除response为:"+response_data);

        JsonNode jsonnode =mapper.readTree(response_data);

        //输出msg与mainSysId
        System.out.println("message:"+jsonnode.get("message"));
        System.out.println("dataMessage:"+jsonnode.get("data").get("msg"));

        if(jsonnode.get("data").get("msg").asText().equals("success")){
            System.out.println("执行成功");
        }else{
            System.out.println("执行失败!");
        }

        //关闭响应资源
        response.close();

        System.out.println("这是删除接口");

    }



    public static void main(String[] args) throws IOException {
        //newData对象需要的参数
        String cookie ="CASTGC=TGT-75f5961e-c0aa-41ad-912c-f1920e0e468e; aops-sessionId=16752904-1444-462c-b1a5-349e80443acd; SESSION=MTY3NTI5MDQtMTQ0NC00NjJjLWIxYTUtMzQ5ZTgwNDQzYWNk";
        String url="http://10.0.14.246:18080/docp/gateway/";
        newDataPlus add = new newDataPlus(cookie,url);
        //addData需要的参数
        String jsonAdd = "{\"uri\":\"/api/v2/lowcode/formView/saveFormData\",\"method\":\"POST\",\"requestBody\":\"{\\\"sysId\\\":\\\"h2j2ox7zou7nu9y5kstcla8dxxr8zmaq\\\",\\\"globalSysId\\\":\\\"h2j2ox7zou7nu9y5kstcla8dxxr8zmaq\\\",\\\"formViewId\\\":\\\"65c7e7ae90b14d0282de9ec13a583bd1\\\",\\\"mainTableName\\\":\\\"mod_sss\\\",\\\"data\\\":{\\\"ci_name\\\":null,\\\"ci_code\\\":null,\\\"version\\\":null,\\\"description\\\":null,\\\"running_status\\\":\\\"running\\\",\\\"domain\\\":null,\\\"ip\\\":null,\\\"port\\\":null,\\\"mtce_mode\\\":null,\\\"mtc_org\\\":null,\\\"op_engineer\\\":null,\\\"bak_maintainer\\\":null,\\\"owner_org\\\":null,\\\"sys_owner\\\":null,\\\"mtc_contract\\\":null,\\\"low_code_sys_updated_time\\\":null,\\\"low_code_sys_updated_by\\\":null},\\\"fieldStateMap\\\":{\\\"ci_name\\\":{\\\"display\\\":true,\\\"editable\\\":true,\\\"required\\\":true},\\\"ci_code\\\":{\\\"display\\\":true,\\\"editable\\\":false,\\\"required\\\":false},\\\"version\\\":{\\\"display\\\":true,\\\"editable\\\":true,\\\"required\\\":false},\\\"description\\\":{\\\"display\\\":true,\\\"editable\\\":true,\\\"required\\\":false},\\\"running_status\\\":{\\\"display\\\":true,\\\"editable\\\":true,\\\"required\\\":true},\\\"domain\\\":{\\\"display\\\":true,\\\"editable\\\":true,\\\"required\\\":false},\\\"ip\\\":{\\\"display\\\":true,\\\"editable\\\":true,\\\"required\\\":false},\\\"port\\\":{\\\"display\\\":true,\\\"editable\\\":true,\\\"required\\\":false},\\\"mtce_mode\\\":{\\\"display\\\":true,\\\"editable\\\":true,\\\"required\\\":false},\\\"mtc_org\\\":{\\\"display\\\":true,\\\"editable\\\":true,\\\"required\\\":false},\\\"op_engineer\\\":{\\\"display\\\":true,\\\"editable\\\":true,\\\"required\\\":false},\\\"bak_maintainer\\\":{\\\"display\\\":true,\\\"editable\\\":true,\\\"required\\\":false},\\\"owner_org\\\":{\\\"display\\\":true,\\\"editable\\\":true,\\\"required\\\":false},\\\"sys_owner\\\":{\\\"display\\\":true,\\\"editable\\\":true,\\\"required\\\":false},\\\"mtc_contract\\\":{\\\"display\\\":true,\\\"editable\\\":true,\\\"required\\\":false},\\\"mtc_contract➛supplier\\\":{\\\"display\\\":true,\\\"editable\\\":false,\\\"required\\\":false},\\\"mtc_contract➛mtc_type\\\":{\\\"display\\\":true,\\\"editable\\\":false,\\\"required\\\":false},\\\"mtc_contract➛type\\\":{\\\"display\\\":true,\\\"editable\\\":false,\\\"required\\\":false},\\\"mtc_contract➛mtc_starttime\\\":{\\\"display\\\":true,\\\"editable\\\":false,\\\"required\\\":false},\\\"mtc_contract➛mtc_endtime\\\":{\\\"display\\\":true,\\\"editable\\\":false,\\\"required\\\":false},\\\"mtc_contract➛mtc_contact\\\":{\\\"display\\\":true,\\\"editable\\\":false,\\\"required\\\":false},\\\"mtc_contract➛mtc_phone\\\":{\\\"display\\\":true,\\\"editable\\\":false,\\\"required\\\":false}},\\\"dataId\\\":\\\"\\\"}\"}";
        String replaceAdd = "titleNew";
        //searchData需要的参数
        String jsonSearch = "{\"columnViewNames\":[],\"conditionColumnQuery\":[],\"primaryIds\":[],\"sortRules\":[],\"viewId\":\"bfd7dfc79fa84eaea9be535f1208acb4\",\"conditionFixedFilter\":[],\"currentPage\":1,\"pageSize\":100,\"useListDefSortRules\":true}";
        //deleteData的参数
        String jsondelete= "{\"uri\":\"/api/v2/lowcode/recordList/batchRemoveRecords\",\"method\":\"POST\",\"requestBody\":\"{\\\"viewId\\\":\\\"bfd7dfc79fa84eaea9be535f1208acb4\\\",\\\"primaryIds\\\":[\\\"168724DE15B14E408184848F2C6C5BD0\\\"]}\"}";

        createDataModel createDataModel = new createDataModel(jsonAdd,replaceAdd);
        add.addData(createDataModel);

        searchDataModel searchDataModel = new searchDataModel(jsonSearch);
        add.search(searchDataModel);

        String replacedelete =add.deleteId;
        deleteDataModel deleteDataModel = new deleteDataModel(jsondelete,replacedelete);
        add.deleteData(deleteDataModel);
    }
}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐