目前所在公司服务端采用 swagger 注解方式自动生成 API 接口文档,这给自动生成 excel 模版产生相当大的便利
一,生成 excel 模版基础数据
1.(源数据) 从 swagger UI 提数,写入到本地 txt 文件
/**
* 请求swagger JSON文本
* @throws Exception
*/
public static String GetSwaggerJSON() throws Exception{
String url = "https://xxxx/v2/api-docs";
return httpClientMethod.getSSLMethod(url,new HashMap<String, Object>(),new HashMap<String, Object>()).toString();
}
/**
* 请求swagger JSON文本,并把特殊字符进行处理后再写入本地文件
* @throws Exception
*/
public static void WriteSwaggerJSON() throws Exception{
String swaggerJSON = GetSwaggerJSON();
String[] fbsArr = {"$"};
for(String key:fbsArr){
if(swaggerJSON.contains(key)){
swaggerJSON = swaggerJSON.replace(key,"");
}
}
System.out.println(swaggerJSON);
fileMethod.writeTxtFile(swaggerJSON,sysConfig.SwaggerFilePath);
}
2.对源数据 (JSON) 进行解析,生成 excel 初始数据 (不要用 fastjson 解析,会出现大坑)
/**
* 读取本地SwaggerJSON文件
* @throws Exception
*/
public static JSONObject ReadSwaggerJSON() throws Exception{
String sJSON = fileMethod.readTxtFile(sysConfig.SwaggerFilePath);
JSONObject swaggerJSON = JSONObject.fromObject(sJSON);
return swaggerJSON;
}
/**
*处理SwaggerJSON数据,生成excel所需数据
*主要使用Map+JSON进行处理
* 2016-06-22 修改优化
*/
public static JSONObject basicModelMAPJSON() {
//由于处理过程代码逻辑比较复杂,只能抱歉的写了下思路,代码量挺大,总的一个思路: 递归方式处理
//获取swagger JSON源数据
//迭代器方式循环遍历数据
//数据存储格式例:{"URI":{"method":"HTTP方法","summary":"描述","tags":"归类","parameters":{参数信息}}}
//把数据写入到本地txt文件中
}
3.白名单
出现白名单的原因,整个产品的接口超过 600 多个接口,我们测试阶段可能只关心某一个模块的接口,因此出现了白名单
设计实现:
a. 在本地 txt 中输入需要测试的 URI 地址
b. 读取本地 txt 文件专为 list
/**
* 读TXT文件内容
* @param filepath 文件路径
* @return
* @throws IOException
*/
public static List<String> readTxtFileAsList(String filepath) throws IOException{
String result = "";
File directory = new File(".");
String path = null;
path = directory .getCanonicalPath();
path = path + filepath;
File file = new File(path);
if (!file.exists()){
return null;
}
List<String> resultList = new ArrayList<String>();
try{
BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
String s = null;
while((s = br.readLine())!=null){//使用readLine方法,一次读一行
// result = result + "\n" +s;
resultList.add(s);
}
br.close();
}catch(Exception e){
e.printStackTrace();
}
// result = result.replaceAll("\r|\n", "");
return resultList;
}
c.遍历 list,并比对生成到本地的 excel 初始数据,生成白名单数据,写入到本地
/**
* 读取本地本地自定义接口文本
* 生成excel JSON数据源,并写入本地
* @throws Exception
*/
public static JSONObject CustomModelJSON() throws Exception{
List<String> customAPIList = new ArrayList<String>();
JSONObject basicExcelJSONData = new JSONObject();
JSONObject customModelJSONData = new JSONObject();
//读取本地文本数据
customAPIList = fileMethod.readTxtFileAsList(sysConfig.CustomAPIFilePath);
//获取SwaggerExcelJSON基础数据源
basicExcelJSONData = ReadBasicSwaggerJSONData();
for(String keyAPI : customAPIList){
if(basicExcelJSONData.containsKey(keyAPI)){
customModelJSONData.put(keyAPI,basicExcelJSONData.getJSONObject(keyAPI));
}
}
fileMethod.writeTxtFile(customModelJSONData.toString(),sysConfig.CustomExcelBasicJSONData);//excel数据源写入到本地文件中
return customModelJSONData;
}
至此,基于 swagger UI 的数据提数及白名单提数完成
之后我这边继续更新
1.excel 数据模版生成
2.参数强度测试策略
3.HTTP Header 处理
4...