java接口自动化flow传参优化
·
一、参数优化场景
- 执行用例时,调用方法所需的参数太多,看起来很冗余,通过把参数封装为类对象,那么传一个对象作为参数就可以
- 一个类中多个/所有方法会共用一些参数,把参数提取出来,初始化时候赋值
- 实际跑接口自动化时候,很多的接口参数都会变化,我们需要去找一个统一的参数维护的地方,而不是参数的维护放到具体的方法中,方便跑不同参数的自动化脚本,方便维护
二、参数优化实践
- 具体方法中的参数封装为类
参考: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);
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)