Java版接口自动化--初稿

一、接口参数的获取:

1.参数通过Excel读取,并将结果写入Excel中

package org.fanqi.operateExcel;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class OperateExcelUtil {
    
    /*
     * 读取Excel数据
     */
    public List<Map<String, Object>> readExcel(String filename) {
        
        FileInputStream in;
        XSSFWorkbook workbook = null;
        try {
            in = new FileInputStream(filename);
            workbook = new XSSFWorkbook(in);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //获取第一张表
        XSSFSheet sheet = workbook.getSheetAt(0);
        List<Map<String, Object>> listCanshu = new ArrayList<Map<String, Object>>();
            for(int i=1;i<=sheet.getLastRowNum();i++){
                Map<String, Object> map = new TreeMap<String, Object>();
                String  cell0 = sheet.getRow(i).getCell(0).getStringCellValue();
                String  cell1 = sheet.getRow(i).getCell(1).getStringCellValue();
                //利用map保存参数
                map.put("canshu1", cell0);
                map.put("canshu2", cell1);
                listCanshu.add(map);
        }
            return listCanshu; 
    }
    
    /*
     * 测试结果写入原Excel
     * result为测试结果(Pass or Failed)
     */
    public void writeExcel(String filename,List<String> resultList,int resultRow) {
        
        XSSFWorkbook workbook = null;
        FileInputStream in = null;
        
        try {
            in = new FileInputStream(filename);
            workbook = new XSSFWorkbook(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
        XSSFSheet sheet = workbook.getSheetAt(0);
        int rowSum = sheet.getLastRowNum();
        XSSFCell cell = null;
        for(int i=1;i<=rowSum;i++){
            cell = sheet.getRow(i).getCell(resultRow);
            cell.setCellValue(resultList.get(i-1));
        }
        try {
            workbook.write(new FileOutputStream(filename));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    /*创建Excel文件
     * 
    public void createExcel() {
         
         XSSFWorkbook x = new XSSFWorkbook();
         XSSFFont font1 = x.createFont();
         font1.setFontHeightInPoints((short) 15);
         font1.setFontName("Pristina");
         font1.setColor(IndexedColors.GREEN.index);
         //font1.setColor(HSSFColor.YELLOW.index);
         XSSFCellStyle style = x.createCellStyle();
         style.setFont(font1);
         XSSFSheet sheet = x.createSheet();
         XSSFRow row0 = sheet.createRow(0);
         row0.createCell(0).setCellValue("姓名");
         row0.getCell(0).setCellStyle(style);
         row0.createCell(1).setCellValue("性别");
         row0.getCell(1).setCellStyle(style);
         row0.createCell(2).setCellValue("年龄");
         row0.getCell(2).setCellStyle(style);
         row0.createCell(3).setCellValue("职位");
         row0.getCell(3).setCellStyle(style);
         row0.createCell(4).setCellValue("工作年限");
         row0.getCell(4).setCellStyle(style);
         User u = new User();
         u.setName("郭大侠");
         u.setSex("男");
         u.setAge("30");
         u.setJob("Java开发");
         u.setExperience("2");
         
         User u1 = new User();
         u1.setName("陶大婶");
         u1.setSex("男");
         u1.setAge("28");
         u1.setJob("Java开发");
         u1.setExperience("3");
         
         ArrayList<User> arrayList = new ArrayList<User>();
         arrayList.add(u);
         arrayList.add(u1);
         for(int i=1; i<3; i++){
         XSSFRow row = sheet.createRow(i);
         row.createCell(0).setCellValue(arrayList.get(i-1).getName());
         row.createCell(1).setCellValue(arrayList.get(i-1).getSex());
         row.createCell(2).setCellValue(arrayList.get(i-1).getAge());
         row.createCell(3).setCellValue(arrayList.get(i-1).getJob());
        row.createCell(4).setCellValue(arrayList.get(i-1).getExperience());
        }
         
         try {
         x.write(new FileOutputStream("E:\test.xlsx"));
         } catch (FileNotFoundException e) {
             e.printStackTrace();
         } catch (IOException e) {
         e.printStackTrace();
        }
        }
    }
    */
    public static void main(String[] args) {
        OperateExcelUtil op = new OperateExcelUtil();
        List<String> resultList = new ArrayList<String>();
        resultList.add("Failed");
        resultList.add("Pass");
        op.writeExcel("E:\test.xlsx", resultList, 3);
    }
    
}
View Code

可能需要加验签:sign(MD5)验签

/**
 * MD5工具类(许总监)
 * 
 */
public class MD5Util {

    /**
     * Md5.
     * 
     * @param value
     *            the value
     * @return the string
     */
    public static String md5(String value) {
        return DigestUtils.md5Hex(value);
    }
    
    public static String md5New(String value) {
        try {
            MessageDigest md = MessageDigest.getInstance("md5");
            byte[] e = md.digest(value.getBytes());
            return toHex(e);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return value;
        }
    }

    /**
     * To hex.
     * 
     * @param bytes
     *            the bytes
     * @return the string
     */
    private static String toHex(byte bytes[]) {
        StringBuilder hs = new StringBuilder();
        String stmp = "";
        for (int n = 0; n < bytes.length; n++) {
            stmp = Integer.toHexString(bytes[n] & 0xff);
            if (stmp.length() == 1)
                hs.append("0").append(stmp);
            else
                hs.append(stmp);
        }
        return hs.toString();
    }
}
View Code

二、请求报文的组装:

1.组装为JSON格式

package org.fanqi.operateJSONUtil;

import java.util.List;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONObject;

public class BuildJSON {
    
    /*
     * 组装成JSON形式
     */
    public JSONObject buildJSON(Map mapParameters) {
         
        JSONObject json = new JSONObject(mapParameters);
        return json;     
    }
    
      /*
       * 组装成JSON形式
       */
     public JSONObject buildJSONByString(String str) {
          return new JSONObject(str);
   }



    /*
     * 组装成JSON形式
     * @parameter list<map>
     */
    public JSONArray buildsJSON(List<Map> listCanshu) {
         
        JSONArray jArray = new JSONArray();
        for(int i=0;i<listCanshu.size();i++ ){
            JSONObject json = new JSONObject(listCanshu.get(i));
            jArray.put(json);
        }
        return jArray;     
    }
}
View Code

三、请求方法:方式get、post、Hessian

1.get请求方式

/*
     * get请求方式
     * @author:fanqi
     */
    public static String httpGetMethod(String url,Map<Object,Object> map) {
        
        DefaultHttpClient httpClient = new DefaultHttpClient();
        Object value;
        Object urlInfo = "";
        for(Object key : map.keySet()){
            value = map.get(key);
            urlInfo += key+"="+value+"&";
        }
        urlInfo = urlInfo.toString().substring(0, urlInfo.toString().length()-1);        
        url = url + "?" + urlInfo.toString();
        HttpGet httpGet = new HttpGet(url);
        HttpResponse httpResponse = null;
        try {
            httpResponse = httpClient.execute(httpGet);
            StringBuilder sb = new StringBuilder();
            InputStream inputStream = httpResponse.getEntity().getContent();
            BufferedReader br = new BufferedReader(new InputStreamReader(inputStream,"GBK"));
            String temp = "";
            while((temp = br.readLine()) != null){
                sb.append(temp + "
");
            }
            return sb.toString();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }        
        return null;        
    }
View Code

2.Post请求方式PostMethod(根据httpclient.jar包的版本不同,用到的方法有差异)

/*
 * author:fanqi
 */
    public String  HttpClientPostMethod(String url,Map map) {
        
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        InputStream responseStream = null;
        //参数形式为JSON格式
        JSONObject parameter = new JSONObject(map);
        try {
            StringEntity entity = new StringEntity(parameter.toString());//解决中文乱码问题可以加参数"utf-8"
            entity.setContentEncoding("UTF-8");    
            entity.setContentType("application/json"); 
            httpPost.setEntity(entity);
            HttpResponse httpResponse = httpClient.execute(httpPost);
            if(httpResponse.getStatusLine().getStatusCode() == 200){
                HttpEntity httpEntity = httpResponse.getEntity();
                responseStream = httpEntity.getContent();
                BufferedReader br = new BufferedReader(new InputStreamReader(responseStream));
                StringBuilder sb = new StringBuilder();
                String temp = "";
                while((temp = br.readLine()) != null){
                    String str = new String(temp.getBytes(), "UTF-8");
                    sb.append(str + "
");
                }
                return sb.toString();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;        
    }
View Code

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/*
 * author:xu zong jian
 */
public static String HttpClientPostMethod(String url,String sign,Map<String,String> map){
        try {
            log.info("HttpClientPostMethod -- url:{}",url);
            HttpClient client = new HttpClient();
            PostMethod postMethod = new PostMethod(url);
            NameValuePair[] data = new NameValuePair[map.keySet().size()];
            Iterator it = map.entrySet().iterator();
            int i = 0;
            while (it.hasNext()) {
                Map.Entry entry = (Entry) it.next();
                Object key = entry.getKey();
                Object value = entry.getValue();
                data[i] = new NameValuePair(key.toString(), value.toString());
                i++;
            }
            postMethod.setRequestBody(data);
            client.executeMethod(postMethod);
            
            log.info("HttpClientPostMethod -- status:{} ",postMethod.getStatusCode());
            
            if (postMethod.getStatusCode() == HttpStatus.SC_OK) {
                return postMethod.getResponseBodyAsString();
            }
        } catch (Exception e) {
            log.error("HttpClientPostMethod error", e);
        }
        log.info("HttpClientPostMethod return null");
        return null;
    }
View Code

3.Hessian请求:

Hessian是基于Binary –RPC(二进制远程过程调用协议)进行通讯。

Hessian就是把Java对象转变成字节序列,然后通过Http传输到目标服务器上(主机),主机收到这个字节序列后,按照一定的协议标准进行反序列,提交给对应的服务处理。处理完成以后以同样的方式返回数据。

需要:Hessian.jar、 所测接口的API包、请求地址

/*
     * url为请求地址,包含端口号
     * Response为接口请求返回对象
     * ServerClient为接口中定义的请求客户端类
     */
    public Response executes(String url) {
        
        HessianProxyFactory hpf = new HessianProxyFactory();
        ServerClient ServerClient = null;
        try {
            ServerClient = (ServerClient) hpf.create(ServerClient.class, url);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        response = ServerClient.TxnSyncAudit(SyncAuditRequestBo);
        return response;
        
    }
View Code

四、返回报文的解析:

1.返回JSON格式的报文

package org.fanqi.operateJSONUtil;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.json.JSONObject;

public class AnalysisJSON {
    /*
     * 解析JSON报文,JSON中不嵌套JSON
     */
    public Map analysisJSON1(String responseResult) {
        //去掉{}
        responseResult = responseResult.substring(1, responseResult.length()-1);
        String[] strs = responseResult.split(",");
        @SuppressWarnings("rawtypes")
        Map<String, Object> map = new HashMap<String, Object>();
        for(int i=0;i<strs.length;i++){
            String[] str = strs[i].split(":");
            map.put(str[0], str[1]);
        }
        return map;
    }
    /*
     * 解析JSON报文,JSON中不嵌套JSON
     */
    public Map analysisJSON2(String responseResult) {
        
        JSONObject json = new JSONObject(responseResult);
        Iterator<String> it = json.keys();
        HashMap<String, Object> map = new HashMap<String, Object>();
        while(it.hasNext()){
            String key = it.next();
            Object value = json.getString(key);
            map.put(key, value);
        }
        return map;
    }
    /*
     * 解析JSON报文,JSON中含有JSON数组
     */
    public Map analysisJSONs(String responseResult) {
        
        JSONObject json = new JSONObject(responseResult);
        Iterator<String> it = json.keys();
        HashMap<String, Object> map = new HashMap<String, Object>();
        while(it.hasNext()){
            String key = it.next();
            Object value = json.getJSONArray(key);
            map.put(key, value);
        }
        return map;
    }        
    
}
View Code
原文地址:https://www.cnblogs.com/fqfanqi/p/6185325.html