2021/11/19号记录
今天再给同事们讲解【Java web接口自动化框架】时发现2个需要优化点
1、Excel的数据没有变量时也需要传公共参数:paramUtil--->传参多余
需要优化:方法重载,不传paramUtil即可。
2、执行接口时,每个接口都会调用登录接口--->这样登录比较频繁
需要优化:每个测试类登录1次即可。
问题1的优化后的BaseRequest.java的代码postRequest方法如下:
/**
* 基础请求封装,Post请求
* @param data 接口参数
* @return 接口返回内容
*/
public static String postRequest(String token,ApiDataBean data) throws Exception{
return postRequest(token,data,null,null);
}
/**
* 基础请求封装,Post请求
* @param data 接口参数
* @param paramUtil 公共池
* @return 接口返回内容
*/
public static String postRequest(String token,ApiDataBean data, ParamUtil paramUtil) throws Exception{
return postRequest(token,data,paramUtil,null);
}
/**
* postRequest 基础请求封装
* Post请求,例如:add或者update接口,查询接口
* @param data 接口参数
* @param paramUtil 公共池
* @param dataList_w 写入数据list
* @return 接口返回内容
*/
public static String postRequest(String token,ApiDataBean data, ParamUtil paramUtil,List<ApiDataBean> dataList_w) throws Exception{
Map<String, String> headers=new HashMap<>();
//获取请求头
headers=getHeader(token);
String resultContent;
//postRequest
System.out.println("<--测试用例描述:" + data.getDesc() + "-->");
String url = data.getUrl();
String reqUrl = host + url;
String expectData = data.getExpectData();
String reqData=data.getParam();
if (paramUtil!=null){
//如果传公共池参数,那么替换json中的参数
reqData=paramUtil.getCommonParam(data.getParam());
}
System.out.println(reqData);
//发送请求
HttpsClientUtils httpUtil = new HttpsClientUtils();
HttpClientResult httpResult = httpUtil.doPost(reqUrl, headers,reqData);
resultContent = httpResult.getContent();
//断言$.code=0
String code= JsonUtil.gsonParserString(resultContent,"code");
String result="FAIL";
if (code.equals(expectData)){
result="PASS";
}
log.info("测试结果:"+result+",请求测试数据:" + data.getApiName() + "," + data.getDesc() + "," + data.getMethod() + "," + reqUrl+ "," + reqData + " ,预期结果:code:" + expectData + ",执行返回结果:" + resultContent);
if (!data.getApiName().contains("select")){
System.out.println("测试结果:"+result+",预期结果,code:" + expectData + ",执行返回结果:" + resultContent);
}
else {
System.out.println("测试结果:"+result+",预期结果,code:" + expectData + ",执行返回结果,code:" + code);
}
if (dataList_w !=null) {
ApiDataBean data_w = new ApiDataBean();
//存储执行结果的数据
data_w.setId(data.getId());
data_w.setApiName(data.getApiName());
data_w.setDesc(data.getDesc());
data_w.setMethod(data.getMethod());
data_w.setUrl(data.getUrl());
data_w.setParam(data.getParam());
data_w.setExpectData(data.getExpectData());
data_w.setActualData(code);
data_w.setResult(result);
dataList_w.add(data_w);
}
return resultContent;
}
问题2:get,post,upload,down方法都新增token参数,登录在调用类UserManage.java里
private String token;
//先登录获取token
Login lo=new Login();
token=lo.getToken();
String resultContent=postRequest(token,data, paramUtil,dataList_w);
详细的代码BaseRequest.java如下:
package com.ciphergateway.server;
import com.ciphergateway.bean.ApiDataBean;
import com.ciphergateway.bean.HttpClientResult;
import com.ciphergateway.utils.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.*;
/**
*Author:HMF
*baseRequest 基础请求类
*create 2021-10-05,Update:2021-10-25;update:2021/11/19
**/
public class BaseRequest {
//子类需要调用log,应为protected
protected static final Logger log= LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
//配置文件
private static String host;
//静态块,初始化host
static {
try {
getHost();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* getHost() 从配置文件中获取Host
*/
public final static String getHost(){
String configFile="config.properties";
PropertiesUtil pro= new PropertiesUtil(configFile);
host=pro.readProperty("HOST");
String host_lo=host;
return host_lo;
}
/**
* getHeader() 标准请求头
*/
public final static Map<String, String> getHeader(String token){
return getHeader(token,null);
}
/**
* getHeader() 特殊获取请求头(例如upload)
*/
public final static Map<String, String> getHeader(String token,String special) {
Map<String, String> headers=new HashMap<>();
if (special ==null){
//标准请求的请求头
headers.put("Content-Type","application/json;charset=UTF-8");
headers.put("Authorization","Bearer "+token);
}else {
if (special.equals("upload")){
//upload的请求头
headers.put("Authorization", token);
}
else {
headers.put("Content-Type","application/json;charset=UTF-8");
}
}
return headers;
}
/**
* 基础请求封装,Post请求
* @param data 接口参数
* @return 接口返回内容
*/
public static String postRequest(String token,ApiDataBean data) throws Exception{
return postRequest(token,data,null,null);
}
/**
* 基础请求封装,Post请求
* @param data 接口参数
* @param paramUtil 公共池
* @return 接口返回内容
*/
public static String postRequest(String token,ApiDataBean data, ParamUtil paramUtil) throws Exception{
return postRequest(token,data,paramUtil,null);
}
/**
* postRequest 基础请求封装
* Post请求,例如:add或者update接口,查询接口
* @param data 接口参数
* @param paramUtil 公共池
* @param dataList_w 写入数据list
* @return 接口返回内容
*/
public static String postRequest(String token,ApiDataBean data, ParamUtil paramUtil,List<ApiDataBean> dataList_w) throws Exception{
Map<String, String> headers=new HashMap<>();
//获取请求头
headers=getHeader(token);
String resultContent;
//postRequest
System.out.println("<--测试用例描述:" + data.getDesc() + "-->");
String url = data.getUrl();
String reqUrl = host + url;
String expectData = data.getExpectData();
String reqData=data.getParam();
if (paramUtil!=null){
//如果传公共池参数,那么替换json中的参数
reqData=paramUtil.getCommonParam(data.getParam());
}
System.out.println(reqData);
//发送请求
HttpsClientUtils httpUtil = new HttpsClientUtils();
HttpClientResult httpResult = httpUtil.doPost(reqUrl, headers,reqData);
resultContent = httpResult.getContent();
//断言$.code=0
String code= JsonUtil.gsonParserString(resultContent,"code");
String result="FAIL";
if (code.equals(expectData)){
result="PASS";
}
log.info("测试结果:"+result+",请求测试数据:" + data.getApiName() + "," + data.getDesc() + "," + data.getMethod() + "," + reqUrl+ "," + reqData + " ,预期结果:code:" + expectData + ",执行返回结果:" + resultContent);
if (!data.getApiName().contains("select")){
System.out.println("测试结果:"+result+",预期结果,code:" + expectData + ",执行返回结果:" + resultContent);
}
else {
System.out.println("测试结果:"+result+",预期结果,code:" + expectData + ",执行返回结果,code:" + code);
}
if (dataList_w !=null) {
ApiDataBean data_w = new ApiDataBean();
//存储执行结果的数据
data_w.setId(data.getId());
data_w.setApiName(data.getApiName());
data_w.setDesc(data.getDesc());
data_w.setMethod(data.getMethod());
data_w.setUrl(data.getUrl());
data_w.setParam(data.getParam());
data_w.setExpectData(data.getExpectData());
data_w.setActualData(code);
data_w.setResult(result);
dataList_w.add(data_w);
}
return resultContent;
}
/**
* 基础请求封装,Get请求,例如删除:delete_role,不同的是map10.put("id", reqData),请求参数是map10
* @param data 参数
* @param paramUtil 公共池
* @param keyId 参数
* @return 接口返回内容
*/
public static String getRequest(String token,ApiDataBean data,ParamUtil paramUtil,String keyId) throws Exception {
return getRequest(token,data,paramUtil,keyId,null);
}
/**
* getRequest 基础请求封装Get请求(包括存储数据)
* @param data excel输入参数
* @param keyId get请求参数
* @param dataList_w 存储数据
* @return 接口返回内容
*/
public static String getRequest(String token,ApiDataBean data,ParamUtil paramUtil,String keyId,List<ApiDataBean> dataList_w) throws Exception {
Map<String, String> headers=new HashMap<>();
//获取请求头
headers=getHeader(token);
//getRequest
System.out.println("<--测试用例描述:" + data.getDesc() + "-->");
String url = data.getUrl();
String reqUrl = host + url;
String expectData = data.getExpectData();
String reqData=data.getParam();
if (paramUtil!=null){
//如果传公共池参数,那么替换json中的参数
reqData=paramUtil.getCommonParam(data.getParam());
}
System.out.println(reqData);
//设置请求参数
Map<String, String> map10 = new HashMap<>();
map10.put(keyId, reqData);
System.out.println(reqData);
//发送请求
HttpsClientUtils httpUtil = new HttpsClientUtils();
HttpClientResult httpResult = httpUtil.doGet(reqUrl, headers, map10);
String resultContent = httpResult.getContent();
//断言$.code=0
String code = JsonUtil.gsonParserString(resultContent, "code");
String result="FAIL";
//boolean flag=false;
if (code.equals(expectData)){
result="PASS";
//flag=true;
}
log.info("测试结果:"+result+",请求测试数据:" + data.getApiName() + "," + data.getDesc() + "," + data.getMethod() + "," + reqUrl+ "," + reqData + " ,预期结果:code:" + expectData + ",执行返回结果:" + resultContent);
System.out.println("测试结果:"+result+",预期结果,code:" + expectData + ",执行返回结果:" + resultContent);
//存储执行结果的数据
//List<ApiDataBean> dataList_w=new ArrayList<>();//执行后存储结果
if (dataList_w !=null) {
ApiDataBean data_w = new ApiDataBean();
data_w.setId(data.getId());
data_w.setApiName(data.getApiName());
data_w.setDesc(data.getDesc());
data_w.setMethod(data.getMethod());
data_w.setUrl(data.getUrl());
data_w.setParam(data.getParam());
data_w.setExpectData(data.getExpectData());
data_w.setActualData(code);
data_w.setResult(result);
dataList_w.add(data_w);
}
return resultContent;
}
public static void uploadRequest(String token,ApiDataBean data,String fileName) throws Exception {
uploadRequest(token,data,fileName,null);
}
/**
* 基础请求封装 upload请求
* @params data 数据
* @params fileName 文件名
* @params dataList_w 存储数据list
* @return 接口返回内容
*/
public static void uploadRequest(String token,ApiDataBean data,String fileName,List<ApiDataBean> dataList_w) throws Exception {
Map<String, String> headers=new HashMap<>();
//获取请求头
headers=getHeader(token,"upload");
System.out.println("<--测试用例描述:" + data.getDesc() + "-->");
String url = data.getUrl();
String expectData = data.getExpectData();
String reqUrl = host + url;
//发送请求
HttpsClientUtils httpUtils = new HttpsClientUtils();
System.out.println(fileName);
System.out.println(reqUrl);
//System.out.println(headers);
HttpClientResult httpResult = httpUtils.uploadFile(reqUrl, headers,fileName);
String resultContent = httpResult.getContent();
String code= JsonUtil.gsonParserString(resultContent,"code");
System.out.println("预期结果,code:" + expectData + ",执行返回结果:" + resultContent);
log.info("预期结果,code:" + expectData + ",执行返回结果:" + resultContent);
String result="FAIL";
if (code.equals(expectData)){
result="PASS";
}
//存储执行结果的数据
//List<ApiDataBean> dataList_w=new ArrayList<>();//执行后存储结果
if (dataList_w !=null) {
ApiDataBean data_w = new ApiDataBean();
data_w.setId(data.getId());
data_w.setApiName(data.getApiName());
data_w.setDesc(data.getDesc());
data_w.setMethod(data.getMethod());
data_w.setUrl(data.getUrl());
data_w.setParam(data.getParam());
data_w.setExpectData(data.getExpectData());
data_w.setActualData(code);
data_w.setResult(result);
dataList_w.add(data_w);
}
}
/**
* 基础请求封装 down请求
* @params data 数据
* @params paramUtil 公共池 ,请求的参数只有token
*/
public static void downRequest(String token,ApiDataBean data) throws Exception {
downRequest(token,data,null,null,null);
}
/**
* 基础请求封装 down请求
* @params data 数据
* @params paramUtil 公共池
* @params keyId1 ,请求的参数有token和keyId1
*/
public static void downRequest(String token,ApiDataBean data,ParamUtil paramUtil,String keyId1) throws Exception {
downRequest(token,data,paramUtil,keyId1,null);
}
/**
* 基础请求封装 down请求
* @params data 数据
* @params paramUtil 公共池
* @params keyId1
* @params keyId2 请求的参数有token和keyId1,keyId2
*/
public static void downRequest(String token,ApiDataBean data,ParamUtil paramUtil,String keyId1,String keyId2) throws Exception {
Map<String, String> headers=new HashMap<>();
//获取请求头
headers=getHeader(token);
System.out.println("<--测试用例描述:" + data.getDesc() + "-->");
String url = data.getUrl();
String downUrl = host + url;
System.out.println(downUrl);
//设置请求参数
Map<String, String> params = new HashMap<>();
if (paramUtil != null){
//替换json中的参数
String reqData = paramUtil.getCommonParam(data.getParam());
System.out.println(reqData);
if(keyId1 !=null && keyId2 !=null){
List<String> reqDataList= Arrays.asList(reqData.split(","));
params.put(keyId1,reqDataList.get(0));
params.put(keyId2,reqDataList.get(1));
}
else if (keyId1 !=null){
params.put(keyId1, reqData);
}
}
//下载需要把token放入下载url(特殊)
params.put("Authorization","Bearer"+token);
//发送请求
HttpsClientUtils httpUtils = new HttpsClientUtils();
httpUtils.download(downUrl,headers,params);
}
}