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);
    }

}